springmvc入门和原理分析
学习目标
1、springmvc简介2、搭建第一个专案
3、工作原理分析
4、springmvc中的常用操作
学习内容
1、springmvc简介
mvc模式:model 模型(dao+service) view检视(jsp) controller控制器:(servlet)spring框架:springmvc是一个子模组,实现了mvc模式的 一个轻量级的web层的请求和响应的框架
2、搭建第一个专案
1、引入spring相关的jar包org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
2、配置web.xml中的 spring监听器和spring mvc 的前端控制器
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
mvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:mvc.xml
1
mvc
*.action
3、配置springmvc的配置档案
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
4、建立controller类
@Controller
public class TestController {
//请求对映的注解:将位址列请求的路径和对应的方法进行对映
@RequestMapping("/test1")
public String test1(){
System.out.println("控制器中的方法...");
return "test1"; //检视的名字
}
@RequestMapping("/test2")
public ModelAndView test2(){
//预设采用的服务器转发:forward;
ModelAndView modelAndView= new ModelAndView();
//系结资料 :request.setAttribute()
modelAndView.addObject("key", "value");
//检视的名字 :jsp页面的名称
modelAndView.setViewName("test2");
return modelAndView;
}
}
5、配置服务器、部署并测试

3、工作原理分析

1、发起请求到前端控制器(DispatcherServlet )
2、前端控制器请求HandlerMapping查询Handler(可以根据xml、注解进行查询)
3、处理器对映器HandlerMapping向前端控制器DispatcherServlet 返回Handler
4、前端控制器DispatcherServlet 呼叫处理器界面卡HandlerAdapter 执行Handler
5、处理器界面卡HandlerAdapter 执行Handler
6、Handler执行完给处理器界面卡返回ModelAndView
7、处理器界面卡向前端控制器返回ModelAndView (ModelAndView 是SpringMvc的底层物件 包括model和view)
8、前端控制器请求检视解析器去解析检视
根据逻辑检视名解析成真正的检视(jsp)
9、检视解析器向前端控制器返回view
10、前端控制器进行检视渲染
检视渲染将模型资料(模型资料在ModelAndView物件中)填充到request域
11、前端控制器向用户响应结果
4、常用操作
转发和重定向预设属于转发:forwoard
重定向:return "redirect:test2";
如何处理中文乱码
在web.xml中配置编码过滤器
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
在controller中如何接受引数
1、单独接受多个引数:
表单:
名字:
年龄:
性别:男女
控制器:
@RequestMapping(value = "/reg1", method = RequestMethod.POST)
public String reg1(String name,Integer age,String sex){
System.out.println("name:"+name+"--age:"+age+"--sex:"+sex);
return "ok";
}
2、以实体接受
@RequestMapping(value = "/reg2", method = RequestMethod.POST)
public String reg2(User user){
System.out.println("name:"+user.getName()+"--age:"+user.getAge()+"--sex:"+user.getSex()+"--address:"+user.getAddress());
return "ok";
}
3、以@RequestParam注解接受
@RequestMapping(value = "/reg3", method = RequestMethod.POST)
public String reg3(@RequestParam(value = "name", required = true, defaultValue = "hello")String str){
System.out.println("接受的引数:"+str);
return "ok";
}
4、使用request获取(不推荐)
@RequestMapping(value = "/reg4", method = RequestMethod.POST)
public String reg4(HttpServletRequest request){
String name=request.getParameter("name");
String sex=request.getParameter("sex");
System.out.println(name+":"+sex);
return "ok";
}
如何将controller中的资料返回(回传资料)
1、返回ModelAndView
@RequestMapping("/test2")
public ModelAndView test2(){
//预设采用的服务器转发:forward;
ModelAndView modelAndView= new ModelAndView();
//系结资料 :request.setAttribute()
modelAndView.addObject("key", "value");
//检视的名字 :jsp页面的名称
modelAndView.setViewName("test2");
return modelAndView;
}
2、注入Map
@RequestMapping(value = "/reg2", method = RequestMethod.POST)
public String reg2(User user, Map map){
System.out.println("name:"+user.getName()+"--age:"+user.getAge()+"--sex:"+user.getSex()+"--address:"+user.getAddress());
map.put("user", user);
return "ok";
}
页面上取资料:
${user.name}---${user.age}---${user.sex}
常用注解
@Controller:标注是一个控制器的bean
@RequestMapping("/地址"):将请求的地址和控制器中的类或者方法进行对映
@ReuestParam():获取指定名称的引数的值,required:是否必须传递;defaultValue:预设值
(未完...)
总结
1、搭建第一个springmvc专案2、工作流程分析





























