码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC 小结

时间:2015-05-02 12:18:50      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

1. 传值的方式:

    页面传递给controller:

    1). (@RequestParam("username") String username) // @RequestParam("username")中的参数会被任务是地址的一部分,如果不传此值,会报错

    2). (String username)

    3). (User user) // 页面以spring的form表单提交

    4). (@ModelAttribute("user")User user)       // 等于将user放到model中,可以处理页面跳转到添加页面时,无值可取的错误

    将值传递给页面:

    1). 参数中加map(Map<String,Obect)),map中添加要传递给页面的参数。取值方式:${key}

    2). Model model ,model.addAttribute("username",username)

 

2. REST

    // REST的风格不等于使用REST技术

    /user/id(/具体操作)           例如:查询:/user/id           ,  删除  /user/id/delete          ,  查询集合:/users 或者 /user/users

 

3. 启用jstl支持

    在InternalResourceViewResolver中加入,貌似新版可以不加,默认启用:

    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

 

4. map集合取值

    (map.put("users",users),users为也是个map):    

   <c:forEach items="${users }" var="um">

      ${um.value.username }

       ----<a href="${um.value.username }">${um.value.nickname }</a>

       ----${um.value.password }

       ----${um.value.email }--<a href="${um.value.username }/update">修改</a>

       <a href="${um.value.username }/delete">删除</a><br/>

   </c:forEach>

 

5. spring mvc 中有form标签    

引入:

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

    取值:

    <form:form method="post" modelAttribute="user" enctype="multipart/form-data">

        Username:<form:input path="username"/><form:errors path="username"/><br/>

        Password:<form:password path="password"/><form:errors path="password"/><br/>

        Nickname:<form:input path="nickname"/><br/>

        Email:<form:input path="email"/><form:errors path="email"/><br/>

        Attach:<input type="file" name="attachs"/><br/>    <input type="file" name="attachs"/><br/>    <input type="file" name="attachs"/><br/> 

        <input type="submit" value="添加用户"/>

    </form:form>

 

6. 字符编码处理:    

 <filter>

               <filter-name>CharacterFilter</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>

      </filter>

      <filter-mapping>

                  <filter-name>CharacterFilter</filter-name>

                  <url-pattern>/*</url-pattern>

      </filter-mapping>

 

7. 两种返回页面的方式:

    return "user/show";

    return "redirect:/user/users";

 

8. JSR303    // java的更新内容

 

9. 验证:     

 @Validated User user,BindingResult br ;两个必须放在一起,将验证结果放到br中

    if(br.hasErrors()) {

           //如果有错误直接跳转到add视图

           return "user/add";

      }

      页面显示错误信息的代码:

      <form:errors path="username"/>

 

10. 路径参数:      

      @RequestMapping(value="/{username}",method=RequestMethod.GET)

      (@PathVariable String username,Model model) // PathVariable表示路径中的值来作为参数

 

      @RequestMapping(value="/{username}/update",method=RequestMethod.GET)

      (@PathVariable String username,Model model) {

 

11. 获取session的方式      

 如下,request等获取方式类似: 

      public String login(String username,String password,HttpSession session) { // 获取session

 

12. 异常处理:      

 /**

         * 局部异常处理,仅仅只能处理这个控制器中的异常

        */

      @ExceptionHandler(value={UserException.class})

       public String handlerException(UserException e,HttpServletRequest req) {

             req.setAttribute("e",e);

             return "error";

       }

       全局异常处理:

       <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

              <property name="exceptionMappings">

                 <props>

                     <!-- UserException异常由error处理-->

                     <prop key="zttc.itat.model.UserException">error</prop>

                 </props>

              </property>

       </bean>

       页面获取异常:

       发现错误:<h1>${exception.message}</h1>

 

13. 静态资源处理:

      方法一:

      <!-- 将静态文件指定到某个特殊的文件夹中统一处理,/resources/以/结尾 -->

      <mvc:resources location="/resources/" mapping="/resources/**"/>

      方法二:     

     <mvc:default-servlet-handler>:当在web.xml 中DispatcherServlet使用<url-pattern>/</url-pattern> 映射时,能映射静态资源(当Spring Web MVC框架

      没有处理请求对应的控制器时(如一些静态资源),转交给默认的Servlet来响应静态文件,否则报404找不到资源错误,)

 

 

14. 文件上传

      页面要求:POST请求;enctype="multipart/form-data":      

      只上传一个文件:

      jsp页面:<input type="file" name="attach"/>

      类:@RequestParam("attachs")MultipartFile attach

      上传多个文件:

       jsp页面:Attach:<input type="file" name="attachs"/><br/>    <input type="file" name="attachs"/><br/>    <input type="file" name="attachs"/><br/> 

       类:

       //在具体添加用户时,是post请求,就访问以下代码

       @RequestMapping(value="/add",method=RequestMethod.POST)

       //一定要紧跟Validate之后写验证结果类

       public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException {

             if(br.hasErrors()) {

                    //如果有错误直接跳转到add视图

                    return "user/add";
             }

             String realpath = req.getSession().getServletContext().getRealPath("/resources/upload");

            System.out.println(realpath);

            for(MultipartFile attach:attachs) {

                    if(attach.isEmpty()) continue;

                    File f = new File(realpath+"/"+attach.getOriginalFilename());

                    FileUtils.copyInputStreamToFile(attach.getInputStream(),f);

             }

             users.put(user.getUsername(), user);

             return "redirect:/user/users";

       }

       @RequestParam("attachs")MultipartFile[] attachs 数组的时候不会自动赋值,不可以使用MultipartFile[] attachs

 

15. 返回json数据

      需要jackson的jar包,url以params="json"中的json结尾:      

      @RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")

      @ResponseBody

      public User show(@PathVariable String username) {

            return users.get(username);

      }

 

Spring MVC 小结

标签:

原文地址:http://www.cnblogs.com/Jtianlin/p/4471671.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!