zoukankan      html  css  js  c++  java
  • springmvc学习第一天

    一、helloworld的实现

    1.加入jar包(加入无关的jar包可能会引起服务器的冲突)

    commons-logging-1.2.jar
    jstl.jar
    spring-aop-4.1.6.RELEASE.jar
    spring-beans-4.1.6.RELEASE.jar
    spring-context-4.1.6.RELEASE.jar
    spring-core-4.1.6.RELEASE.jar
    spring-expression-4.1.6.RELEASE.jar
    spring-web-4.1.6.RELEASE.jar
    spring-webmvc-4.1.6.RELEASE.jar
    standard.jar

    2.配置web.xml文件(配置dispatcherServlet)

    <!-- 配置 DispatcherServlet -->
    <servlet>
      <servlet-name>dispatcherServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 -->
    <!--
    实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的.
    默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml
    -->
    <!--
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    -->
    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
      <servlet-name>dispatcherServlet</servlet-name>
      <url-pattern>/</url-pattern>(注意:此处不能写成/*,否则会找不到页面)
    </servlet-mapping>

    3.配置springmvc.xml

    <!-- 配置自定扫描的包 -->
    <context:component-scan base-package="com.wzy.springmvc"></context:component-scan>

    <!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"></property><!-- 前缀-->
    <property name="suffix" value=".jsp"></property><!-- 后缀-->
    </bean>

    4.编写handler类

    package com.oracle.handlers;

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;

    //注释为控制类

    @Controller
    public class HelloWorld {

    /**
    * 1. 使用 @RequestMapping 注解来映射请求的 URL
    * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于 InternalResourceViewResolver 视图解析器, 会做如下的解析:
    * 通过 prefix + returnVal + 后缀 这样的方式得到实际的物理视图, 然会做转发操作
    *
    * /WEB-INF/views/success.jsp
    *
    * @return
    */


    @RequestMapping("/hello")
    public String sayHello(){
    System.out.println("Hello World");
    return "success";
    }

    }

    5.编写相应的测试页面

    二、requestMapping注解

    /**
    * 1. @RequestMapping 除了修饰方法, 还可来修饰类 2. 1). 类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录
    * 2). 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL
    * 相对于 WEB 应用的根目录
    */
    @RequestMapping("/testRequestMapping")
    public String testRequestMapping() {
    System.out.println("testRequestMapping");
    return SUCCESS;
    }

     1.requestMapping 的属性

    method属性:设置请求的方式

    @RequestMapping(value="/testRequestMethod",method=RequestMethod.POST)
    public String testRequestMethod(){
    System.out.println("testRequestMethod");
    return "success";
    }

    设置为post请求,如果请求方式为get:<a href=springmvc/testRequestMethod>testRequestMethod</a>;

    会抛出405异常

    改为post提交:

    <form action="springmvc/testRequestMethod" method="post">
    <input type="submit" />
    </form>

    则正常提交~~

    params和headers属性(了解)

    @RequestMapping(value="/testRequestParams",params={"username","age!=10"})
    public String testRequestParams(){
    System.out.println("testRequestParams");
    return "success";
    }

    @RequestMapping(value="/testRequestParams",params={"username","age!=10"},headers={"Accept-Language=en-US,zh;q=0.8"})
    public String testRequestParams(){
    System.out.println("testRequestParams");
    return "success";
    }

    params和headers可以采用数组的方式设置

    params • 和 headers支持简单的表达式:
    param1: 表示请求必须包含名为 param1 的请求参数 –
    !param1: 表示请求不能包含名为 param1 的请求参数 –
    param1 != value1: 表示请求包含名为 param1 的请求参数,但其值
    不能为 value1
    {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 –
    的两个请求参数,且 param1 参数的值必须为 value1

    2.requestMapping在映射的时候的url还支持ant类型的通配符(了解)

    Ant 风格资源地址支持 3 种匹配符:
    ?:匹配文件名中的一个字符 –
    *:匹配文件名中的任意字符 –
    **:** 匹配多层路径 –

    @RequestMapping(value="/testUrlAnt/*/ant")
    public String testUrlAnt(){
    System.out.println("testUrlAnt");
    return "success";
    }

    <a href=springmvc/testUrlAnt/mnbv/ant>testUrlAnt</a>

    三、 PathVariable注解( 可以来映射 URL 中的占位符到目标方法的参数中)

    @RequestMapping(value="/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") int id){
    System.out.println("testPathVariable:"+id);
    return "success";
    }

    <a href=springmvc/testPathVariable/1>testPathVariable</a>

    四、REST

    1.rest方式的url

    Rest 风格的 URL. 以 CRUD 为例:

    新增: /order POST(没有id)

    修改: /order/1 PUT     普通风格: update?id=1

    删除:/order/1 DELETE 普通风格:delete?id=1

    查找:/order/1 GET    普通风格:get?id=1

    2.如何发送PUT请求和DELETE请求

     1. 需要在web.xml中配置 HiddenHttpMethodFilter

    <!--
    配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求
    -->
    <filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

     2. 需要发送 POST 请求

     3. 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT

    <form action="springmvc/testRest/1" method="post">
    <input type="hidden" name="_method" value="PUT" />
    <input type="submit" value="PUT" />
    </form>

    <form action="springmvc/testRest/1" method="post">
    <input type="hidden" name="_method" value="DELETE" />
    <input type="submit" value="DELETE" />
    </form>

    <form action="springmvc/testRest" method="post">
    <input type="submit" value="post" />
    </form>
    <a href=springmvc/testRest/1>testRest</a>

    4.在handler中获取

    @RequestMapping(value="/testRest/{id}",method=RequestMethod.PUT)
    public String testRestDeletePut(@PathVariable("id") int id){
    System.out.println("put:"+id);
    return "success";
    }

    @RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
    public String testRestDelete(@PathVariable("id") int id){
    System.out.println("delete:"+id);
    return "success";
    }


    @RequestMapping(value="/testRest",method=RequestMethod.POST)
    public String testRest(){
    System.out.println("post");
    return "success";
    }

    @RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)
    public String testRest(@PathVariable("id") int id){
    System.out.println("get:"+id);
    return "success";
    }

    五、RequestParam注解(来映射请求参数)

    value 属性:即请求参数的参数名

    required属性: 该参数是否必须. 默认为 true

    defaultValue属性: 请求参数的默认值

    @RequestMapping(value = "/testRequestParam")
    public String testRequestParam(
    @RequestParam(value = "username") String un,
    @RequestParam(value = "age", required = false, defaultValue = "0") int age) {
    System.out.println("testRequestParam, username: " + un + ", age: "
    + age);
    return SUCCESS;
    }

    <a href="springmvc/testRequestParam?username=atguigu&age=11">Test RequestParam</a>

    六、RequestHander注解(来映射请求头)

    用法同 @RequestParam

    @RequestMapping(value="/testRequestHeader")
    public String testRequestHeader(@RequestHeader("Accept-Language") String al){
    System.out.println("testRequestHander Accept-Language:"+al);
    return "success";
    }

    <a href=springmvc/testRequestHander>testRequestHander</a>

    七、CookieValue注解(映射一个 Cookie 值)

    用法同@RequestParam

    @RequestMapping(value="/testCookieValue")
    public String testCookieValue(@CookieValue("JSESSIONID") String id){
    System.out.println("testCookieValue CookieValue:"+id);
    return "success";
    }

    <a href=springmvc/testCookieValue>testCookieValue</a>

  • 相关阅读:
    Java项目中加载properties文件的方式
    第十一篇 JVM之运行时数据区<7>: 本地方法栈
    第十七篇 JVM之运行时数据区<13>: 字符串常量池
    第十四篇 JVM之运行时数据区<10>: 对象分配过程
    基于zxing工具生成二维码
    第十八篇 JVM之运行时数据区<14>: 方法区的垃圾收集
    第十六篇 JVM之运行时数据区<12>: 方法区
    第十二篇 JVM之运行时数据区<8>: Java堆
    圣诞
    LeetCode 748 最短补全词
  • 原文地址:https://www.cnblogs.com/yydeyi/p/4715521.html
Copyright © 2011-2022 走看看