SpringMVC 核心类 与 注解

Maven依赖

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.9.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>5.2.4.RELEASE</version>
		</dependency>

Spring MVC核心类 DispatcherServlet 的作用

  • DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充当着前端控制器的角色。在使用时,只需将其配置在项目的web.xml文件中

配置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>

注意

  • 如果没有通过元素配置,则应用程序会默认去WEB-INF目录下寻找以servletName-servlet.xml方式命名的配置文件,这里的servletName指下面的springmvc
  • 如果<init-param>元素存在并且通过其子元素配置了Spring MVC配置文件的路径,则应用程序在启动时会加载配置路径下的配置文件
    在这里插入图片描述

@Controller注解类型

  • org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器,其注解形式为@Controller
  • 注解在使用时不需要再实现Controller接口,只需要将@Controller注解加入到控制器类上,然后通过Spring的扫描机制找到标注了该注解的控制器即可
  • 例子如下
import org.springframework.stereotype.Controller;
...
@Controller
public class FirstController{
     ...
}

Spring的配置文件

<?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.xsd
	http://www.springframework.org/schema/context 
  	http://www.springframework.org/schema/context/spring-context.xsd">
	<!-- 配置处理器Handle,映射“/firstController”请求 -->
	
	
	<context:component-scan
		base-package="com.hlq" />

	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 设置前缀 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<!-- 设置后缀 -->
		<property name="suffix" value=".jsp" />
	</bean>
	
</beans>

注意

  • 使用注解方式时,程序的运行需要依赖Spring的AOP包,因此需要向lib目录中添加spring-aop-..*.RELEASE.jar,否则程序运行时会报错

@RequestMapping注解的使用

  • Spring通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的
  • 使用@RequestMapping注解类型,它用于映射一个请求或一个方法。使用时,可以标注在一个方法或一个类上
  1. 标注在方法上:作为请求处理方法在程序接收到对应的URL请求时被调用
@Controller
public class FirstController{
	
@RequestMapping(value="/firstController")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
                           ...
	return mav;
	}
}

可以通过地址:http://localhost:8080/chapter12/firstController访问该方法

  1. 标注在类上:该类中的所有方法都将映射为相对于类级别的请求,表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下
@Controller
@RequestMapping(value="/hello")
public class FirstController{
	@RequestMapping(value="/firstController")
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) {
                           ...
		return mav;
	}
}

请求路径将变为:http://localhost:8080/chapter12/hello/firstController

@RequestMapping的属性

  • @RequestMapping注解除了可以指定value属性外,还可以指定其他一些属性,如下表所示
    在这里插入图片描述
  • 表中所有属性都是可选的,但其默认属性是value。当value是其唯一属性时,可以省略属性名
    • @RequestMapping(value="/firstController")
    • @RequestMapping("/firstController")

组合注解

  • Spring框架的4.3版本中,引入了新的组合注解,来帮助简化常用的HTTP方法的映射,并更好的表达被注解方法的语义
  • @GetMapping:匹配GET方式的请求
  • @PostMapping:匹配POST方式的请求
  • @PutMapping:匹配PUT方式的请求
  • @DeleteMapping:匹配DELETE方式的请求
  • @PatchMapping:匹配PATCH方式的请求

以@GetMapping为例

该组合注解是@RequestMapping(method=RequestMethod.GET)的缩写,它会将HTTP GET请求映射到特定的处理方法

@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public String selectUserById(String id){
    ...
}

使用@GetMapping注解后的简化代码

@GetMapping(value="/user/{id}")
public String selectUserById(String id){
    ...
}

请求处理方法的参数和返回类型

Spring MVC所支持的常见方法返回类型

  • ModelAndView 可以添加Model数据,并指定视图
  • String 可以跳转视图,但不能携带数据
  • void 在异步请求时使用,它只返回数据,而不会跳转视图
  1. 返回字符串,为视图

@RequestMapping(value="/firstController")
public String handleRequest(HttpServletRequest request,
                                               HttpServletResponse response, Model model) {
        model.addAttribute("msg", "这是我的第一个Spring MVC程序"); //通过Model参数类型,即可添加需要在视图中显示的属性
        return "/WEB-INF/jsp/first.jsp";
}

2.redirect 重定向。例如,在修改用户信息操作后,将请求重定向到用户查询方法

@RequestMapping(value="/update")
public String update(HttpServletRequest request,HttpServletResponse response, Model model){
       ... 
       return "redirect:queryUser";
}
  1. forward 请求转发。例如,用户执行修改操作时,转发到用户修改页面
@RequestMapping(value="/toEdit")
public String update(HttpServletRequest request,HttpServletResponse response, Model model){
       ... 
       return "forward:editUser";
}

ViewResolver(视图解析器)

  • Spring MVC中的视图解析器负责解析视图。可以通过在配置文件中定义一个ViewResolver来配置视图解析器
<bean id="viewResolver"    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
</bean>

  • 逻辑视图名只需设置为“first”,而不再需要设置为“/WEB-INF/jsp/first.jsp”,在访问时视图解析器会自动的增加前缀和后缀

表单提交的例子

  1. 访问页面输入表单的信息
  2. 使用 Controller层 进行转发

在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<!-- 需要是  整个项目的路径  -->
	<form action="/CH12-SpringMVCAnnotation/hello/login" method="post">
		用户名:<input type="text" name="userName"/> <br/>
		密码:<input type="password" name="password"/> <br/>
		<input type="submit" value="SUBMIT"/>
	</form>
</body>
</html>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值