Spring启用注解、json、后台注解验证

基础搭建见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+hibernateValidate的方式验证(想一想,为什么需要验证?为什么js不是很安全的验证)

首先引入一些必要的jar包,在案例mvc02中都有
需要我们手动配置的是:
web.xml中
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
  /WEB-INF/mySpring-*.xml
  </param-value>
 </context-param>

 

mySpring-*.xml中
 <bean id="validator"
  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean ">
  <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
 </bean>

<mvc:annotation-driven validator="validator" />


完成登录是用户空验证   案例:validate文件中

1:首先完成bean文件的验证 2:在controller中调用这些规则3:在jsp文件中使用spring
-------------------------------------------------------------------------------------------

案例9关于上传文件

首先在配置文件中添加上传组件
<bean id="multipartResolver"
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!-- 限制上传文件的大小  -1 为不限制 -->
  <property name="maxUploadSize" value="-1">
  </property>
</bean>


具体案例参考 upload文件

这里值得我们注意的是上传中文会乱码
我们需要这样做
1:在表单中accept-charset="utf-8"
2:web.xml文件中
 <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
就可以了

 

 

案例10 关于json的使用 

这里做了改进
 <bean
  class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
  <property name="messageConverters">
   <list>
    <ref bean="mappingJacksonHttpMessageConverter" />
   </list>
  </property>
 </bean>
 <bean id="mappingJacksonHttpMessageConverter"
  class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  <property name="supportedMediaTypes">
   <list>
    <value>text/html;charset=UTF-8</value>
   </list>
  </property>
 </bean>

jsp页面发送ajax

@Controller
public class TestAction {
 @RequestMapping("test.do")
 public @ResponseBody List<UserBean> test1(String uname) throws Exception{  //这个东西是核心
  List<UserBean> list = new ArrayList<UserBean>();
  UserBean user=new UserBean();
  user.setUsername("张三");
  user.setPassword("admin");
  UserBean user2=new UserBean();
  user2.setUsername("lisi");
  user2.setPassword("admin");
  list.add(user);
  list.add(user2);
  return list;
 }
@ResponseBody自动帮你做转换,我们只需要把jackson的jar包放进去就可以了,以前需要我们手动在xml文件中处理的

我们打开TCP/IP Monitor可以清楚的看到实验结果

 

案例11:我们现在可以从后台发送json过来了,那么如果我们需要把前台的数据通过json发送到后台呢?
代码:
function test(){
   var saveUser=[]; 
         var user1={"username":"test","password":"admin"}; 
         var user2={"username":"ququ","password":"root"}; 
         saveUser.push(user1); 
         saveUser.push(user2);    
   $.ajax({
      type: "post",
      url: "test.do",
      data:$.toJSON(saveUser), //这里需要json转换jquery.json-2.4.js
      contentType:"application/json",
      success: function(msg){
        alert( msg );
      }
   });
 }

 后台代码
 public @ResponseBody List<UserBean> test1(@RequestBody List<UserBean> users) throws Exception{
  System.out.println(users.size());
通过这个实验,我们发现我们传送过去了一个数组


 实验
  var v={username:"zhangsan",password:'admin'}
    var t= $.toJSON(v);
   $.ajax({
      type: "post",
      url: "test.do",
      data:t,
      contentType:"application/json",
      success: function(msg){
        alert( msg );
      }
   });
 
 后台
 public @ResponseBody List<UserBean> test1(@RequestBody UserBean u) throws Exception{
  System.out.println(u.getUsername()+" "+u.getPassword());
 可以正常接收前台的值了


 实验接受一堆数值
 function test(){
   var nums=[]; 
         var num1=10; 
         var num2=11; 
         nums.push(num1); 
         nums.push(num2);    
   $.ajax({
      type: "post",
      url: "test.do",
      data:$.toJSON(nums),
      contentType:"application/json",
      success: function(msg){
        alert( msg );
      }
   });
  }

  后台代码
   public @ResponseBody List<UserBean> test1(@RequestBody List<Integer> nums) throws Exception{
  System.out.println(nums.get(0)+" "+nums.get(1));

转载于:https://www.cnblogs.com/wo541362927/p/5839509.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值