1.第一个SpringMVC项目
1.需求
用户在页面发起请求,请求交给spring mvc控制器对象,并显示请求的处理结果(在页面显示欢迎语句)
2.实现步骤
-
新建web maven工程
-
加入依赖
-
spring-webmvc依赖,间接把spring的依赖都加入到项目
-
jsp,servlet依赖
-
-
重点:在web.xml张注册springmvc框架的核心对象DispatcherServlet
- DispatcherServlet叫做中央调度器,是一个servlet,他的父类是继承HttpServlet
- DispatcherServlet页叫做前端页面控制器(front controller)
- DispatcherServlet负责接收用户提交的请求,调用其他的控制器对象,并把请求处理结果显示给用户
-
创建一个发起请求的页面 index.jsp
-
创建控制器类
- 在类的上面加入@Controller注解,创建对象,并放到springmvc容器中
- 在类的导航面要加入RequestMapping注解
-
创建一个作为结果的jsp,显示请求结果
-
创建springmvc配置文件(spring的配置文件一样)
- 声明组件扫描器,指定@Controller注解所在的包名
- 声明视图解析器,帮助处理试图的
2.SpringMVC请求处理流程
- 发起some请求
- tomcat(web.xml --url --pattern 知道 / 的请求发送给 DispatcherServlet
- DispatcherServlet(根据springmvc-servlet.xml配置知道 some 对应 MyController里的方法
- DispatcherServlet 把请求进行转发给MyController里的方法
- 框架执行 该方法后,把得到的ModelAndView 进行处理,转发到show.jsp
some请求—》DispatcherServlet --》MyController–》执行方法 --》返回ModelAndView
3.SpringMVC执行过程源代码分析
-
tomcat启动创建容器的过程
通过load - on -start标签指定的1,创建DispatcherServlet对象
DispatcherServlet 他的父类是继承 HttpServlet 的,他是一个Servlet,在被创建时,会执行 init()方法
在init()方法中会执行 getServletContext().setAttribute(ket,ctx)
上面创建容器的作用:创建@controller注解所在对象,创建MyController对象,这个对象放到springmvc容器中,容器是map
类似于 map.put(“myController”,myController对象);
-
执行servlet的service()
-
protected void service(HttpServletRequest request,HttpServletResponse response)
-
protected void doservice(HttpServletRequest request,HttpServletResponse response)
-
doDispatch(request,response){
调用MyController 的 .dosome()方法
}
-
4.配置视图解析器
/WEB-INF/下是受保护的
<!--帮助开发人员设置属兔文件路径配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀:视图文件的路径-->
<property name="prefix" value="/WEB-INF/view/"/>
<!--后缀:视图文件的拓展名-->
<property name="suffix" value=".jsp"/>
</bean>
5.RequestMapping详解
-
可以放在方法上面
value是数组,可以有多个值
-
可以放到类上
value是所有请求地址公共部分,也叫模块名称,更快速的修改所属路径
http://localhost:8080/SpringMVC/test/some
http://localhost:8080/SpringMVC/test/other
可以将公用部分 /test/ 设置为value
-
请求映射
属性method,表示请求方式,他的值RequestMethod类枚举
get方式:RequestMethod.GET
post方式:RequestMethod.POST
-
接收参数
-
HttpServletRequest
-
HttpServletResponse
-
HttpSession
request.getParameter(“key”);
-
请求中所带的参数
-
逐个接收
方法参数名与表单的name保持一致即接收
-
使用框架进行接收
- String name = request.getParameter(“name”);
- springmvc框架通过 DispatcherServlet 调用 MyController的方法
- 调用方法时,按名称对应,把接收的参数赋值给形参
5.post请求中文乱码问题,get无乱码
需要使用过滤器处理
过滤器可以自定义,也可以使用框架提供的CharacterEncodingFilter
在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> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/* </url-pattern> </filter-mapping>
-
-