SpringMVC——数据提交的优化,四种跳转方式以及日期的处理

1. RequestMapping定义请求规则

此注解就是来映射服务器访问的路径.

1.1 注解加在方法上

此注解可加在方法上,是为此方法注册一个可以访问的名称(路径),也就是同门访问的路径

  @RequestMapping("/demo")
    public String demo(){
        System.out.println("服务器被访问到了.......");
        return "main";  //可以直接跳到/admin/main.jsp页面上
    }
  <a href="${pageContext.request.contextPath}/demo.action">访问服务器</a>

1.2 注解加在类上

  • 此注解可以加在类上,相当于是包名(虚拟路径),区分不同类中相同的action的名称
  @RequestMapping("/user")
  public class DemoAction1 {..}
  <a href="${pageContext.request.contextPath}/user/demo.action">访问服务器</a>

1.3 注解区分get以及post请求

提交过去之后,根据不同的请求方式跳转到同一个服务器,同样路径名称的不同方法中,由于提交方法不同,所以会访问两种不同的请求方式

  <h2>测试不同的提交方式</h2>
  <%--提交过去之后,根据不同的请求方式跳转到同一个服务器,同样路径名称的不同方法中--%>
  <form action="${pageContext.request.contextPath}/req.action" method="post">
      <input type="submit" value="提交">
  </form>
    /*由于表单提交的请求方式不一样,所以即使相同的路径名称也可以访问不同的方法功能*/
    @RequestMapping(value = "/req",method = RequestMethod.GET)
    public String req(){
        System.out.println("处理get请求的方式");
        return "main";
    }

    @RequestMapping(value = "/req" ,method = RequestMethod.POST)
    public String req1(){
        System.out.println("处理post请求方式");
        return "main";
    }

2. .五种数据提交方式的优化

2.1 单个提交数据

页面:

  <form action="${pageContext.request.contextPath}/one.action">
      姓名:<input name="myname"><br>
      年龄:<input name="age"><br>
      <input type="submit" value="提交">
  </form>

action:

@RequestMapping("/one")
  public String one(String myname,int age){  ===>自动注入,并且类型转换
      System.out.println("myname="+myname+",age="+(age+100));
      return "main";
  }

2.2 对象封装提交数据

在提交请求中,保证请求参数的名称与实体类中成员变量的名称一致,则可以自动创建对象,则可以自动提交数据,自动类型转换,自动封装数据到对象中.

实体类:

public class Users {
private String name;
private int age;}

页面:

<form action="${pageContext.request.contextPath}/two.action" method="post">
    姓名:<input name="name"><br>
    年龄:<input name="age"><br>
    <input type="submit" value="提交">
</form>

action:

@RequestMapping("/two")
public String two(Users u){
    System.out.println(u);
    return "main";
}

2.3 动态占位符提交

仅限于超链接或地址拦提交数据.它是一杠一值,一杠一大括号,使用注解@PathVariable来解析.

<a href="${pageContext.request.contextPath}/three/张三/22.action">动态提交</a>   
@RequestMapping("/three/{uname}/{uage}")
public String three(
        @PathVariable("uname")  ===>用来解析路径中的请求参数
        String name,
        @PathVariable("uage")
        int age){
    System.out.println("name="+name+",age="+(age+100));
    return "main";
}

2.4 映射名称不一致

  • 提交请求参数与action方法的形参的名称不一致,使用注解@RequestParam来解析
  /**
     *  姓名:<input name="name"><br>
     *  年龄:<input name="age"><br>
     */
    @RequestMapping("/four")
    public String four(
            @RequestParam("name")  ===>专门用来解决名称不一致的问题
            String uname,
            @RequestParam("age")
            int uage){
        System.out.println("uname="+uname+",uage="+(uage+100));
        return "main";
    }

2.5 手工提取数据

原始的方法使用request取出对象

  /**
     *  姓名:<input name="name"><br>
     *  年龄:<input name="age"><br>
     */
  @RequestMapping("/five")
    public String five(HttpServletRequest request){
        String name = request.getParameter("name");
        int age = Integer.parseInt(request.getParameter("age"));
        System.out.println("name="+name+",age="+(age+100));
        return "main";
    }   

中文乱码解决方案
在web.xml配置过滤器.

  <filter>
        <filter-name>encode</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--
          配置参数
            private String encoding;
            private boolean forceRequestEncoding;
            private boolean forceResponseEncoding;
        -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encode</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 

3. 四种跳转方式分析

说明转发以及重定向问题
在这里插入图片描述

3.1 请求转发页面

前端发送的请求:

<a href="${pageContext.request.contextPath}/one.action">1.请求页面</a><br><br>
<a href="${pageContext.request.contextPath}/two.action">2.请求转发action</a><br><br>
<a href="${pageContext.request.contextPath}/three.action">3.重定向跳转</a><br><br>
<a href="${pageContext.request.contextPath}/four.action">4.重定向action跳转</a><br> <br>

   由于没有重定向,知识转发所以即使跳转到/admin/main.jsp页面,请求路径依然是:
http:localhost:8080/one.action

  @RequestMapping("/one")
    public String one(){
        System.out.println("这是请求转发页面跳转.........");
        return "main";  //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
    }

3.2 转发action

同样,使用转发方式地址栏的路径不会改变:
http:localhost:8080/two.action

@RequestMapping("/two")
public String two(){
    System.out.println("这是请求转发action跳转.........");
    //  /admin/  /other.action  .jsp
    //forward: 这组字符串可以屏蔽前缀和后缀的拼接.实现请求转发跳转
    return "forward:/other.action";  //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
}

3.3 重定向页面

有重定向:会停留在最终资源所在位置

@RequestMapping("/three")
public String three(){
    System.out.println("这是重定向页面.......");
    //redirect:  这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
    return "redirect:/admin/main.jsp";
}

3.4 重定向action

本次不一样的是,在本次重定向之后还有请求转发,所以会停留在重定向的位置,而不是最终资源页面

    @RequestMapping("/four")
    public String four(){
        System.out.println("这是重定向action.......");
        //redirect:  这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
        return "redirect:/other.action";
    }
@Controller
public class OtherAction {

    @RequestMapping("/other")
    public String other(){
        System.out.println("other的action访问");
        return "main";
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮皮皮皮皮皮卡乒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值