标签:
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); }
标签:
原文地址:http://www.cnblogs.com/Jtianlin/p/4471671.html