SpringMVC

作者: 五月的约修亚 | 来源:发表于2017-03-10 17:14 被阅读0次

    起步

    Spring MVC的核心是DispatcherServlet,这个servlet充当SpringMVC的前端控制器,与其他Servlet一样,DispatcherServlet必须在web应用程序的web.xml文件中配置
    一个最简单的web.xml配置如下,它会到springMVC-servlet.xml的文件中加载上下文

    <servlet>
       <!-- servlet的名字,DispatcherServlet将尝试从一个名为springMVC-servlet.xml的文件中加载上下文 -->
       <servlet-name>springmvc</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath*:/springMVC-servlet.xml</param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
       <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
       <servlet-name>springmvc</servlet-name>
       <!-- 通过将DispatcherServlet映射到/,声明了它会作为默认的servlet并且会处理所有请求,包括对静态资源的请求 -->
       <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    注解

    在SpringMVC的controller中常用注解有

    • @Controller
    • @RequestMapping
    • @RequestBody
    • @RequestParam
    @Controller    //该注解告知<context:component-scan>该类应该被自动发现并作为一个Bean注册到Spring应用上下文
    @RequestMapping(value = "/user")    //根URL路径
    public class UserController {
         
        @Autowired
        UserService userService;
         
        @RequestMapping(value = "/query_user",        //表明处理"/user/query_uesr"的POST请求
                        method = RequestMethod.POST,  //可以传一个json支持多种方法
                        params = "name")              //请求中必须包含参数"name",否则不处理
        @ResponseBody
        public String queryUser(@RequestBody QueryUserParam param,  HttpServletRequest requests) {
            return userService.queryUser(param, requests);
        }
      
        @ResponseBody
        //RequestParam(value = "name")表明拿到http请求中的name参数赋值给name形参
        public String getUserInfo(@RequestParam("name") String name, HttpServletRequest requests){
        }
    }
    

    @RequestParam默认是required的,如果没有传required的参数,则spring层会直接返回400。
    可以使用@RequestParam(value = "name", required = false)来使得name参数为可选。
    @RequestBody将传入参数赋给自己定义的类,并且该类要==有一个默认的无参构造方法==,由Spring使用HttpMessageConverter将传入的json或xml转换成对象。

    @RequestParam@RequestBody的一些使用限制

    request header的Content-Type @RequestParam @RequestBody
    application/x-www-form-urlencoded 可处理 可处理
    application/json, application/xml 不可处理 可处理
    multipart/form-data 可处理 不可处理

    @RequestParam源码

    public @interface RequestParam {
     
       /**
        * The name of the request parameter to bind to.
        */
       String value() default "";
     
       /**
        * Whether the parameter is required.
        * <p>Default is {@code true}, leading to an exception thrown in case
        * of the parameter missing in the request. Switch this to {@code false}
        * if you prefer a {@code null} in case of the parameter missing.
        * <p>Alternatively, provide a {@link #defaultValue() defaultValue},
        * which implicitly sets this flag to {@code false}.
        */
       boolean required() default true;
     
       /**
        * The default value to use as a fallback when the request parameter value
        * is not provided or empty. Supplying a default value implicitly sets
        * {@link #required()} to false.
        */
       String defaultValue() default ValueConstants.DEFAULT_NONE;
    }
    

    路径变量

    @RequestMapping中使用花括号作为占位符,然后在方法中使用@PathVariable注解路径变量

    @Controller
    @RequestMapping(value = "/user")
    public class UserController {
     
     
        //如果url为/user/langzhouhao,那么langzhouhao将作为username传入到getUserInfo中
        @RequestMapping(value="/{username}", method=RequestMethod.get)
        public String getUserInfo(@PathVariable("username") String username){
        }
    }
    

    问题解决

    @Autowired@Value的自动装配必须满足以下两个条件:

    1. 自动装配的属性不能是static类型,因为static会随着类加载初始化,类加载是在spring加载之前
    2. 外层的类必须要通过@Component@Service@Controller标注,才能在类内部使用自动装配

    hbase读出的内容显示乱码:
    controller要指定返回的编码方式为utf-8

    @RequestMapping(value = "/sutra-repo", produces = "text/html;charset=UTF-8")

    相关文章

      网友评论

          本文标题:SpringMVC

          本文链接:https://www.haomeiwen.com/subject/umkogttx.html