1. 配置
web.xml配置Sample
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <context-param> <param-name>ContextConfigLocation</param-name> <param-value>/WEB-INF/app-context.xml</param-value> </context-param>
<servlet> <servlet-name>app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping> </web-app>
|
Spring MVC配置步骤
1. 新建一个Module,添加Web支持
2. 确定导入了SpringMVC的依赖
3. 配置web.xml, 注册DispatcherServlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
|
4. 编写SpringMVC的配置文件!名称:springmvc-servlet.xml,这里的名称要求是按照官方来的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
<bean id="/hello" class="cn.geekhall.controller.HelloController"/>
</beans>
|
5. SpringMVC配置文件中添加处理器映射器
1
| <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
|
6. SpringMVC配置文件中添加处理器适配器
1
| <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
|
7. SpringMVC配置文件中添加视图解析器
1 2 3 4 5 6 7
| <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
|
8. 编写我们要去操作业务的Controller,要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package cn.geekhall.controller;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mv = new ModelAndView();
mv.addObject("msg", "HelloSpringMVC!");
mv.setViewName("hello"); return mv; } }
|
9. 将自己的类交给SpringIOC容器,注册bean
1 2
| <bean id="/hello" class="cn.geekhall.controller.HelloController"/>
|
10. 编写要跳转的jsp页面,显示ModelandView存放的数据,以及我们的正常页面
hello.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13
| <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body>
${msg}
</body> </html>
|
11. 配置Tomcat启动测试
SpringMVC的执行流程
- 解析URL
- HandleMapping为处理器映射器,DispatcherServlet调用HandlerMapping,HandlerMapping根据请求URL查找Handler。
- HandlerExecution表示具体的Handler,其主要作用是根据URL查找控制器,如上URL被查找控制器为:hello。
- HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
- Handler让具体的Controller执行。
- Controller将具体的执行信息封装在ModelAndView中返回给HandlerAdapter。
- HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
- DispatcherServlet调用视图解析起(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。
注解方式
1 2 3 4
| @Component 组件 @Service service @Controller controller @Repository dao
|
改了Java代码 => 重新发布
改了配置文件 => 需要Reload
改了前端页面 => 刷新浏览器即可
方法级别的注解变体有如下几个:组合注解
1 2 3 4 5 6 7
| @GetMapping 等价于@RequestMapping(method=RequestMethod.GET) @PostMapping 等价于@RequestMapping(method=RequestMethod.POST),下同 @PutMapping @DeleteMapping @PatchMapping
|
json
1 2
| var obj = JSON.parse('{"a": "Hello", "b": "Json"}');
|
1
| var json = JSON.stringify({a: 'Hello', b:'Json'});
|
SpringMVC 处理拦截器
SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理,开发者可以自己定义一些拦截器来实现特定的功能。
- 过滤器
- servlet规范中的一部分,任何java web工程都可以使用。
- 在url-pattern中配置了/* 之后,可以对所有要访问的资源进行拦截。
- 拦截器
- 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用。
- 拦截器只会拦截访问的控制器方法,如果访问的是jsp/html/css/image/js是不会进行拦截的。
拦截器是AOP思想的具体实现。
如何实现拦截器
想要自定义拦截器,必须实现HandlerInterceptor接口。