SSM框架开发web项目系列(七) SpringMVC请求接收
前言
在上篇Spring MVC入门篇中,我们初步了解了Spring MVC开发的基本搭建过程,本文将针对实际开发过程的着重点Controller部分,将常用的知识点罗列出来,并配以示例。在这之前,我们有必要回顾一下,Spring MVC在我们的WEB开发中,定位或者作用是什么?Spring MVC在项目中,主要作用是接收客户端请求、解析路径并分发请求到相应的控制器即Controller中执行相应方法,在方法中,我们常见的操作有,调用业务逻辑层(后面会介绍到)方法,访问数据库,获取数据或者更新数据,如果是获取数据一般是要返回给前端,常用方式有两种:1.传统的Jsp开发中,我们可以将数据封装到Model属性中,然后在页面中通过el表达式之类的方式得到;2.随着Ajax技术/RESTful风格的兴起,同样可以在前后端分离的情况下传递数据(RESTful基础学习阶段可以不作重点,但Ajax一定要掌握)。另外基于Spring MVC的开发模式下,参数的获取、匹配,以及页面的跳转都十分方便,下面我们就来实践操作一下。
0.页面文件路径以及页面跳转问题
如果学习阶段习惯将Jsp文件直接放在web文件根目录webapp下,建议现在开始转变,将其分类放置WEB-INF下,这样一来,我们希望访问一个页面,将不再是直接通过路径去访问,而是通过Spring MVC中的请求,匹配到相应控制器中方法内部,再跳转至相应页面。区别在于WEB-INF下文件针对服务器端,而客户端例如浏览器是无法直接访问的,这样可以减少直接访问的风险,另外即使抛开安全性隐蔽性不谈,需要填充Model传递数据的Jsp页面如果在直接访问的情况下,可能会出现各种奇奇怪怪的问题,空白、无数据、样式错乱等等。页面跳转SpringMVC默认是请求转发,本文主要针对请求部分,均作默认请求转发处理。
1.本文注解预介绍
@Controller
该注解用于Spring识别并实例化控制器bean到上下文中,即加上这个注解的类Spring才能识别知道它是要作为控制器。
@RequestMapping
该注解既可用于类上也可以用在方法上,实际开发往往两者都会用到,用于匹配url路径,接收请求,只有匹配的请求才会进入该控制器执行相关方法。
@RequestParam
在控制器方法中,用于将注入的参数与前台请求参数绑定
@PathVariable
用于绑定url路径中占位的参数
2.自动匹配客户端传来的参数
登录应该是大家再熟悉不过的web程序操作,这里以用户名、密码为例,分别对应实体类User中属性username和password,那么我们的页面表单部分如下所示:
login.jsp中
<form action="${pageContext.request.contextPath }/user/login" method="post">
用户名<input type="text" name="username" /><br/>
密码<input type="password" name="password" /><br/>
<button type="submit">登录</button>
</form>
Controller代码
package com.mmm.web; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("user")
public class DemoController { @RequestMapping(value="/toLogin")
public String toLogin() {
return "login";
} @RequestMapping(value="/login")
public String login(String username,String password) {
System.out.println("用户名---" + username);
System.out.println("密码---" + password);
return "index";
}
}
有了前面的文件路径问题,这里我们先定义一个toLogin方法用于访问登录页面login.jsp,然后在页面表单点击提交后会请求到这里的login方法,重点:form表单中输入框<input>的name属性值,对应Controller中方法的参数名,即这里login方法的两个参数名,username和password,通过这两处的值,Spring MVC即可自动匹配使我们轻松获取参数。
启动Tomcat,在地址栏输入http://localhost/spring-mvc/user/toLogin,即可访问到登录页面,如下所示
aaarticlea/png;base64,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" alt="" />
任意输入用户名和密码内容后,点击登录,即可看到eclipse控制台输出类似如下信息
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAAAyCAIAAADjm+g8AAAFH0lEQVR4Ae1dPW7bTBAVgxzFSmHkBPYJ4ioXCNzJTQC7T8p0aWwEKeImQKrAVRrbJ4i6FKmtMn+3UEYaeTgc/miW4tJc8xEfjJnZt7OzT3zZFSHul/38t5yo69fvv18/f/zy4Z2KwQQDYMDLwBMvEDgwAAYcDEBRDpIAAQNuBqAoN1UAggEHA1CUgyRAwICbASjKTRWAYMDBABTlIAkQMOBmAIpyUwUgGHAwAEU5SAIEDLgZ6ElRWZY5S/IjnQkBAwN9MvA0aLCtt/tyWfgFhiSnOPWtaxUYDDCQOgNhiqLZalUYkRi9GZf6mohOxTwywMDMoIzEXzAwTAbi7vpIM3VXmQ4SUhlMMAqWwZEji4tDKkeuk1s7XhIAWzT8PhigX8rq/65//Hn1+k35zuYIFaSbglzdkWzdl+dpgmXXZIjm3p0fcEX67+wmHy8JQF4urD4ZCF6j5N9tMuiOM66+B/02T5jwZHBazkyuP0mnyIPzu/xTuJlR7stvhXUqCUCnlCCZkwG9QJHd7RrVXEN+zxYt7lWM5V55gSjc3cvl7oB8MLbWktKLVJIAWzT8KAwEP5loFolppZJNRFxZiyRCBgcbemlwTPv2JDu6bBogCUDTBNAWiYFgRRklGNdfpZGNzqNtTqjBe6ffl6dN4+wKoIcO07N5wwhJABrqR1NMBoK/R9HNLRcVJjYZ7eok/dDF3XU2sdulbd3r9v1KToWd5HrXJwmTAEi1MHpmIHiN6ry+1lLsvBKd8PmzvY1LK1LVBjAJgJ4R7H4YCFCUrCSeyoLAnoS9Yab79Ox8fnmU1X2PSgLQG10YyDAQvOsz/bt1V/u/0tXtEFuz0dewwtNCesZX8CdJALZOE4BIDGT0xFynrjsLie7zhu0ZtXISxjSD9XDarutVF9d9YYOBgTDg3fU1yIlmYlqN65xqXa+6uDMtYGCgTwaGtevrc+YYCwzEYACKisEqco6XAShqvJ89Zh6DASgqBqvIOV4GoKjxfvaYeQwGoKgYrCLneBmAosb72WPmMRgYhaL4Ffbyq+1CaBIAqRbGkBloryj5ncSQp4fawEDPDHh/M1Gpn3Kw8vcNTljPM8dwYCAGA15F0diVatE1iXLE4FbT0bTqDLDBQOoMeHd9DaoQhQiGDLbFEMzD8XWwP53w9yUqJssOLxamliQApma4g2PAqygqnFXBf0kq4rJ42B3c/FRBV8eZett9fja1okoCoCYEc4gMBCjKlM+iYjlRk2iMYSQwaTIdH8idz+ll9/sDjdZvPM2vrvU6lQTggcjDsG4GvIoqK0RHKhcoCvLFxdx7+Sl/UqTajG1QZvnYHUBjrY6O+PSCB907fUuH8BlJJQEQ0mAMkwHvkwlZcPRaRLe/npVgOM6utjXY9NVNkez8ZIjVAOt324sjJQEolgxvcAx4FcWF18nDTEurzjRVurueBzZZvanefORY5bgIgoHOGQjY9ZGcSCp0cRH+RYaQ5up8GsEJF9dX9LWquCoVkiQBKFQMZxAMeNcoFhIJQxSly6+LM6ayi+7eu724OF4dyjd7uflaVSogCUCpagQGwIBXUS1KJZm16BWviz0wbHZz/5xiM2YSgHj8IHM3DIT+nwTqRqWFSF8EY1cM3Up2XdzAOnKLp8KaI2NXYyQB6IgMpInJgPd0sTohcbx512f68tpFkzJxuGDgETDQza4vSB5B4EdAMaYwKga8z/pGRQomCwZaMwBFtaYOHcFABQNQVAUpCIGB1gz8B8ms2h3PbiUXAAAAAElFTkSuQmCCAA==" alt="" />
并跳转至index.jsp页面,这里即成功获取到了前台传递来的参数,这种方式十分方便,但并不是唯一,所以下面分别介绍其它的方法。
***基于之前学过的Servlet系列的请求对象HttpServletRequest,它有一个getParameter(String parameterName)方法,这个parameterName即前台参数名,这里即同样对应输入框<input>的name属性值。
***应用Spring MVC的机制,通过实体类装配属性,同样可以匹配到参数,这里的用户名和密码,往往是对应实体类这里以User为例,类中有username和password这2两个字符串属性。这样一来,通过User对象我们也可以匹配到前台的这两个参数。
下面我们汇总上面的内容,修改login方法为如下所示
@RequestMapping(value="/login")
public String login(String username,String password, HttpServletRequest req,User user) {
System.out.println("直接参数名匹配获取:用户名---" + username);
System.out.println("直接参数名匹配获取:密码---" + password);
System.out.println("HttpServletRequest获取:用户名---" + req.getParameter("username"));
System.out.println("HttpServletRequest获取:密码---" + req.getParameter("password"));
System.out.println("User获取:用户名---" + user.getUsername());
System.out.println("User获取:密码---" + user.getPassword());
return "index";
}
再次访问登录页面,输入内容并点击登录后,即可看到eclipse控制台输出类似如下信息
aaarticlea/png;base64,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" alt="" />
表明以上方式均可用于获取前台传递参数值。
PS:上面第一种方式(也是常用方式中)如果前端表单中name值和我这里方法中的参数名确实不一样,有没有别的办法能解决这个问题?目前Spring MVC各方面的注解渐渐在完善,这里Spring MVC就为我们提供了这样一种注解,@RequestParam,用于指定前台参数名,即这里如果我们将上面登录页面中的密码输入框的name属性值改为pwd,如下所示
密码<input type="password" name="pwd" /><br/>
按照前面我们的参数名匹配,Controller的login方法中是password,前台是pwd,这样是匹配不上,随之也无法获取数据的。但是引入上面提到的注解,方法可以中参数可以将String password修改为:@RequestParam("pwd") String password,这样一来,即可成功获取数据了。
上面结合表单示例介绍了几种方式获取请求参数,之前学习Servlet部分,应该都熟悉doPost和doGet方法,这里的表单往往就是用的post请求方式提交。
使用post提交时,数据将以数据块的形式提交到服务器,URL地址栏中不会出现数据,所以用这种方式提交的表单数据是相对安全的。所以表单提交包含类似于密码等数据时,建议使用post方法。
使用get提交时地址栏上会在你当前项目路径后加上类似?pram1=value1¶m2=value2”的形式,将表单数据附加到URL的后面,提交到服务器处理,这种方式效率更高,所以在没有私密数据时,请求推荐这种。
除了上面提到的方式,还有一种获取路径传参的方式,这里也介绍一下,比较实用,通过@PathVariable注解,通过url路径实现动态传参并获取参数值,代码如下示例:
@RequestMapping(value="/show/{id}")
public String show(@PathVariable(value="id") String str) {
System.out.println("url获取:id参数值---" + str);
return "index";
}
然后,我们在地址栏中输入localhost/spring-mvc/user/show/abcdefg,路径末尾的abcdefg即对应上面Controller代码@RequestMapping(value="/show/{id}")中的id,我们通过{id}这个大括号加参数名的方式去动态接收它,不论你的值是多少,这里就是用id变量来对应,于是下面@PathVariable(value="id")中的id即与之相应,随后绑定到String str上,这个str即匹配该参数值,我们便可以获取到该数据了。输入地址后回车,即可看到控制台,输出如下:
aaarticlea/png;base64,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" alt="" />
3.改进登录模块
前面提到的get、post主要是讲前台请求方式,name我们后台是否可以选择接受指定方式的请求呢?当然是可以的。@RequestMapping的属性中有个method,英文是方法的意思,在这里用于指定要接收的请求方式,如下所示
aaarticlea/png;base64,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" alt="" />
为了方便,Spring MVC还为我们提供了RequestMethod枚举,如下所示
* @author Juergen Hoeller
* @since 2.5
* @see RequestMapping
* @see org.springframework.web.servlet.DispatcherServlet#setDispatchOptionsRequest
* @see org.springframework.web.servlet.DispatcherServlet#setDispatchTraceRequest
*/
public enum RequestMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE }
其中指定了各种请求方式,我们可以直接通过例如RequestMetho.GET来指定。
例如上面的登录部分,我们首先要前往登录页面,请求并没有参数传递,所以我们直接通过get方式请求,然后在登录页面中输入信息后点击登录,提交表单登录时,我们往往用post。上面我们的@RequestMapping(value="")这个value值一个是toLogin,一个是login,两个不同的值,就是为了区别这两个请求,但是其实是可以写成一样的,这里我们稍作修改为如下:
@RequestMapping(value="/login",method=RequestMethod.GET)
public String toLogin() {
return "login";
} @RequestMapping(value="/login",method=RequestMethod.POST)
public String login(String username, String password) {
System.out.println("直接参数名匹配获取:用户名---" + username);
System.out.println("直接参数名匹配获取:密码---" + password);
return "index";
}
这样我们同样可以实现前面的效果。
4.获取请求参数后我们要干嘛?
在没有应用maven时,之前经常使用下面的方式新建web项目。
aaarticlea/png;base64,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P5zV8KxMAiRAAiRAAiRAAuNF4NHHfpDt0Fyty5YY65MACZAACZAACUxcAlROE/fec+YkQAIkQAIkQALZEqByypYY65MACZAACZAACUxcAlROE/fec+YkQAIkQAIkQALZEqByypYY65MACZAACZAACUxcAmOrnHpafD5fS8/Exc2ZkwAJkAAJkAAJlDSBAu9KUNIsaDwJkAAJkAAJkECZEfj1L3diRidOnNDzWva+S/OcIJVTngDZnARIgARIgARIoEgJQDa9811Lncbt+MmP8hRPVE5OnkyTAAmQAAmQAAmUDwHDOvSUKioKEKRUgC5SAFZxTQhtkseyjv4UNVlEAiRAAiRAAiRAAgUk8LOfPnvBO989MjyMMzQy8vtX9uXvcIJ5o6ec+juW+Zq6Gtr7TL23bnf9sg27CkiEXZEACZAACZAACZBAMgLRaNTAP9GIYUQjkTDkSLKaWeWP1mpdf8eatl7R3L2jtc60p7HTEC2+pt6szGNlEiABEiABEiABEsiaANxL77xoyaE3D7755hvHjg0Gh4YClVV5RjhpI0bJ59S/bUuvaGhf2+iaauOqZtc1L0iABEiABEiABEhglAj4BLxNJ5108llnzTv1tNMLNcgoKae+3fAtLV5o+ZsKZS37IQESIAESIAESIIE0BJTD6d0Dhw9F1HHkyMCbb75ZEIcTBh6t1bo0c2IxCZAACZAACZAACYwaAUQ1IcRJd28nCjLaKPmclG279sQ9Tde/hxHiBblr7IQESIAESIAESMCbABxOF1x40eFDb0I7QT8NDh49fPhwoRxOGHKUlJOKaOrdss0lnVTwk/c0mUsCJEACJEACJEACBSOgZRP8TgXr0epotFbrGju7m7ua2upbFhqdKkwcmxTUbxENQvDhOos9/5IACZAACZAACYwCgd88/ytnr3A4wRHlzEE6Zy/UaCknIbALQbfwNTX5urStzd3GDm5LEHffeEkCJEACJEACJFBQAp6SyDMzt2FHTznBHogno9NlV0KGq5QXJEACJEACJEACJFDUBEYpzqmo50zjSIAESIAESIAESCA3AlROuXFjKxIgARIgARIggYlIgMppIt51zpkESIAESIAESCA3AlROuXFjKxIgARIgARIggYlIgMppIt51zpkESIAESIAESCA3AgV+tu7Rx36Qmx1sRQIkQAIkQAIkQALFT6CQymn5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" alt="" width="586" height="407" />
我们首先要理清的是,我们的web项目都是动态的( dynamic),这个动态最上层,是客户端的各种动态操作,深入到底层,大多会反映到数据库,那么两者有什么关联,或者是怎样关联起来的?其中上面讲到的请求参数往往就是一个中间人。以上面的登录为例,客户端通过表单提交了用户名和密码两个参数,那么我们到底是要到数据库中查询有没有账号和密码都同时匹配的用户记录,有的话代表输入正确,没有的话则代表输入信息有误。客户端得到的登录成功或者失败这种不确定的结果,基于他的输入,也基于数据库中数据,无数个类似这样的关联关系个构建起了我们的web项目业务逻辑结构。
所以后面我们就要理清什么是业务逻辑了。在登录过程中,我们验证用户名和密码是否正确,会调用到用户的持久层对象,去查询数据库用户表记录;但是同时我们需要记录登录信息,即在日志表中插入一条登录信息。但是持久层有查询用户表的方法,也有插入日志信息的方法,但是两种方法一起调用的并没有,所以这里需要我们在控制层和持久层之间添加一层业务逻辑层,整合这些持久操作,封装好业务逻辑方法供控制层调用。
当然这里举例日志可能有点不太恰当,因为基于Spring AOP,例如事务管理、日志信息记录等通用组件能很方便的实现,能让我们专注于实现项目中的业务逻辑,但是总的来说,这里可以先简单的理解为,业务逻辑Service层,作用于持久层(dao)和控制层(controller)之间,它往往用于组装比持久层更复杂的操作过程,并且也不局限于数据库操作,然后供控制层调用,控制层则是专注于接收请求,分发到相应业务逻辑方法进行处理,然后作出响应。
小结
以上讲到了Spring MVC通用请求相关的处理参数过程及方法,当然还有例如文件上传也是一种特殊的请求,并且常用到,后面会理出来。我们在实际开发中往往下功夫最多的是如何实现那些复杂的业务逻辑,相反控制层不应该作用到这些业务处理。所以下面会专门理清一下业务逻辑层的部分,通过注入前面我们学习的MyBatis封装的持久对象,然后将业务逻辑层对象注入到控制层,实现Spring MVC与MyBatis的整合。
SSM框架开发web项目系列(七) SpringMVC请求接收的更多相关文章
- SSM框架开发web项目系列(二) MyBatis真正的力量
前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
- SSM框架开发web项目系列(五) Spring集成MyBatis
前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...
- SSM框架开发web项目系列(六) SpringMVC入门
前言 我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作.WEB程序开发,渐渐会接触到JDBC.Servlet/Jsp之类的知识,期间可能 ...
- SSM框架开发web项目系列(一) 环境搭建篇
前言 开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL 主要框架:Spring + Spring MVC + Mybatis 目的:快速上手 ...
- SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL
前言 通过前面的MyBatis部分学习,已经可以使用MyBatis独立构建一个数据库程序,基本的增删查改/关联查询等等都可以实现了.简单的单表操作和关联查询在实际开的业务流程中一定会有,但是可能只会占 ...
- ssm框架下web项目,web.xml配置文件的作用
1. web.xml中配置了CharacterEncodingFilter,配置这个是拦截所有的资源并设置好编号格式. encoding设置成utf-8就相当于request.setCharacter ...
- idea开发web项目框架失效和无法启动问题
不会配置idea的javaweb环境的小伙伴可以点击此链接 idea最新版,配置javaweb环境 很多小伙伴用idea开发web项目可能会出现所有代码都写对了但是无论如何都没法运行的情况,eclip ...
- 使用Spring Boot开发Web项目
前面两篇博客中我们简单介绍了Spring Boot项目的创建.并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so ...
随机推荐
- 移植 MQTT broker mosquitto 到 omapl138
概述 本次移植使用创龙的 TL138-EVM 开发板,基于 TI 的 MCSDK 开发环境.具体上位机系统为 Ubuntu 12.04-32bit,软件环境基于创龙的用户手册搭建. 为了移植后在 13 ...
- ATM程序设计
package com.arthur.object; import java.util.Scanner; /*** * 简单的ATM存取款程序 1.登陆页面 2.登陆 3.菜单:1,查询,2,存款,3 ...
- IEEE1588 verision2 报文介绍
PTP报文 PTP verision2报文是由 报头,主体 和 报尾 (header, body, and suffix)组成,报尾长度可能为0. PTP verision2报文在verision1的 ...
- less基础语法
变量 //->LESS代码 @link-color: #428bca; @link-color-hover: darken(@link-color, 10%); a { color: @link ...
- iOS SVN出现的问题,在mac使用Cornerstone中无法提交提交失败处理。。。
问题一: Description : An error occurred while contacting the repository. Suggestion : The server may be ...
- 支持各种特殊字符的 CSV 解析类 (.net 实现)(C#读写CSV文件)
CSV是一种十分简洁的数据结构,在DOTNET平台实际使用中发现微软官方并没有提供默认的方法,而网上好多例子发现实现并不严谨甚至一些含有明显错误,所以后面自己实现了一个读写工具类,这里发出来希望方便后 ...
- 浅谈传统语音通信和APP语音通信音频软件开发之不同点
本人在传统的语音通信公司做过手机和IP电话上的语音软件开发,也在移动互联网公司做过APP上的语音软件开发.现在带实时语音通信功能的APP有好多,主流的有微信语音.QQ电话.钉钉等,当然也包括我开发过的 ...
- C#生成缩略图 (通用模式)
用数据库保存图片的路径和文件名称,把文件保存在文件夹中.//保存在数据库中的文件路径ArrayList arrFilePath=new ArrayList();arrFilePath=myCommon ...
- application19事件 20多少步骤 具体20多少只有微软知道!!!
- Solr 管理界面删除所有数据
https://my.oschina.net/lcdmusic/blog/326698