一个SpringMVC应用
- 创建项目,引入jar包
pring核心包 SpringMVC包 日志包 pring-beans,spring-context,spring-core,spring- expression spring-web,spring-webmvc common-logging - 配置前端控制器
<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-config.xml</param-value>
</init-param>
<!-- 表示容器在启动时立即加载Servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 创建Controller类响应前端请求
package com.itheima.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
/**
* 控制器类
*/
public class FirstController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) {
// 创建ModelAndView对象
ModelAndView mav = new ModelAndView();
// 向模型对象中添加数据
mav.addObject("msg", "这是我的第一个Spring MVC程序");
// 设置逻辑视图名
mav.setViewName("/WEB-INF/jsp/first.jsp");
// 返回ModelAndView对象
return mav;
}
}
- 创建SpringMVC配置文件,配置控制器映射信息
<!-- 配置处理器Handle,映射“/firstController”请求 -->
<bean name="/firstController"
class="com.itheima.controller.FirstController" />
<!-- 处理器映射器,将处理器Handle的name作为url进行查找 -->
<bean class=
"org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 处理器适配器,配置对处理器中handleRequest()方法的调用-->
<bean class=
"org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- 视图解析器 -->
<bean class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
- 创建视图first.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>入门程序</title>
</head>
<body>
${msg}
</body>
</html>
- 添加至Tomcat并访问http://localhost:8080/“项目名称”/firstController
流程
用户,DispatcherServlet(前端控制器),HandlerMapping(处理器映射器),HandlerAdapter(处理器适配器),Handler(处理器),ViewResolver(视图解析器),View(视图(如jsp)),用户
核心类和注解
DispatcherServlet属性 | 描述 |
---|---|
<load-on-startup> | 为1时,应用程序启动时立即加载Servlet;不存在时,第一个Servlet请求时加载该Servlet |
<init-param> | 它的子元素<param-name>、<param-value>配置SpringMVC配置文件的路径,应用程序启动时加载配置路径中的配置文件;无,默认到WEB-INF目录 |
servletName(servlet-mapping的子标签) | 部署在web.xml中的DispatcherServlet的名称,应用会在WEB-INF下寻找springmvc-servlet.xml |
- servlet-mapping用于映射一个Servlet的对外访问路径,称为虚拟路径。创建好的Servlet只有映射成虚拟路径,客户端才能对其进行访问。
- 如果某个某个Servlet映射路径为正斜杠,则为当前web应用的默认Servlet,处理其他Servlet都不能处理的请求。
@RequestMapping注解属性 | 描述 |
---|---|
name | 为映射地址指定别名 |
value | 映射一个请求和一种方法,默认属性为value,可以省略属性名 |
method | 请求方式,亦可以使用组合注解来省略method属性:@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,@PatchMapping |
params | 指定Request必须包含某些参数 |
headers | 指定Request必须包含某些指定的header的值 |
consumes | 指定处理请求的提交内容类型(Content-Type) |
produces | 指定返回内容类型,必须是request请求头(Accept)所包含类型 |
- 标注在方法上,该方法成为一个请求处理方法
- 标注在类上,该类上的所有方法映射为相对于类级别的请求,类中所有请求映射到value人数性质所指定的路径下。
请求处理方法 | 描述 |
---|---|
参数类型 | HttpServletRequest,HttpServletResponse,HttpSession,Model, WebRequest,NativeWebRequest… |
返回类型 | ModelAndView(可以添加Model数据并指定视图),Model, Map, View, String(可以跳转视图,不能携带数据), void(只返回数据), HttpEntity<?>,ResponseEntity<?>, Callable<?>,DeferredResult<?> |
ModelAndView未能实现数据和视图的解耦,开发常使用String,通过Model参数将数据带入视图页面。
@Controller
@RequestMapping(value="/hello")
public class FirstController{
@RequestMapping(value="/firstController")
public String handleRequest(HttpServletRequest request,
HttpServletResponse response, Model model) throws Exception {
// 向模型对象中添加数据
model.addAttribute("msg", "这是我的第一个Spring MVC程序");
// 返回视图页面
return "first";
}
}
String返回类型实现重定向和请求转发:
- 重定向:return “redirect:queryUser”;
- 请求转发:return “forward:editUser”;
视图解析器
简化view的路径,访问时自动添加前缀和后缀
<!-- 定义视图解析器 -->
<bean id="viewResolver" class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 设置后缀 -->
<property name="suffix" value=".jsp" />
</bean>
一个基注解的SpringMVC应用
- 搭建项目,引入jar
- web.xml配置前端控制器
<?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" id="WebApp_ID" version="3.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-config.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>
- 在springmvc-config.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 指定需要扫描的包 -->
<context:component-scan base-package="com.itheima.controller" />
<!-- 定义视图解析器 -->
<bean id="viewResolver" class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 设置后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
- 创建控制类
package com.itheima.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 控制器类
*/
@Controller
@RequestMapping(value="/hello")
public class FirstController{
@RequestMapping(value="/firstController")
public String handleRequest(HttpServletRequest request,
HttpServletResponse response, Model model) throws Exception {
// 向模型对象中添加数据
model.addAttribute("msg", "这是我的第一个Spring MVC程序");
// 返回视图页面
return "first";
}
}
- 响应视图
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>入门程序</title>
</head>
<body>
${msg}
</body>
</html>
- 启动项目,访问http://localhost:8080/“项目名称”/hello/firstController