springmvc
目录
2.开发处理具体业务逻辑的Handler(@Controller @RequestMapping)
3.xml配置文件配置controller扫描,配置springMVC三大组件
4.将xml文件路径告诉springMVC(DispatcherServlet)
1、SpringMVC工作流程
需求:前端浏览器请求url:http://localhost:8080/demo/handle01,前段页面显示后台服务器的时间。
开发过程:
1.配置DispatcherServlet前端控制器
a.New Module-Maven-Create from archetype-maven-archetype-webapp
b.pom.xml中修改jdk的版本,改为1.8;
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
c.pom.xml中引入springMVC依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.12.RELEASE</version> </dependency>
d.pom.xml中引入tomcat插件
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build>
e.在src/main下新建Directory java并且Mark Directory as Sources Root,新建Directory resources并且Mark Directory as Resources Root
2.开发处理具体业务逻辑的Handler(@Controller @RequestMapping)
a.在java下新建xxx.controller.DemoController.java
@Controller @RequestMapping("/demo") public class DemoController { /** * url:http://localhost:8080/demo/handle01 */ @RequestMapping("/handle01") public ModelAndView handle01() { Date date = new Date();// 服务器时间 // 返回服务器时间到前端页面 // 封装了数据和页面信息的 ModelAndView ModelAndView modelAndView = new ModelAndView(); // addObject 其实是向请求域中request.setAttribute("date",date); modelAndView.addObject("date",date); // 视图信息(封装跳转的页面信息) modelAndView.setViewName("success"); return modelAndView; } }
b.在WEB-INF下新建jsp/success.jsp,处理界面显示
<%@ page language="java" isELIgnored="false" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Insert title here</title> </head> <body> 跳转成功!服务器时间:${date} </body> </html>
3.xml配置文件配置controller扫描,配置springMVC三大组件
在resources下新建springmvc.xml,开启controller扫描,配置视图解析器,自动注册处理器映射器、处理器适配器,配置静态资源
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:content="http://www.springframework.org/schema/context" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!--开启controller扫描--> <context:component-scan base-package="xxx/controller"/> <!--配置springmvc的视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 自动注册最合适的处理器映射器,处理器适配器 --> <mvc:annotation-driven/> <!--静态资源配置,方案一--> <!-- 原理:添加该标签配置后,会在springmvc上下文定义一个DefalutServletHttpRequestHandler对象, 这个对象如同一个检查人员,对进入DispatcherServlet的url请求进行过滤筛查,如果发现是一个静态资源请求, 那么会把该请求转由应用服务器tomcat默认的DefaultServlet来处理,如果不是静态资源请求,那么继续由SpringMVC框架来处理。 --> <!--<mvc:default-servlet-handler/>--> <!--静态资源配置,方案二 SpringMVC框架自己处理静态资源--> <!-- mapping:约定的静态资源的url规则 location:指定的静态资源的存放位置 --> <mvc:resources mapping="/resources/**" location="classpath:/"/> <mvc:resources mapping="/js/**" location="/WEB-INF/js/"/> </beans>
4.将xml文件路径告诉springMVC(DispatcherServlet)
在webapps/WEB-INF/web.xml中配置DispatcherServlet以及静态资源的拦截
<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.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 方式1:带后缀,比如*.cation *.do *.aaa 这个方式比较精确,方便,在以前和现在的企业中都有很大的使用比例 方式2:/ 不会拦截 .jsp,但是会拦截.html等静态资源(静态资源:除servlet和jsp之外的js、css、png等) 为什么配置为/ 会拦截静态资源??? 因为tomcat容器中有一个web.xml(父),你的项目中也有一个web.xml(子),是一个继承关系 父web.xml中有一个DefaultServlet, url-pattern 是一个 / 此时我们自己的web.xml中也配置了一个 / ,覆写了父web.xml的配置 为什么不拦截.jsp呢? 因为父web.xml中有一个JspServlet,这个servlet拦截.jsp文件,而我们并没有覆写这个配置, 所以springmvc此时不拦截jsp,jsp的处理交给了tomcat 如何解决/拦截静态资源这件事? springmvc.xml静态资源配置两个方案。 方式3:/* 拦截所有,包括.jsp --> <!--拦截匹配规则的url请求,进入springmvc框架处理--> <url-pattern>/</url-pattern> </servlet-mapping>
配置完毕,启动Tomcat,访问http://localhost:8080/demo/handle01,成功。