Spring注解以及表单的处理

Posted 冉兵成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring注解以及表单的处理相关的知识,希望对你有一定的参考价值。

基础搭建见mvc02


基础搭建步骤

web.xml文件和之前的一样


spring文件需要加上这些
 <!-- 启动注解驱动 -->
 <mvc:annotation-driven/>
 <!--启用自动扫描  -->
 <context:component-scan
  base-package="com.wode.controller" />

 <!-- ViewResolver视图解析器 用于将返回的ModelAndView对象进行分离 -->
 <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView"></property>
  <property name="prefix" value="/"></property>
  <property name="suffix" value=".jsp"></property>
 </bean>

和昨天的没所少区别,关键的是比昨天更加简单了

完成案例1:使用注解登录

首先使用第一个注解@Controller标注这个类是一个控制器  
@RequestMapping(path="login",method=RequestMethod.GET)--这个东西就表明了使用的request路径
案例1也在基础搭建中


案例2:在这个控制器中添加一个注册的方法

我们发现在同一个类中不同业务区分是通过@RequestMapping("regist.do")来实现的这比以前要简单多了

 

案例3:为了简化开发,我们发现每次我们接受参数都需要使用request来接受,无形中增加了我们的代码量
我们可以这样
@RequestMapping("regist.do")
 public String regist(String name,String pwd){      ---这里,我们的参数和表单提交保持一致
  System.out.println(name+" "+pwd);
  return "main";
 }

如果不想一致呢?和我们mybatis中使用的方法一样
public String regist(String name,@RequestParam(value="pwd")String password){  //这样就可以了
  System.out.println(name+" "+password);
  return "main";
 }


案例4:继续思考,之前我们就遇到过这样的问题,传递的参数太多了,我们要想办法把他封装成为一个对象
 @RequestMapping("regist.do")
 public String regist(UserBean bean){
  System.out.println(bean.getUsername()+" "+bean.getPassword());
  return "main";
 }
这里需要注意的是表单中的name必须和bean中的属性名字一模一样,错一个字都不行


案例5
注意,我们之前传递参数是使用的req.setAttribute(arg0, arg1);这种方式来的,但是spring mvc为了简化这个操作,可以这样做
@RequestMapping("regist.do")
 public String regist(UserBean bean,Map<String, Object> map){
  System.out.println(bean.getUsername()+" "+bean.getPassword());
  map.put("userName", bean.getUsername());
  return "main";
 }
这里使用的map来充当了request对象让我们更简单的操作
但是这里有个坑,我们在后边将重定向的时候讲解一下

案例6:我们经常要遇到ajax操作,这怎么做呢?
这里我们使用和之前差不多的方法:回忆下Servlet
@RequestMapping("doAjax.do")
 public void doAjax(PrintWriter writer){  ---这里
  writer.println("hello world");
 }

我们接着在页面上就可以正常使用ajax了,还有我们之前的json的使用

案例7
那我们怎么在注解中使用转发和重定向呢?其是很简单
@RequestMapping("regist.do")
 public String regist(UserBean bean,Map<String,Object> map){
  System.out.println(bean.getUsername()+" "+bean.getPassword());
  if(bean.getUsername().equals("zhangsan")){
   //请求转发
   return "forward:main.jsp";
  }else{
   //重定向
   map.put("userName",bean.getUserName);
   return "redirect:main.jsp";
  }
 }
分别转发和重定向一次,在重定向的位置发生了问题
就是重定向竟然有了参数??? -----原因就是map搞的

 


案例8:RequestMapping还有一个非常重要的参数
看这段代码:
@Controller
@RequestMapping("user.do") //我们在最前边写上了user.do用户的所有要使用的方法都在这个位置
public class UserController {
 @RequestMapping(params="method=login")//通过参数确定我们到底使用的这个类中的哪一个方法
 public String login(){
  System.out.println("用户的登录了");
  return null;
 }
 @RequestMapping(params="method=regist")
 public String regist(){
  System.out.println("用户注册了");
  return null;
 }
}

在表单中:
<form action="user.do" method="get" >
 <input type="hidden" name="method" value="regist"><!--这里通过一个隐藏表单域来控制我们到底提交了哪个方法-->
  name:<input type="text" name="username"><br />
   pwd:<input type="password" name="password"><br />
   <input type="submit">
 </form>

以上是关于Spring注解以及表单的处理的主要内容,如果未能解决你的问题,请参考以下文章

springMVC @valid 注解没有效果是怎么回事?

Java注解及其原理以及分析spring注解解析源码

spring注解怎么实现的

Spring常用表单验证注解

Spring Boot 2从入门到入坟 | 请求参数处理篇:常用参数注解之@RequestBody

Spring Boot 2从入门到入坟 | 请求参数处理篇:常用参数注解之@RequestBody