zoukankan      html  css  js  c++  java
  • Spring MVC springMVC-servlet.xml

    DispatcherServlet的配置:

      DispatcherServlet是SpringMVC的前端控制器,所有的请求都经过前端控制器,也是项目中出现的唯一一个servlet,在 web.xml中进行配置:

        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
            <!-- springmvc配置文件默认的名字:<servlet-name>-servlet.xml -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springMVC-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

    1 @Controller:

      用于标记在一个类上,标记的类就是一个SpringMVC Controller对象

      dispatcherServlet会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解

      @Controller只是定义了一个控制器类,使用了@RequestMapping注解的方法才是真正处理请求的处理器

        <!-- 扫描controller -->
        <context:component-scan base-package="com.roxy.springmvc.controller"></context:component-scan>

    2 @ RequestMapping()

      用于处理请求地址映射,可用于类或者方法上

      用于类上:说明类中所有响应请求的方法都是以该地址作为父路径

      返回值会通过视图解析器解析为实际的物理视图(通过perfix+returnValue+suffix的方式得到),然后做转发操作

         <!-- 视图解析器,定义了前缀和后缀 -->
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
             <property name="prefix" value="/WEB-INF/jsp/"></property>
             <property name="suffix" value=".jsp"></property>
         </bean>
    pro:

      value:指定请求的实际地址
        value是默认的通知,可以省略;如果有其他的参数,则不可省略
      method:指定请求的method类型[GET、POST、PUT、DELETE等]
        POST形式:@RequestMapping(value="/world", method=RequestMethod.POST)
         GET形式:@RequestMapping(value="/world", method=RequestMethod.GET)
          如果不指定method,则接受任何形式的请求
           405:请求方式错误
      consumes:指定处理请求的提交内容类型[application/json、text/html等]
      produces:指定返回的内容类型,仅当request请求头中的Accept类型中包含该指定类型才返回
      params:指定request中必须包含某些参数值
      headers:指定request中必须包含某些指定的header值
    @Controller
    @RequestMapping("/hello")
    public class HelloWorld {
    
        //请求映射:
        //    将url参数映射到方法,DispatcherServlet 根据这个配置中的uri地址决定调用哪个方法
        //  方法的返回值类型如果是字符串(String)
        @RequestMapping(value="/world", method=RequestMethod.GET)
        public String helloWorld(){
            
            //返回的是视图的名字
            System.out.println("hello world");
            
            //说明返回的是一个视图名字,DispatcherServlet 会根据视图解析器中的配置找到视图的完整的路径,从而解析并显示视图
            return "helloworld";
        }
    }
    ant风格:
     
      可以接收通配符
      @RequestMapping(""):
        通配符:
          ?:匹配文件名的一个字符
          *:匹配文件名的所有字符
          **:匹配多层路径
        @RequestMapping("/testantpath/*/draco")
        
        public String testAntpath() {
            
            System.out.println("antpath");
            
            return "success";
        } 

     3 @CookieValue()

      用于处理cookies,显示必须有值

        @RequestMapping("/testcookie")
        public String testCookie(@CookieValue("JSESSIONID") String sessionID){
            
            System.out.println(sessionID);
            
            return "success";
        }

     4 @RequestHeader():

      获取请求头中某一部分的值

        @RequestMapping("/testheader")
        public String testHeader(@RequestHeader(value="Accept-Language") String header) {
    System.out.println(header);
    return "success"; }

    5 请求参数和请求头表达式:

    params和 headers支持简单的表达式:
      param1: 表示请求必须包含名为 param1 的请求参数
      
    !param1: 表示请求不能包含名为 param1 的请求参数   param1 != value1: 表示请求包含名为 param1 的请求参数,但其值 不能为 value1   {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
        @RequestMapping(value="/testparam", params= {"username", "age!=10"}, headers= {"Accept-Language=zh-CN,zh;q=0.8"})
        public String testParam(String username, Integer age) {
            
            System.out.println(username + " " + age);
            
            return "success";
        }

     6 处理器请求参数: 

      6.1 自动的表单参数匹配(post/get):

        表单中控件name的值,和controller层方法的参数名一致,则匹配,可自动接收

        <form action="login" method="post">
            <label for="username">用户名<input type="text" id="username" name="username"/></label>
            <label for="password">密码<input type="password" id="password" name="password"/></label>
            <button>登录</button>
        </form>
        @RequestMapping(value="/login", method=RequestMethod.POST)
        public String login(String username, String password){
            
            System.out.println(username);
            System.out.println(password);
            
            return "redirect:world";
        }

      6.2 注解形式的参数匹配:

        表单中控件的name的值和controller方法中参数名不一致时,使用@RequestParam()注解

    <label>用户名<input type="text" id="username" name="realname" /></label>
        @RequestMapping(value="/login", method=RequestMethod.POST)
        public String login(@RequestParam(value="realname") String username, String password) {
    
        }

      6.3 url中get形式的参数匹配:

        url中参数name的值,和controller层方法的参数名一致,则匹配,可自动接收

      6.4 可以用 defaultValue 属性设置上参数的默认值:  

        @RequestMapping("/list")
        public String list(
                @RequestParam(value="currentpage", defaultValue="1") Integer currentpage, 
                @RequestParam(value="pagesize", defaultValue="10") Integer pagesize) 

      6.5 必须使用包装类类型的参数:

        因为当参数不存在时,springmvc会将参数的值转换成null,若使用基本类型会出现转换异常

      6.6 可以使用required设置参数是否可选:   

        @RequestMapping("/list")
        public String list(
                @RequestParam(value="currentpage", required=false)Integer currentpage, 
                @RequestParam(value="pagesize", required=false)Integer pagesize) 

     7 路径参数

      使用 @PathVariable 将url地址中的路径部分做参数传递

        @RequestMapping("/get/{id}")
        public String get(@PathVariable(value="id") Integer id) {
    System.out.println(
    "id:" + id);
    return "user/edit"; }

     8 请求转发和重定向:

    请求转发: 
      
      return "视图名称";
    重定向:
      
      return "redirect:controller的mapping地址"

     9 解决post乱码:

      在web.xml文件中配置字符编码过滤器,由spring提供
       <!-- 解决SpringMVC的post乱码 -->
        <filter>
            <filter-name>characterEncodingFilter</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>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
  • 相关阅读:
    DotNetty是微软的Azure团队,使用C#实现的Netty的版本发布
    C# 与 .NET Framework 对应关系
    C# 基于Directshow.Net lib库 USB摄像头使用DirectShow.NET获取摄像头视频流
    Actor模型的状态(State)+行为(Behavior)+邮箱(Mailbox)
    c# 无法加载DLL:找不到指定的模块(异常来自HRESULT:0X8007007E)
    管道式编程(Pipeline Style programming)
    Word文档转Markdown插件(Windows)
    纯Java实现定时任务(转)
    Spring MVC使用Schedule实现定时任务
    Spring Boot使用Schedule实现定时任务
  • 原文地址:https://www.cnblogs.com/roxy/p/7604007.html
Copyright © 2011-2022 走看看