参数绑定

- 默认支持的类型
①、HttpServletRequest 对象
②、HttpServletResponse 对象
③、HttpSession 对象
④、Model/ModelMap 对象
@RequestMapping("/defaultParameter")
public ModelAndView defaultParameter(HttpServletRequest request,HttpServletResponse response,
HttpSession session,Model model,ModelMap modelMap) throws Exception{
request.setAttribute("requestParameter", "request类型");
response.getWriter().write("response");
session.setAttribute("sessionParameter", "session类型");
//ModelMap是Model接口的一个实现类,作用是将Model数据填充到request域
//即使使用Model接口,其内部绑定还是由ModelMap来实现
model.addAttribute("modelParameter", "model类型");
modelMap.addAttribute("modelMapParameter", "modelMap类型");
ModelAndView mv = new ModelAndView();
mv.setViewName("view/success.jsp");
return mv;
}
success.jsp主要代码
<body>
request:${requestParameter}
session:${sessionParameter}
model:${modelParameter}
modelMap:${modelMapParameter}
</body>
- 基本类型
<form action="basicData" method="post">
<input name="username" value="10" type="text"/>
<input type="submit" value="提交">
</form>
@RequestMapping("/basicData")
public void basicData(int username){
System.out.println(username);//10
}
or
@RequestMapping("/basicData")
public void basicData(@RequestParam(value="username") int name){
System.out.println(username);//10
}
- 包装类型
@RequestMapping("/basicData")
public void basicData(Integer username){
System.out.println(username);//10
}
-
简单POJO
属性名应该和前端字段名一致 -
复合POJO(A类含有一个B类类型的字段,B有b1,b2属性)
关于B的数据,前端字段名应该为b.b1,b.b2 -
数组类型
-
List类型
-
Map类型
自定义converter
package com.ys.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
//需要实现Converter接口,这里是将String类型转换成Date类型
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
//实现将字符串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return dateFormat.parse(source);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//如果参数绑定失败返回null
return null;
}
}
配置converter
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<!-- 自定义转换器的类名 -->
<bean class="com.ys.util.DateConverter"></bean>
</property>
</bean>
配置静态资源不被DispacherServlet拦截
- 使用
*.do
这种 - 在DispacherServlet之前配置默认的servlet
<!--要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了,我想性能是最好的吧。-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
- 在spring.xml中配置对静态资源不过滤
<!-- 配置静态文件过滤器 -->
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
- 使用<mvc:default-servlet-handler/>
在springmvc.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
静态资源的位置
我看到有好几种位置
- resources下的static文件夹
- webapp下,安全性低,可以直接通过浏览器输入url访问,不需要映射
- webapp/web-inf下,客户端无法访问,只有服务端可以访问,安全性高
网友评论