javaEE springMVC②

spring MVC的核心类和注解

1.@DispatcherServlet注解

作用:

是Spring MVC的核心类、流程控制中心,又称为Spring MVC的前端控制器 可以拦截客户端的请求,之后根据具体规则将请求转发给其他组件处理 所有请求都要经过DispatcherServlet进行转发处理,以降低了Spring MVC组件之间的耦合性

总结:是一个前端控制器,浏览器发送的请求先经过DispatcherServlet后分发到controler中方法去执行的。

配置Spring MVC的前端控制器

<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<!-- 配置初始化参数,用于读取Spring MVC的配置文件 -->

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-mvc.xml</param-value>

</init-param>

<!-- 应用加载时创建--> <load-on-startup>1</load-on-startup>

</servlet>

 

<load-on-startup>元素取值分为三种情况:

(1)如果<load-on-startup>元素的值为正整数或者0,表示在项目启动时就加载并初始化这个Servlet,值越小,Servlet的优先级越高,就越先被加载;

(2)如果<load-on-startup>元素的值为负数或者没有设置,则Servlet会在被请求时加载和初始化;

(3)如果<load-on-startup>元素的值为1,表明DispatcherServlet会在项目启动时加载并初始化。

@Controller注解

作用:

使用传统的处理器类需要在Spring MVC配置文件中定义请求和Controller 的映射关系,比较繁琐,灵活性低 Spring MVC框架提供了@Controller注解。只需要将@Controller注解标注在普通Java类上,通过Spring的扫描机制找到标注了该注解的Java类,该Java类就会成为了Spring MVC的处理器类。

基于@Controller注解的处理器类示例代码

(1)创建处理器类PageController(放com.annotation.controller包)

package com.annotation.controller;

import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;

@Controller public class PageController { @RequestMapping("/user/page01") public String toPage01(){ return "jsp/page01"; } }

(2)创建视图页面page01.jsp(放web/WEB-INF/jsp文件夹)

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html>

<head> <title>Title</title> </head>

<body> 这是page01... </body> </html> (3)修改配置文件spring-mvc.xml,注册处理器bean。此做作法:开启对com.annotation包内组件扫描

<!-- 开启com.annotation包内组件扫描 --> <context:component-scan base-package="com.annotation"/>

<!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean>

@RequestMapping注解

作用:

@RequestMapping注解用于建立请求URL和Handler(处理器)之间的映射关系,该注解可以标注在方法上和类上。

方式一—标注在方法上

当@RequestMapping注解标注在方法上时,该方法就成了一个可以处理客户端请求的Handler(处理器),它会在Spring MVC接收到对应的URL请求时被执行。Handler在浏览器中对应的访问地址,由项目访问路径+处理方法的映射路径共同组成。

方式二—标注在类上

当@RequestMapping注解标注在类上时,@RequestMapping的value属性值相当于本处理器类的命名空间,即访问该处理器类下的任意处理器都需要带上这个命名空间。@RequestMapping标注在类上时,其value属性值作为请求URL的第一级访问目录。当处理器类和处理器都使用@RequestMapping注解指定了对应的映射路径,处理器在浏览器中的访问地址,由项目访问路径+处理器类的映射路径+处理器的映射路径共同组成。

@RequestMapping注解标注在方法上

  • 该方法就是可以处理客户端请求的Handler(处理器),在Spring MVC接收到对应的URL请求时被执行

  • Handler在浏览器中对应访问地址:项目访问路径+处理器的映射路径

  • package com.annotation.controller;

    import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;

    @Controller public class PageController { @RequestMapping("/say") public void sayHello(){ System.out.println("say hello..."); } @RequestMapping("/user/login") public String toUser(){ System.out.println("显示用户登录界面..."); return "jsp/user/login"; } }

    @RequestMapping注解标注在类上

    value属性值相当于本处理器类的命名空间,即:访问该处理器类下任意处理器都需要带上这个命名空间

    value属性值作为请求URL的第一级访问目录

    • @RequestMapping注解同时标注在类和类中的方法上时,处理器在浏览器中的访问地址:项目访问路径+处理器类的映射路径+处理器的映射路径

       

    package com.annotation.controller;

    import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;

    @Controller @RequestMapping("/cookie") public class PageController { @RequestMapping("/say") public void sayHello(){ System.out.println("say hello..."); } @RequestMapping("/user/login") public String toUser(){ System.out.println("显示用户登录界面..."); return "chap11annotation/login"; } }

    @RequestMapping注解的属性

    valueString[]可选属性,也是默认属性,用于指定请求的URL。
    methodRequestMethod[]可选属性,用于指定该方法可以处理哪种类型的请求方式。
    paramsString[]可选属性,用于指定客户端请求中参数的值,必须包含哪些参数的值,才可以通过其标注的方法处理。

value属性的两种映射路径标注

value属性是@RequestMapping注解的默认属性。当value属性是@RequestMapping注解显式使用的唯一属性时,可以省略value的属性名。例如,下面两种映射路径标注的含义相同。

@RequestMapping(value="/firstController")

@RequestMapping("/firstController")

使用value属性时,可以指定映射单个的请求URL,也可以将多个请求映射到一个方法上。在value属性中添加一个带有请求路径的列表,就可以将这个请求列表中的路径都映射到对应的方法上。

@Controller

public class AuthController {

//设定当前方法的访问映射地址列表

@RequestMapping(value = {"/addUser","/deleteUser"})

public void checkAuth(){

System.out.println("增删操作校验");

}

}

启动项目,在浏览器中访问地址http://localhost:8080/chapter11/addUser,控制台打印输出信息。

568027a7e0a246a7ae302c653e86a91a.png

在浏览器中访问地址http://localhost:8080/chapter11/deleteUser,控制台打印输出信息。

128bd818caa34e3aad5511df93c0730c.png

method属性限定处理器映射

method属性可以对处理器映射的URL请求方式进行限定。当请求的URL和处理器映射成功,但请求方式和method属性指定的属性值不匹配,处理器也不能正常处理请求。

@Controller

@RequestMapping("/method")

public class MethodController {

//只展示了 处理请求方式为GET的请求,get()方法

@RequestMapping(method = RequestMethod.GET)

public void get() {

System.out.println("RequestMethod.GET"); }

//处理请求方式为DELETE的请求,delete()方法

//处理请求方式为POST的请求,post()方法

//处理请求方式为PUT的请求,put()方法

...

}

最后会发现请求的地址一样 但是因为请求的方式不一样 最终访问了不同的方式 这就是method属性的作用

method也是个数组可以限制多个路径

method{RequestMethod.GET,RequestMethod.POST}

params属性值的定义方式

params属性中定义的值可以将请求映射的定位范围缩小。当客户端进行请求时,如果请求参数的值等于params属性定义的值,可以正常执行所映射到的方法,否则映射到的方法不执行。

@Controller

public class ParamsController {

@RequestMapping(value = "/params",params = "id=1")

public void findById(String id) {

System.out.println("id="+id); }}

这就表示我们在请求中必须写在id=1这个参数

string id 表示我们可以接收到请求当中的参数

当在浏览器中加入后缀?id=1 才可以访问到页面

总结:

value限定请求的地址的(可以是数组)

params限定请求当中的参数的

method限定请求当中的方式的

 

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皎月当空照我素心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值