1 springmvc简介
2 springmvc 工作原理
DispatcherServlet:前端控制器,不用程序员编写,springmvc提供
HandlerMapping:处理器映射器,负责查找处理请求的Handler,不用程序员编写,springmvc提供
HandlerAdapter:处理器适配器,负责调用对应Handler的功能方法处理器请求,不用程序员编写,springmvc
提供
Handler:处理器(后端控制器),负责真正处理请求的类,需要程序员编写,编程时通常会将Handler叫
Controller(控制器)
ModelAndView:模型数据和逻辑视图的综合体,不需要程序员编写,springmvc提供
ViewResolver:视图解析器,负责将逻辑视图解析成真正的视图。真正的视图=前缀+逻辑视图名+后缀。不需要
程序员编写,springmvc提供
View:视图,程序员要编写。视图可以jsp html等。
3 springmvc入门程序
开发步骤:
- 新建Dynamic Web Project
- 添加springmvc所依赖的jar包
- 在项目的src下添加springmvc配置文件
- 修改web.xml文件,在web.xml文件中增加DispatcherServlet配置
- 新建Controller类
- 测试
4 controller方法的返回值类型
controller方法的返回值类型包括:
1.ModelAndView
2.String
3.void
1 ModelAndView
@RequestMapping(value="/modelAndView")
public ModelAndView modelAndView(){
//创建ModelAndView对象
ModelAndView mv = new ModelAndView();
//ModelAndView存储数据范围和request一样
mv.addObject("hill", "hello");//request.setAttribute("hill","hello")
//设置逻辑视图 :hello是逻辑视图名,真正的视图名://WEB-INF/jsp/hello.jsp
mv.setViewName("hello");
return mv;
}
2 String
当返回值类型是String时,可以进行请求转发、重定向、逻辑视图名
@RequestMapping(value="/returnStringForWard")
public String returnStringForWard(){
//return "forward:WEB-INF/jsp/hello.jsp";
return "forward:hello.jsp";
}
//当@RequestMapping注解中只有1个属性value时,value可以省略,直接写url地址
@RequestMapping("/returnStringRedirect")
public String returnStringRedirect(){
return "redirect:index.jsp";
}
@RequestMapping("/returnStringViewName")
public String returnStringViewName(){
//hello是逻辑视图名,真正的视图是/WEB-INF/jsp/hello.jsp
return "hello";
}
3 void
当返回值为void时,分为:请求转发、请求重定向、返回json结果
@RequestMapping("/returnVoidForWard")
public void returnVoidForWard(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("index.jsp").forward(request, response);
}
@RequestMapping("/returnVoidRedirect")
public void returnVoidRedirect(HttpServletResponse response) throws IOException {
response.sendRedirect("index.jsp");
}
@RequestMapping("/returnVoidJson")
public void returnVoidJson(HttpServletResponse response) throws IOException {
// 创建用户对象
User user = new User();
user.setId(1);
user.setUsername("admin");
user.setPassword("admin");
response.getWriter().println(JSONObject.fromObject(user).toString());
}
4 注意
5 参数绑定
参数绑定指的是将请求参数中的值绑定到controller方法参数的过程。
参数绑定支持的数据类型包括:
默认数据类型:HttpServletRequest、HttpServletResponse、HttpSession、
Model/ModelMap:ModelMap是Model接口的实现类
Model:模型,保存数据的对象就是Model,可以将Model当成一个和
request session一样的容器。
- 基础数据类型 byte short int long char boolean float double
- 基础数据类型的封装类 Byte Short Integer Long Character Boolean Float Double
- String
- 自定义java类型
- 自定义java类型的封装类
- 数组
- springmvc不支持列表,如果要进行列表处理?
- 日期处理,日期类型添加注解
400:Bad Request 坏的请求,当请求参数和controller参数绑定不能正常进行是报错。
1、2基础数据类型以及基础数据类型的封装类
@RequestMapping("/paramBinding")
public String paramBinding(String code, String name, Double price, Integer count, Integer status,String description) {
System.out.println(code + "\t" + name + "\t" + price + "\t" + count + "\t" + status + "\t" + description);
return null;// 将paramBinding当做逻辑视图名返回,真正的视图:WEB-INF/jsp/paramBinding.jsp
}
3 String类型
4 自定义java类型
5 自定义java类型的封装类
6 数组
7 springmvc不支持列表,如果要进行列表处理?
6 中文乱码处理
<!-- 配置处理中文乱码的过滤器 -->
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
7 静态资源文件处理
静态资源包括:js css image等。
<!-- 处理静态资源 -->
<mvc:default-servlet-handler />
8 文件上传
1 加入jar包
2 在springmvc-servlet.xml文件中增加文件解析器
3 新建controller和jsp
4 测试