Open hsipeng opened 7 years ago
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 修改配置文件位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<mvc:annotation-driven/>
<context:component-scan base-package="controller"></context:component-scan>
RequestMapping(value="/say.action")
public String say(HttpServletRequest request,HttpServletResponse response) throws Exception{
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
System.out.println(name);
return "hello";
}
或者
@RequestMapping(value="/addName.action")
public String addName(String name){
System.out.println(name);
return "hello";
}
web.xml
<!--解决中文乱码-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对象属性和页面传过来的属性值应保持一致,并且setter,getter方法不能省略,否则不能正确注入
解决方案:自定义日期
@RequestMapping(value="/addUser.action")
public String addUser(Model model,User user){
System.out.println(user);
String msg ="添加完成";
model.addAttribute("msg",msg);
return "hello";
}
//日期格式转换
@InitBinder
public void IntiBonder(ServletRequestDataBinder binder){
binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
上述的initbinder,可以在任意controller类中实现格式的转化。 通常放在基本类中,别的类继承即可。
如果遇到同名提交,那么如果接受参数为String类型,会吧用户提交的信息拼接成一个字符串,乳沟接受的参数为数组时,那么SpringMVC将会把同名提交自动赋值到数组中
跳转
@RequestMapping(value="/toUser.action") public String toUser(){ return "user"; }
### 转发
- 浏览器地址不会改变
- 能携带参数
forward:/toUser.action
//转发到用户注册页面 @RequestMapping(value="/helloForWard.action") public String Forward(){ System.out.println("实现转发"); return "forward:/toUser.action"; }
### 重定向
- 浏览器地址改变
- 不能携带参数
//重定向到用户注册页面 @RequestMapping(value="/helloRedirect.action") public String Redirect(){ System.out.println("实现重定向"); return "redirect:/toUser.action"; }
## 页面中name属性的值和参数名称不匹配
其他属性值的用法
@RequestMapping(value="/addUser.action") public String addUser(Model model,User user,@RequestParam(value="state",required=true,defaultValue="null") String state){ System.out.println(user); System.out.println(state); String msg ="添加完成"; model.addAttribute("msg",msg); return "hello"; }
- value 页面中的name属性值
- required true,表示必须传递该参数,false,可以不传
- defaultvalue 表示为null时,会添加默认值
## 页面路径问题
页面原来放置在webRoot文件夹下,那么浏览器可以直接通过url访问,不安全,所以放在web-inf文件夹下。
form action="${pageContext.request.contextPath}/updateFile.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file">
<input type="submit" value="提交">
</form>
配置文件上传解析器 controller
@RequestMapping(value="/updateFile.action")
public String updateFile(Model model,MultipartFile file) throws IOException{
String msg= "上传成功";
FileUtils.writeByteArrayToFile(new File("D:\\project\\SpringMVC-Day01-1\\WebContent\\WEB-INF\\upload\\"+file.getOriginalFilename()),file.getBytes());
model.addAttribute("msg",msg);
return "hello";
}
spring.xml
<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5242880"/>
</bean>
传统 say.action?name=a&age=1
理想模式
只传值不传参数名
RestFul格式 say/a/1.action
SpringMVC是一个前端控制框架,将代替传统的Servlet服务。SpringMVC是Spring的一大组件。
Servlet的缺点
url的路径问题
url:localhost:8090/SpringMVC/addUserServlet