• SpringMVC 始+五种数据提交的方法


    离离原上草,一岁一枯荣


    前言

    这东西比我想象的要多得多,fk


    一、SpringMVC

    它是基于MVC开发模式的框架,用来优化控制器,它是Spring家族的一员,
    它也具备IOC和AOP

    所有的web应用都是基于MVC开发
    M:模型层,包含实体类,业务逻辑层,数据访问层
    V:视图层,html,javaScript,vue等,用来呈现数据
    C:控制器,它是用来接收客户端的请求,并返回响应到客户端的组件,Servlet就是其组件

    二、SpringMVC框架的优点

    1. 轻量级,基于MVC的框架
    2. 易于上手,容易理解,功能强大
    3. 它具备IOC和AOP
    4. 完全基于注解开发

    三、基于注解的SpringMVC框架开发的步骤

    1. 新建项目,选择webapp模板
    2. 修改目录,添加test,java,resources并修改目录属性
    3. 修改pom文件,添加SpringMVC的依赖,添加servlet的依赖
    4. 添加springmvc.xml配置文件,指定包扫描,添加视图解析器
    5. 删除web.xml文件,新建web.xml
    6. 在web.xml中注册SpringMVC框架(所有的web请求都是基于servlet的)
    7. 在webapp目录下新建admin目录,在admin目录下新建main.jsp页面,删除index.jsp页面,并新建,发送请求给服务器
    8. 开发控制器(Servlet),它是一个普通的类
    9. 添加tomcat进行测试功能

    四、web请求

    web请求执行流程
    index.jsp《= = =》 DispatcherServlet(核心处理器)《 = = =》SpringMVC的处理器是一个普通的方法
    one.jsp 《 === 》 DispatcherServlet(核心处理器)《 = = =》SpringMVC的处理器是一个普通的方法
    响应的分发和返回都是DispatcherServlet来做
    DispatcherServlet要在web.xml文件中注册才可用。

    五、@RequestMapping

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

    1. 此注解可加在方法上,是为此方法注册一个可以访问的名称(路径)
    @RequestMapping("/demo")
    public String demo(){
        System.out.println("服务器被访问到了....");
        return "main";//可以直接跳到/admin/main.jsp页面上
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    <a href="${pageContext.request.contextPath}/demo.action">访问服务器</a>
    
    • 1

    以上a标签中.action并不是后缀的意思,只是一个标识,标识这样的请求才会被拦截

    1. 此注解可以加在类上,相当于是包名(虚拟路径),主要是区分不同类中相同的action的名称
    @RequestMapping("/user")
    public class DemoAction1 {...}
    
    • 1
    • 2
    <a href="${pageContext.request.contextPath}/user/demo.action">
    
    • 1
    1. 此注解可区分get请求和post请求
    @Controller
    public class ReqAction {
        @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";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    六、五种数据提交方式的优化(SpringMVC框架)

    1. 单个提交数据
      页面:
        <form action="${pageContext.request.contextPath}/one.action">
            姓名:<input name="myName"> <br>
            年龄:<input name="myAge"> <br>
        </form>
    
    • 1
    • 2
    • 3
    • 4

    action:

        @RequestMapping("one")
        public String one(String myName,int myAge){
            System.out.println("myName="+myName+",myAge="+(myAge+100));
            return "main";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    public class Users {
        private String uName;
        private int uAge;
        ...}
    
    • 1
    • 2
    • 3
    • 4

    页面:

    <h1>2.对象封装数据提交</h1>
    <form action="${pageContext.request.contextPath}/two.action" method="post">
        姓名:<input name="uName"> <br>
        年龄:<input name="uAge"> <br>
        <input type="submit" value="提交">
    </form>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    action:

        @RequestMapping("/two")
        public String two(Users users){
            System.out.println(users);
            return "main";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 动态占位符提交
      仅限于超链接或地址栏提交数据。它是一杠一值,一杠一大括号,使用注解@PathVariable来解析
        /**
         * 动态提交
         *@RequestMapping("/three/{name}/{age}")中的name和age相当于行参,是什么都可以
         */
        //@RequestMapping("/three/{name}/{age}")此种情况@PathVariable后面不用跟东西
        @RequestMapping("/three/{uname}/{uage}")//此为第二种情况@PathVariable("uname")
        public String three(
                @PathVariable("uname")
                String name,
                @PathVariable("uage")
                int age){
            System.out.println("myName="+name+",myAge="+(age+100));
            return "main";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 映射名称不一致
      提交请求参数与action方法的形参的名称不一致,使用注解@RequestParam来解析
        /**
         *     姓名: 
    * 年龄:
    * @param uname * @param uage * @return */
    @RequestMapping("/four") public String four( @RequestParam("uName")//专门用来解决名称不一致 String uname, @RequestParam("uAge") int uage){ System.out.println("myName="+uname+",myAge="+(uage+100)); return "main"; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. 手工提取
        /**
         *     姓名: 
    * 年龄:
    * @return */
    @RequestMapping("/five") public String five(HttpServletRequest request){ String name = request.getParameter("uName"); int age = Integer.parseInt(request.getParameter("uAge")); System.out.println("myName="+name+",myAge="+(age+100)); return "main"; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    总结

    restful风格

    ${pageContext.request.contextPath}:
    ${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> 。
    也就是取出部署的应用程序名或者是当前的项目名称。

  • 相关阅读:
    【前端】webpack5的配置及基本使用
    C++中的mutable关键字
    10. 获取操作系统版本和位数
    Spring Boot企业级开发教程-第一章 Spring Boot 开发入门
    1.数据对象及其类型——R语言与数据分析
    使用jstack工具排查JVM中CPU高消耗问题
    阅读论文的方法和技巧(快速且有效)
    基于flask和fomantic-ui的简易p2p文件分享平台的手动实现
    Arduino驱动DFPlayer Mini MP3模块
    基于SSM框架的管理系统-计算机毕设 附源码 23402
  • 原文地址:https://blog.csdn.net/tcben/article/details/126771147