SSM框架---SpringMVC
2021-04-03 21:36:22 26 举报
AI智能生成
请大家不要直接克隆,着手梳理一遍才会变成自己的知识
作者其他创作
大纲/内容
回顾servlet
1、创建父项目
2、导入maven依赖
3、创建子模块
4、添加框架支持
5、子模块导入maven依赖
6、web.xml配置servlet
7、编写servlet测试类
1、继承HttpServlet类
2、重写doGet和doPost方法
1、获取前端参数<br>
String method = req.getParameter("method");
2、调用业务层
3、视图转发
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
8、在web.xml中注册servlet
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> <servlet><br> <servlet-name>hello</servlet-name><br> <servlet-class>com.learning.servlet.HelloServlet</servlet-class><br> </servlet><br> <servlet-mapping><br> <servlet-name>hello</servlet-name><br> <url-pattern>/hello</url-pattern><br> </servlet-mapping><br></pre>
9、配置tomcat
配置一个SpringMVC
基础版
1、创建子模块,添加web支持
2、导入springmvc依赖
3、配置web.xml,注册DispatcherServlet<br>
4、编写springmvc-servlet.xml
1、添加 处理器映射器<br>
BeanNameUrlHandlerMapping<br>
2、添加 处理器适配器
SimpleControllerHandlerAdapter
3、添加 视图解析器
InternalResourceViewResolver
5、编写业务controller
6、把类交给SpringIOC容器,注册bean<br>
7、编写需要跳转的页面
8、如果报错404,需要建立lib目录,添加jar包<br>
9、如果报错500,去把lib中的老版本的jsp,servletjar包删除
注解版
1、创建子模块、添加web支持
2、在web.xml中注册springmvc<br>
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><servlet><br> <servlet-name>springmvc</servlet-name><br> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><br> <init-param><br> <param-name>contextConfigLocation</param-name><br> <param-value>classpath:springmvc-servlet.xml</param-value><br> </init-param><br> <load-on-startup>1</load-on-startup><br> </servlet><br> <servlet-mapping><br> <servlet-name>springmvc</servlet-name><br> <url-pattern>/</url-pattern><br> </servlet-mapping><br></pre>
3、新建springmvc-servlet.xml文件
如果文件出错,打开setting、editor、file type、text、找到不对劲的名字,删除
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><?xml version="1.0" encoding="UTF-8"?><br><beans xmlns="http://www.springframework.org/schema/beans"<br> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br> xmlns:context="http://www.springframework.org/schema/context"<br> xmlns:mvc="http://www.springframework.org/schema/mvc"<br> xsi:schemaLocation="http://www.springframework.org/schema/beans<br> http://www.springframework.org/schema/beans/spring-beans.xsd<br> http://www.springframework.org/schema/context<br> https://www.springframework.org/schema/context/spring-context.xsd<br> http://www.springframework.org/schema/mvc<br> https://www.springframework.org/schema/mvc/spring-mvc.xsd"><br><br> <!--spring自动扫描--><br> <context:component-scan base-package="com.learning.controller"/><br> <!--让springmvc不处理静态资源--><br> <mvc:default-servlet-handler/><br> <!--springmvc注解驱动<br> 实现这个后不需要再手动注册handlerMapping和handlerAdapter<br> annotation-driven会帮我们自动注入--><br> <mvc:annotation-driven/><br><br> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><br> <property name="prefix" value="/WEB-INF/jsp/"/><br> <property name="suffix" value=".jsp"/><br> </bean><br><br></beans><br></pre>
4、创建controller
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);">/**<br> * @author 22944<br> */<br>@Controller<br>@RequestMapping("/hello")<br>public class HelloAnnotationController {<br><br> @RequestMapping("/h1")<br> public String h1(Model model){<br> model.addAttribute("msg","你好啊");<br> return "hello";<br> }<br><br>}<br></pre>
一个请求的执行过程
1、前端发送请求
2、servlet通过路径映射进入springmvc<br>
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> <servlet><br> <servlet-name>springmvc</servlet-name><br> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><br> <init-param><br> <param-name>contextConfigLocation</param-name><br> <param-value>classpath:springmvc-servlet.xml</param-value><br> </init-param><br> <load-on-startup>1</load-on-startup><br> </servlet><br><br> <servlet-mapping><br> <servlet-name>springmvc</servlet-name><br> <url-pattern>/</url-pattern><br> </servlet-mapping><br></pre>
3、springmvc找到handleMapping
4、handleMapping找到对应的control返回给前端控制器,前端控制器再通过处理器适配器找到对应的controller
5、处理业务逻辑
6、返回一个ModelView给前端控制器<br>
7、前端控制器转发给视图解析器,添加前缀后缀,找到对应的jsp页面,返回给前端控制器
8、前端控制器把返回的jsp返回给用户
SpringMVC的乱码过滤器
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><filter><br> <filter-name>encoding</filter-name><br> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><br> <init-param><br> <param-name>encoding</param-name><br> <param-value>utf-8</param-value><br> </init-param><br> </filter><br> <filter-mapping><br> <filter-name>encoding</filter-name><br> <url-pattern>/*</url-pattern><br> </filter-mapping><br></pre>
json交互
1、新建子模块、添加web支持
2、maven导入jackson-databind依赖<br>
3、注册DispatcherServlet
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><servlet><br> <servlet-name>springmvc</servlet-name><br> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><br> <init-param><br> <param-name>contextConfigLocation</param-name><br> <param-value>classpath:springmvc-servlet.xml</param-value><br> </init-param><br> <load-on-startup>1</load-on-startup><br> </servlet><br> <servlet-mapping><br> <servlet-name>springmvc</servlet-name><br> <url-pattern>/</url-pattern><br> </servlet-mapping><br></pre>
4、编写springmvc-servlet
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 --><br> <context:component-scan base-package="com.learning.controller"/><br><br> <!-- 视图解析器 --><br> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"<br> id="internalResourceViewResolver"><br> <!-- 前缀 --><br> <property name="prefix" value="/WEB-INF/jsp/" /><br> <!-- 后缀 --><br> <property name="suffix" value=".jsp" /><br> </bean><br></pre>
5、注册过滤器
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> <filter><br> <filter-name>encoding</filter-name><br> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><br> <init-param><br> <param-name>encoding</param-name><br> <param-value>utf-8</param-value><br> </init-param><br> </filter><br> <filter-mapping><br> <filter-name>encoding</filter-name><br> <url-pattern>/</url-pattern><br> </filter-mapping><br></pre>
6、编写Controller
7、乱码统一解决
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"> <mvc:annotation-driven><br> <mvc:message-converters register-defaults="true"><br> <bean class="org.springframework.http.converter.StringHttpMessageConverter"><br> <constructor-arg value="UTF-8"/><br> </bean><br> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><br> <property name="objectMapper"><br> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><br> <property name="failOnEmptyBeans" value="false"/><br> </bean><br> </property><br> </bean><br> </mvc:message-converters><br> </mvc:annotation-driven><br></pre>
SpringMVC拦截器
拦截器是aop思想的体现
1、编写web.xml<br>
1、注册DispatcherServlet
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color:#808080;"><!--</span><span style="color:#808080;font-family:'宋体',monospace;">配置</span><span style="color:#808080;">DispatcherServlet--><br></span><span style="color:#e8bf6a;"><servlet><br></span><span style="color:#e8bf6a;"> <servlet-name></span>springmvc<span style="color:#e8bf6a;"></servlet-name><br></span><span style="color:#e8bf6a;"> <servlet-class></span>org.springframework.web.servlet.DispatcherServlet<span style="color:#e8bf6a;"></servlet-class><br></span><span style="color:#e8bf6a;"> <init-param><br></span><span style="color:#e8bf6a;"> <param-name></span>contextConfigLocation<span style="color:#e8bf6a;"></param-name><br></span><span style="color:#e8bf6a;"> <param-value></span>classpath:applicationContext.xml<span style="color:#e8bf6a;"></param-value><br></span><span style="color:#e8bf6a;"> </init-param><br></span><span style="color:#e8bf6a;"> <load-on-startup></span>1<span style="color:#e8bf6a;"></load-on-startup><br></span><span style="color:#e8bf6a;"></servlet><br></span><span style="color:#e8bf6a;"><servlet-mapping><br></span><span style="color:#e8bf6a;"> <servlet-name></span>springmvc<span style="color:#e8bf6a;"></servlet-name><br></span><span style="color:#e8bf6a;"> <url-pattern></span>/<span style="color:#e8bf6a;"></url-pattern><br></span><span style="color:#e8bf6a;"></servlet-mapping></span></pre></pre>
2、配置过滤器
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"> <!--配置过滤器--><br> <filter><br> <filter-name>encoding</filter-name><br> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><br> <init-param><br> <param-name>encoding</param-name><br> <param-value>utf-8</param-value><br> </init-param><br> </filter><br> <filter-mapping><br> <filter-name>encoding</filter-name><br> <url-pattern>/*</url-pattern><br> </filter-mapping><br></pre></pre>
2、编写applicationContext.xml
1、添加注解支持
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"> <!--注解驱动--><br> <mvc:annotation-driven/><br></pre></pre>
2、自动扫描controller包
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><!--配置自动扫描controller--><br><context:component-scan base-package="com.learning.controller"/><br></pre></pre>
3、配置静态资源过滤<br>
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><!--配置静态资源过滤--><br><mvc:default-servlet-handler/><br></pre></pre>
4、配置视图解析器
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"> <!--视图解析器--><br> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><br> <property name="prefix" value="/WEB-INF/jsp/"/><br> <property name="suffix" value=".jsp"/><br> </bean><br></pre></pre>
5、配置拦截器
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"> <mvc:interceptors><br> <mvc:interceptor><br> <mvc:mapping path="/**"/><br> <bean class="com.learning.config.MyInterceptor"/><br> </mvc:interceptor><br> <br> </mvc:interceptors><br></pre></pre>
3、编写controller类
1、新建config包
2、编写拦截器类
实现HandlerInterceptor接口,实现方法<br>
文件示例
<pre style="background-color: rgb(43, 43, 43); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; color: rgb(169, 183, 198);"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">package com.learning.config;<br><br>import org.springframework.web.servlet.HandlerInterceptor;<br>import org.springframework.web.servlet.ModelAndView;<br><br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br><br>/**<br> * @author 小也<br> * @create 2021/4/2 22:11<br> */<br>public class MyInterceptor implements HandlerInterceptor {<br> /**<br> * return true 放行,执行下一个拦截器<br> * return false 拦截,不执行下一个拦截器<br> */<br><br> public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {<br> System.out.println("=========方法执行前=========");<br> return false;<br> }<br><br> public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {<br> System.out.println("=========方法执行后=========");<br> }<br><br> public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {<br> System.out.println("=========清理=========");<br> }<br>}<br></pre></pre>
0 条评论
下一页