SpringMVC入门之Annotation篇

来源:互联网 发布:linux查看80端口被占用 编辑:程序博客网 时间:2024/05/20 23:36

转自:http://blog.csdn.net/jadyer/article/details/7574643

 

首先是Web.xml

[html] view plaincopyprint?
  1. <?xmlversion="1.0"encoding="UTF-8"?> 
  2. <web-app version="2.5" 
  3.     xmlns="http://java.sun.com/xml/ns/javaee" 
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  6.                         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
  7.     <servlet> 
  8.         <servlet-name>jadyer</servlet-name> 
  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  10.         <load-on-startup>1</load-on-startup> 
  11.     </servlet> 
  12.     <servlet-mapping> 
  13.         <servlet-name>jadyer</servlet-name> 
  14.         <url-pattern>/</url-pattern> 
  15.     </servlet-mapping> 
  16. </web-app> 


然后是SpringMVC的配置文件jadyer-servlet.xml

[html] view plaincopyprint?
  1. <?xmlversion="1.0"encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc" 
  5.     xmlns:context="http://www.springframework.org/schema/context" 
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  8.                         http://www.springframework.org/schema/mvc 
  9.                         http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
  10.                         http://www.springframework.org/schema/context  
  11.                         http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
  12.     <!-- 启动Spring的组件自动扫描机制。Spring会自动扫描base-package指定的包中的类和子包里面类 --> 
  13.     <!-- 此处可参考我的文章http://blog.csdn.net/jadyer/article/details/6038604 --> 
  14.     <context:component-scanbase-package="com.jadyer"/> 
  15.      
  16.     <!-- 启动SpringMVC的注解功能,它会自动注册HandlerMapping、HandlerAdapter、ExceptionResolver的相关实例 --> 
  17.     <mvc:annotation-driven/> 
  18.      
  19.     <!-- 由于web.xml中设置是:由SpringMVC拦截所有请求,于是在读取静态资源文件的时候就会受到影响(说白了就是读不到) --> 
  20.     <!-- 经过下面的配置,该标签的作用就是:所有页面中引用"/css/**"的资源,都会从"/resources/styles/"里面进行查找 --> 
  21.     <!-- 我们可以访问http://IP:8080/xxx/css/my.css和http://IP:8080/xxx/resources/styles/my.css对比出来 --> 
  22.     <mvc:resourcesmapping="/css/**"location="/resources/styles/"/> 
  23.      
  24.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  25.         <!-- viewClass属性可以用来指定前台在解析数据时,所允许采用的手段。实际上其默认值就是JstlView --> 
  26.         <!-- 将来有需要的话,就可以在这里把JstlView改成其它的,如FreeMarkerView,VelocityView,TilesView --> 
  27.         <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> --> 
  28.  
  29.         <!-- 若Controller的方法返回"user/addSuccess",则SpringMVC自动找/WEB-INF/jsp/user/addSuccess.jsp --> 
  30.         <propertyname="prefix"value="/WEB-INF/jsp/"/> 
  31.         <propertyname="suffix"value=".jsp"/> 
  32.     </bean> 
  33. </beans> 


接下来是用于响应请求结果的//WEB-INF//jsp//addSuccess.jsp

[html] view plaincopyprint?
  1. <%@ page language="java"pageEncoding="UTF-8"%> 
  2. <%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core"%> 
  3.  
  4. <link rel="stylesheet"type="text/css"href="<%=request.getContextPath()%>/css/my.css"> 
  5.  
  6. welcome: ${aaa_name}、${bbb_name}、${string} 
  7. <br/> 
  8. <c:choose> 
  9.     <c:whentest="${aaa_name=='aaa_jadyer'}"> 
  10.         From:/mydemo/sayaaa 
  11.     </c:when> 
  12.     <c:whentest="${bbb_name=='bbb_jadyer'}"> 
  13.         From:/mydemo/saybbb${sessionScope.loginUser} 
  14.     </c:when> 
  15.     <c:otherwise> 
  16.         From:others 
  17.     </c:otherwise> 
  18. </c:choose> 
  19. <br/> 
  20. ${redirectName} 


这是我们的样式文件//resources//styles//my.css

[java] view plaincopyprint?
  1. body{ 
  2.     font-size:30px; 


最后是最为核心的UserController.java

[java] view plaincopyprint?
  1. package com.jadyer.controller; 
  2.  
  3. import java.util.Map; 
  4.  
  5. import javax.servlet.http.HttpServletRequest; 
  6. import javax.servlet.http.HttpServletResponse; 
  7. import javax.servlet.http.HttpSession; 
  8.  
  9. import org.springframework.stereotype.Controller; 
  10. import org.springframework.ui.Model; 
  11. import org.springframework.web.bind.annotation.RequestMapping; 
  12. import org.springframework.web.bind.annotation.RequestMethod; 
  13. import org.springframework.web.bind.annotation.RequestParam; 
  14. import org.springframework.web.bind.annotation.SessionAttributes; 
  15. import org.springframework.web.servlet.mvc.support.RedirectAttributes; 
  16. import org.springframework.web.servlet.view.InternalResourceViewResolver; 
  17.  
  18. /**
  19. * UserController
  20. * @author http://blog.csdn.net/jadyer
  21. * @create Apr 20, 2012 1:23:29 AM
  22. */ 
  23. @Controller //指明这是一个Controller 
  24. @RequestMapping(value="/mydemo")//类似于命名空间,即访问该Controller时必须加上"/mydemo"在前面 
  25. //只要下面的方法中执行model.addAttribute("loginUser","jadyer")那么"loginUser"便被自动放到HttpSession 
  26. @SessionAttributes("loginUser"
  27. public class UserController { 
  28.     /**
  29.      * @see 如果在类上指定@RequestMapping并给了值,而在方法上指定@RequestMapping但不给值
  30.      * @see 这时,以下的两种请求方式,都会被分发到该方法上
  31.      * @see 第一种:'http://127.0.0.1:8088/SpringMVC_study/mydemo'
  32.      * @see 第二种:'http://127.0.0.1:8088/SpringMVC_study/mydemo/'
  33.      * @see 但,如果我们在某个方法上明确指定了@RequestMapping(value="/"),则第二种请求会被分发到该方法上
  34.      */ 
  35.     @RequestMapping 
  36.     public String login(){ 
  37.         System.out.println("login() is invoked"); 
  38.         return "addSuccess"
  39.     } 
  40.      
  41.     @RequestMapping(value={"/","/add"})//即访问"/mydemo/"或者"/mydemo/add",便自动访问该方法 
  42.     public String addUser(){ 
  43.         System.out.println("addUser() is invoked"); 
  44.         return "addSuccess";//return逻辑视图 
  45.     } 
  46.      
  47.     /**
  48.      * 简述如何接收前台参数,以及@RequestParam的使用
  49.      */ 
  50.     //这里@RequestParam("userID")表明在访问该方法时,必须传个参数过来,并且参数名必须是int型的userID 
  51.     //以下三种情况会导致服务器返回HTTP Status 400 
  52.     //1)没有传任何参数2)传的参数中没有名为userID的参数3)传了userID参数但其参数值无法转换为int型 
  53.     @RequestMapping(value={"/delete"}) 
  54.     public String deleteUser(@RequestParam("userID")int userID){ 
  55.         System.out.println("===============" + userID); 
  56.         return "addSuccess"
  57.     } 
  58.     //这里@RequestParam表明在访问该方法时,至少要把userName参数传过来,否则服务器返回HTTP Status 400 
  59.     @RequestMapping("/edit"
  60.     public String editUser(@RequestParam String userName){ 
  61.         System.out.println("===============" + userName); 
  62.         return "addSuccess"
  63.     } 
  64.     //这种情况下,无论传不传userName参数,都可以访问到该方法。如果没有传userName,则打印出来的值就是null 
  65.     //这里method=RequestMethod.GET用于指定需要以GET方式访问该方法,注意两个以上属性时就要明确value值了 
  66.     @RequestMapping(value="/modify", method=RequestMethod.GET) 
  67.     public String modifyUser(String userName){ 
  68.         System.out.println("===============" + userName); 
  69.         return "addSuccess"
  70.     } 
  71.      
  72.     /**
  73.      * 简述如何返回参数给前台,以及前台如何获取参数
  74.      */ 
  75.     @RequestMapping("/sayaaa"
  76.     public String sayAaa(String userName, Map<String,Object> map){ 
  77.         map.put("aaa_name","aaa_jadyer");//此时前台使用${aaa_name}即可取值 
  78.         return "addSuccess"
  79.     } 
  80.     @RequestMapping("/saybbb"
  81.     public String sayBbb(String userName, Model model){ 
  82.         model.addAttribute("bbb_name","bbb_jadyer");//此时前台使用${bbb_name}即可取值 
  83.         model.addAttribute("loginUser","jadyer");//由于@SessionAttributes,故loginUser会被自动放到HttpSession中 
  84.         return "addSuccess"
  85.     } 
  86.     @RequestMapping("/sayccc"
  87.     public String sayCcc(String userName, Model model){ 
  88.         model.addAttribute("ccc_jadyer");//此时默认以Object类型作为key,即String-->string,故前台使用${string}即可取值 
  89.         return "addSuccess"
  90.     } 
  91.      
  92.     /**
  93.      * 简述如何获取javax.servlet.http.HttpServletRequest、HttpServletResponse、HttpSession
  94.      */ 
  95.     @RequestMapping("/eat"
  96.     public String eat(HttpServletRequest request, HttpServletResponse response, HttpSession session){ 
  97.         System.out.println("===============" + request.getParameter("myname")); 
  98.         System.out.println("===============" + request.getLocalAddr()); 
  99.         System.out.println("===============" + response.getLocale()); 
  100.         System.out.println("===============" + session.getId()); 
  101.         return "addSuccess"
  102.     } 
  103.      
  104.     /**
  105.      * 简述客户端跳转时,传参的传递
  106.      * @see 注意:这种情况下的参数,并不是放到HttpSession中的,不信你可以试一下
  107.      * @see 注意:即先访问/mydemo/sleep之后,再直接访问/mydemo/eat
  108.      */ 
  109.     @RequestMapping("/sleep"
  110.     public String sleep(RedirectAttributes ra){ 
  111.         ra.addFlashAttribute("redirectName","redirectValue"); 
  112.         //等同于return "redirect:/mydemo/eat"; //两种写法都要写绝对路径,而SpringMVC都会为其自动添加应用上下文 
  113.         return InternalResourceViewResolver.REDIRECT_URL_PREFIX +"/mydemo/eat"
  114.     } 

 

原创粉丝点击