一个SpringMVC应用
- 创建项目,引入jar包
pring核心包 |
SpringMVC包 |
日志包 |
pring-beans,spring-context,spring-core,spring- expression |
spring-web,spring-webmvc |
common-logging |
- 配置前端控制器
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
servlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc-config.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-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 mav = new ModelAndView();
mav.addObject("msg", "这是我的第一个Spring MVC程序");
mav.setViewName("/WEB-INF/jsp/first.jsp");
return mav;
}
}
- 创建SpringMVC配置文件,配置控制器映射信息
<bean name="/firstController"
class="com.itheima.controller.FirstController" />
bean>
- 创建视图first.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<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属性 |
描述 |
|
为1时,应用程序启动时立即加载Servlet;不存在时,第一个Servlet请求时加载该Servlet |
|
它的子元素、配置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的路径,访问时自动添加前缀和后缀
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
bean>
一个基注解的SpringMVC应用
- 搭建项目,引入jar
- web.xml配置前端控制器
<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>springmvcservlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
servlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc-config.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
web-app>
- 在springmvc-config.xml添加注解配置,定义视图解析器
<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" />
<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"%>
<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