您的位置:首页 > 编程语言 > Java开发

SpringMVC入门及系列教程(三)-请求的映射(详细)

2017-10-18 16:22 691 查看
一、前两篇博文介绍了SpringMVC的环境搭建、一个基本B/S请求处理过程及响应过程的处理、也介绍了在B/S结果中一个请求周期概念,也强调了请求周期的重要性,下面我们利用如下图片再次回顾一下请求周期



所以一个请求周期中,首先需要客户端浏览器单击连接发送一个请求,然后在服务器端接收当前请求以及处理当前请求,然后响应给客户端一个结果的过程。

二、本片博文将详细介绍在SpringMVC中怎样接收请求以及接收请求中的参数

1、关于请求的映射,请求的映射是一个请求周期中最为重要的一个步骤,我们可以思考下如下场景,在客户端浏览器中有很多个连接请求,当请求者点击不同请求时,服务器端应该提供对应的控制器(JavaEE中的Servlet的功能),我们可以狭义的理解为一个请求对应一个控制器,比如我们平常上网时浏览新闻时,页面上会有体育新闻、娱乐新闻、军事新闻等连接

当单击体育新闻(a连接 <a href=”?”>体育新闻</a> )时将请求提交给A控制器;

当单击娱乐新闻(b连接 <a href=”?”>娱乐新闻</a> )时将请求提交给B控制器;

当单击军事新闻(c连接 <a href=”?”>军事新闻</a> )时将请求提交给C控制器。

那么请求的映射即为在当单击体育新闻时怎样将请求提交给A控制而不是提交给B控制器呢?这个控制过程既需要使用请求映射的知识。在JavaEE中的源码案例

页面链接代码:
<a href="newsSports">体育新闻</a>

Servlet代码:
@WebServlet("/newsSports")
public class NewsSports extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServlet
d5ff
Response response) throws ServletException, IOException {
}

}


2、SpringMVC中的请求映射也通过相关注解(Annotation)完成:

2.1、首先看下控制器注解,在SpringMVC中所有的控制器都必须使用@Controller注解,即在控制器类的上面添加这个注解即可标准本类是控制器组件,在SpringMVC语法中要求可以接收客户端请求的类必须是控制器类才有这样的功能,所以我们需要先了解控制器注解

比如,如下UserAction的类即为一个控制器组件,因为其上有@Controller注解

@Controller
public class UserAction {}


2.2、SpringMVC中最关键一个注解@RequestMapping ,用于注解映射请求的URL。@RequestMapping可以写在

方法前也可以写在类前,我们先来理解写在方法上,这个方法的功能有点类似javaEE中的doGet方法或者doPost方法,只不过在SpringMVC中这个方法的定义更为灵活,现阶段对只要这个方法的返回值是一个String类型即可,方面名称不限,至于String类型的返回值的意义,和请求的映射没有关系,所以在后续博文中详细介绍。比如当单击体育新闻链接时期望将请求提交给如下处理方法接收

public String showNews(){
return "success";
}


好的,下面我们来编写映射的URL,比较简单只需要在本方法上面加上@RequestMapping注解即可

@RequestMapping("/newsSports")
public String showNews(){
System.out.println("UserAction.showNews() is running......");
return "success";
}


这样一来,当单击<a href=”showSports”>体育新闻</a> 连接时,showNews方法就开始运行了。请自己在页面上加入连接代码测试

客户端页面的运行效果



单击体育新闻后的页面效果



以及控制器源码



3、通过以上案例大家对注解@RequestMapping有了初步理解,下面将详细接收注解的使用,@RequestMapping注解中有多个属性:value、method、params、headers等属性

如图:



①、value属性:在@RequestMapping没有定义任何属性名时,例如上面案例中的@RequestMapping(“/newsSports”),默认即为value属性的值,即@RequestMapping(“/newsSports”)和@RequestMapping(value=”/newsSports”)的写法相同功能的。同时我们可以看到value属性的是String类型的一维数组,也就是value属性的值可以有多个。线面看案例:

页面效果



根页面请求对应的控制器代码



value属性总结:

1)、@RequestMapping只有一个value属性,并且value属性值只有一个的话,可以省略value属性名,直接写value属性值即可。

2)、如果value属性值有多个的话,需要使用{}扩起来,这里大家要注意,注解中的数组不能想CoreJava中的使用方式使用[]阔值,而是通过{}扩起来的,刚刚接触的话可能会有点陌生,写的代码多了就会熟悉了的

②、method属性:method属性可以可以指定请求的方法,比如可以在method属性中约定请求类型是get请求|post请求。

页面效果:



服务器端控制器代码如下:



③、params属性:params属性可以更加精准映射当前请求,因为params属性可以约定请求的URL中的参数都可以包括哪些,甚至可以约定参数的值,注意params属性的值也是String类型的一维数组

页面运行效果:



单击没有参数的请求出现404错误



单击其他两个连接,请求正常运行



下面看控制器源代码:



④、headers属性:在SpringMVC的@RequestMapping注解中还可以通过headers属性限定当前请求的请求头中包含有哪些属性和值

页面效果图,在Chrome浏览器中查看请求头部分Accept-Language:zh-CN,zh;q=0.8属性



当单击连接请求时,页面可以正常运行



下面看控制器源代码



至此,在SpringMVC中关于请求URL的映射部分说完毕了,如下代码是整体代码请参阅。

客户端源码:



控制器源码:



备注:

1、各位朋友如果你觉得本篇博文对你有帮助,请您转发或者关注或者请给出您中肯的评论,如果有问题请及时与我联系!欢迎大家一起讨论一起成长!

2、其他几篇关于SpringMVC详细博文如下

http://blog.csdn.net/dl0246/article/details/77996811 SSM框架CRUD操作&批量删除&批量追加数据(Oracle&MySQL数据库)

http://blog.csdn.net/dl0246/article/details/77966611 诸多设计模式中,最为常见的三种设计模式-单例模式,代理模式,工厂模式

http://blog.csdn.net/dl0246/article/details/78251319 SpringMVC入门及系列教程(一)-SpringMVC环境搭建及入门案例(详细)

http://blog.csdn.net/dl0246/article/details/78259612 SpringMVC入门及系列教程(二)-SpringMVC请求周期及响应处理(初级)(详细)

http://blog.csdn.net/dl0246/article/details/78274343 SpringMVC入门及系列教程(三)-请求的映射(详细)

http://blog.csdn.net/dl0246/article/details/78286685 SpringMVC入门及系列教程(四)-SpringMVC在控制器中获取请求中的参数值(详细)

http://blog.csdn.net/dl0246/article/details/78390587 SpringMVC入门及系列教程(五)-响应处理&响应参数处理&SpringMVC作用域对象&SpringMVC原生Servlet对
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐