一、前两篇博文介绍了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, HttpServletResponse 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等属性
如图: