SpringMVC
1、前言-关于SpringMVC
MVC是一种软件设计的架构,将软件分为三层
M(Model):模型层,用于封装数据
V(View):视图层(表现层),是一般的HTML或jsp页面
C(Controller):控制层,用作处理数据,返回结果.相当于servlet
SpringMVC是基于Spring框架实现了web mvc设计模式的轻量级web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。
2、SpringMVC的核心组件
1、DispatcherServlet
前端控制器,核心,用作连接其他的组件,完成任务的分发与分配。
2、HandlerMapping
url处理映射,接收url ,根据不同的配置方式交给不同的Controller来处理。它有三种配置:
1 BeanNameUrlHandlerMapping
功能:寻找Controller
根据url请求去匹配bean的name属性,从而获取Controller
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/user.do" class="com.ldy.backOffice.web.controller.UserController"/>
2 SimpleUrlHandlerMapping
功能:寻找Controller
根据浏览器url匹配简单url的key,key就是Controller的id找到Controller
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/user1.do">userC</prop>
</props>
</property>
</bean>
<bean id="userC" class="com.ldy.backOffice.web.controller.UserController"/>
3 ControllerClassNameHandlerMapping
功能:寻找Controller
根据类名(MyController)类名.do来访问,类名首字母小写
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean class="com.ldy.backOffice.web.controller.UserController"/>
3、HandlerAdapter
控制器处理适配器,配置Controller的执行方式,它有两种配置:
1 SimpleControllerHandlerAdapter
功能:执行controller(控制器)
调用实现controller接口的控制器中的public ModelAndView handleRequest(...)方法,返回modelAndView
2 HttpRequestHandlerAdapter
功能: 执行controller
调用实现HttpRequestHandler接口的控制器中的public void handleRequest(...)方法,无返回值.
注意: 该两种配置可以共存
4、Controller
控制器 相当于配置了Controller的访问路径,有三个属性
id :配合SimpleUrlHandlerMapping url处理映射来找到真正的Controller类
name :配合BeanNameUrlHandlerMapping url处理映射来找到真正的Controller类
class :引用Controller全类名
5、InternalResourceViewResolver
前端资源视图解析器
进行视图解析,根据逻辑视图名解析成真正的视图View
ViewResolver会根据配置将处理结果生成View视图(HTML,jsp页面等),展示给用户。其中ViewResover有几个属性
prefix:前缀
suffix:后缀
SpringMVC的执行流程大致如下:
3、HelloSpringMVC-入门案例
XML配置
1、创建项目,导入jar包
如下的jar包有些可以不需要,可以根据项目酌情导入
2、在web.xml配置DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>spring_mvc_annotation</display-name>
<servlet>
<servlet-name>spring_mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring_mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>\此处注意\/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>EncodingFilter</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>
</filter>
</web-app>
3、在WEB-INF目录下创建xxx-servlet.xml
根据web.xml配置的名称来创建xxx.servlet.xml文件
引入头文件
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
</beans>
4、配置xxx-servlet.xml
<?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-3.0.xsd">
<!--1 配置url处理映射-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--2 配置控制器处理适配器-->
<bean class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter"/>
<!--3 配置控制器 相当于配置了访问路径-->
<bean name="/user.do" class="com.ldy.backOffice.web.controller.UserController"/>
<!--4 配置资源视图的解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/view/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
5、创建Controller控制器
package com.ldy.backOffice.web.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 UserAddController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView("user/useradd");
return mav;
}
}
注意导入JavaEE的包
6、创建一个hello.jsp页面
注意根据配置的文件来创建目录
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>${name}</h2>
</body>
</html>
7、运行项目,访问路径
Annotation方式
创建项目,
导入jar包,
编写web.xml文件与xml方式无异
1、配置xxx-servlet.xml
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven/>
<!-- 1.配置扫描包-->
<context:component-scan base-package="com.ldy.backOffice.web.controller"/>
<!-- 2.配置注解处理映射-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 3.配置适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</property>
</bean>
<!-- 4.配置资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
2、编写Controller
注解详解
@Controller: 相当于在spring中配置了<bean class="控制器的路径"/>
@RequestMapping: 指定请求的实际url
@Pathariable: {}里面参数注入后面参数里面
@RequestParam: 参数描述