注解驱动的spring mvc(二)

四:视图名的确定。

spring mvc可以通过可以通过多种方式确定视图名,在前面的例子中,方法无返回值,视图名更具请求参数确定。Controller方法还是返回一个String类型的值作为视图名。

Java代码 注解驱动的spring mvc(二) - Fiona - Fiona的博客

  1. @RequestMapping("/user/list.htm")   
  2. public String listAllUser(){   
  3.     return "user/list-user";   
  4. }  

@RequestMapping("/user/list.htm")public String listAllUser(){ return "user/list-user";}

那么该例子的视图文件就为/WEB-INF/jsp/user/list-user.jsp

五:视图模型参数的传递。

在spring mvc中可以通过ModelMap对象传递模型参数到视图进行处理。在Controller方法中声明一个ModelMap参数,spring会创建一个ModelMap对象,并传入方法,方法处理完成后自动传递到视图进行处理。

Java代码 注解驱动的spring mvc(二) - Fiona - Fiona的博客

  1. @RequestMapping("/user/list.htm")   
  2. public String listAllUser(ModelMap model){   
  3.     List<User> users = new ArrayList<User>();   
  4.     User user = new User();   
  5.     user.setPassword("user1");   
  6.     user.setPassword("pwd");   
  7.     user.setAge(20);   
  8.     users.add(user);   
  9.        
  10.     user = new User();   
  11.     user.setPassword("user2");   
  12.     user.setPassword("pwd2");   
  13.     user.setAge(22);   
  14.     users.add(user);   
  15.        
  16.     model.addAttribute("users", users);   
  17.     return "user/list-user";   
  18. }  

@RequestMapping("/user/list.htm") public String listAllUser(ModelMap model){ List<User> users = new ArrayList<User>(); User user = new User(); user.setPassword("user1"); user.setPassword("pwd"); user.setAge(20); users.add(user); user = new User(); user.setPassword("user2"); user.setPassword("pwd2"); user.setAge(22); users.add(user); model.addAttribute("users", users); return "user/list-user"; }

model中的参数默认是添加在request作用域中的,该例中视图可以通过request.getAttribute("users")获得user列表。在视图中使用jstl输出

Xml代码 注解驱动的spring mvc(二) - Fiona - Fiona的博客

  1. <c:forEach var="user" items="${requestScope.users}">  
  2.     ${user.username }   
  3.     ${user.password }   
  4.     ${user.age }   
  5. </c:forEach>  

<c:forEach var="user" items="${requestScope.users}"> ${user.username } ${user.password } ${user.age }</c:forEach>

还可以通过在Controller方法返回一个ModelMap对象,这种情况下,视图名由请求Url确定。

Java代码 注解驱动的spring mvc(二) - Fiona - Fiona的博客

  1. @RequestMapping("/user/list-user.htm")   
  2. public ModelMap listAllUser() {   
  3.     List<User> users = new ArrayList<User>();   
  4.     //.........   
  5.     ModelMap model = new ModelMap();   
  6.     model.addAttribute("users", users);   
  7.     return model;   
  8. }  

@RequestMapping("/user/list-user.htm") public ModelMap listAllUser() { List<User> users = new ArrayList<User>(); //......... ModelMap model = new ModelMap(); model.addAttribute("users", users); return model; }

另外可以通过在Controller上添加@SessionAttributes注解指定某个model参数为session作用域的

六:特殊输入参数

spring mvc还可以往Controller方法传入request,session等特殊的参数。

Java代码 注解驱动的spring mvc(二) - Fiona - Fiona的博客

  1. @Controller  
  2. public class RequestController {   
  3.   
  4.     @RequestMapping("/handleRequest.htm")   
  5.     public void handleRequest(HttpServletRequest request,   
  6.             HttpServletResponse response, HttpSession session)   
  7.             throws IOException {   
  8.         String param = (String) request.getParameter("param");   
  9.         if (param != null) {   
  10.             session.setAttribute("param", param);   
  11.         }   
  12.         PrintWriter out = response.getWriter();   
  13.         out.println("<h1>" + session.getAttribute("param") + "</h1>");   
  14.         out.flush();   
  15.         out.close();   
  16.     }   
  17. }  

@Controllerpublic class RequestController { @RequestMapping("/handleRequest.htm") public void handleRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException { String param = (String) request.getParameter("param"); if (param != null) { session.setAttribute("param", param); } PrintWriter out = response.getWriter(); out.println("<h1>" + session.getAttribute("param") + "</h1>"); out.flush(); out.close(); }}

 如果在Controller方法中直接使用了response输入,方法应该返回void,不再使用视图。

七:处理文件上传

在前面的例子中配置了multipartResolver bean。该bean对http请求中的mutipart form data进行处理。spring mvc默认支持common fileupload 和 cos 所以需要把相应的jar包放入lib中。

Java代码 注解驱动的spring mvc(二) - Fiona - Fiona的博客

  1. @Controller  
  2. public class FileUploadController {   
  3.     @RequestMapping("/fileupload.htm")   
  4.     public void upload(MultipartHttpServletRequest request,   
  5.             HttpServletResponse response) throws IOException {   
  6.         MultipartFile file = request.getFile("file");   
  7.         byte[] buffer = new byte[1024];   
  8.         int len = -1;   
  9.         InputStream in = file.getInputStream();   
  10.         String contextPath = request.getRealPath("/");   
  11.         String path = contextPath + "\\" + file.getOriginalFilename();   
  12.         OutputStream out = new FileOutputStream(path);   
  13.         while ((len = in.read(buffer)) != -1) {   
  14.             out.write(buffer, 0, len);   
  15.         }   
  16.         in.close();   
  17.         out.close();   
  18.         response.getWriter().println("Upload Success!");   
  19.     }   
  20. }  

@Controllerpublic class FileUploadController { @RequestMapping("/fileupload.htm") public void upload(MultipartHttpServletRequest request, HttpServletResponse response) throws IOException { MultipartFile file = request.getFile("file"); byte[] buffer = new byte[1024]; int len = -1; InputStream in = file.getInputStream(); String contextPath = request.getRealPath("/"); String path = contextPath + "\\" + file.getOriginalFilename(); OutputStream out = new FileOutputStream(path); while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); out.close(); response.getWriter().println("Upload Success!"); }}

 MultipartHttpServletRequest可以获得多个上传文件,同时可以获得传入的其他Http参数。

八:异常处理

Xml代码 注解驱动的spring mvc(二) - Fiona - Fiona的博客

  1. <bean id="exceptionResolver"     
  2.  class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">     
  3.       <property name="defaultErrorView">     
  4.           <value>/exception/error</value>     
  5.       </property>     
  6.       <property name="exceptionMappings">     
  7.           <props>     
  8.               <prop key="java.sql.SQLException">     
  9.                  /exception/dberror     
  10.              </prop>     
  11.          </props>     
  12.      </property>     
  13. </bean>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值