spring annotations

转自玄玉博客(http://blog.csdn.net/jadyer/article/details/7574643


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


配置文件如下:

  1. <!-- 启动Spring的组件自动扫描机制。Spring会自动扫描base-package指定的包中的类和子包里面类 -->  
  2.     <context:component-scan base-package="com.jadyer"/>  
  3.       
  4.     <!-- 启动SpringMVC的注解功能,它会自动注册HandlerMapping、HandlerAdapter、ExceptionResolver的相关实例 -->  
  5.     <mvc:annotation-driven/>  
  6.       
  7.     <!-- 由于web.xml中设置是:由SpringMVC拦截所有请求,于是在读取静态资源文件的时候就会受到影响(说白了就是读不到) -->  
  8.     <!-- 经过下面的配置,该标签的作用就是:所有页面中引用"/css/**"的资源,都会从"/resources/styles/"里面进行查找 -->  
  9.     <!-- 我们可以访问http://IP:8080/xxx/css/my.css和http://IP:8080/xxx/resources/styles/my.css对比出来 -->  
  10.     <mvc:resources mapping="/css/**" location="/resources/styles/"/>  
  11.       
  12.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  13.         <!-- viewClass属性可以用来指定前台在解析数据时,所允许采用的手段。实际上其默认值就是JstlView -->  
  14.         <!-- 将来有需要的话,就可以在这里把JstlView改成其它的,如FreeMarkerView,VelocityView,TilesView -->  
  15.         <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->  
  16.   
  17.         <!-- 若Controller的方法返回"user/addSuccess",则SpringMVC自动找/WEB-INF/jsp/user/addSuccess.jsp -->  
  18.         <property name="prefix" value="/WEB-INF/jsp/"/>  
  19.         <property name="suffix" value=".jsp"/>  
  20.     </bean>  
<!-- 启动Spring的组件自动扫描机制。Spring会自动扫描base-package指定的包中的类和子包里面类 -->
	<context:component-scan base-package="com.jadyer"/>
	
	<!-- 启动SpringMVC的注解功能,它会自动注册HandlerMapping、HandlerAdapter、ExceptionResolver的相关实例 -->
	<mvc:annotation-driven/>
	
	<!-- 由于web.xml中设置是:由SpringMVC拦截所有请求,于是在读取静态资源文件的时候就会受到影响(说白了就是读不到) -->
	<!-- 经过下面的配置,该标签的作用就是:所有页面中引用"/css/**"的资源,都会从"/resources/styles/"里面进行查找 -->
	<!-- 我们可以访问http://IP:8080/xxx/css/my.css和http://IP:8080/xxx/resources/styles/my.css对比出来 -->
	<mvc:resources mapping="/css/**" location="/resources/styles/"/>
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- viewClass属性可以用来指定前台在解析数据时,所允许采用的手段。实际上其默认值就是JstlView -->
		<!-- 将来有需要的话,就可以在这里把JstlView改成其它的,如FreeMarkerView,VelocityView,TilesView -->
		<!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->

		<!-- 若Controller的方法返回"user/addSuccess",则SpringMVC自动找/WEB-INF/jsp/user/addSuccess.jsp -->
		<property name="prefix" value="/WEB-INF/jsp/"/>
		<property name="suffix" value=".jsp"/>
	</bean>

  1. <servlet>  
  2.         <servlet-name>jadyer</servlet-name>  
  3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.         <load-on-startup>1</load-on-startup>  
  5.     </servlet>  
  6.     <servlet-mapping>  
  7.         <servlet-name>jadyer</servlet-name>  
  8.         <url-pattern>/</url-pattern>  
  9.     </servlet-mapping>  
<servlet>
		<servlet-name>jadyer</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>jadyer</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
注意配置文件的写法是有规定的,为jadyer-servlet.xml.

  1. body{  
  2.     font-size:30px;  
  3. }  
body{
	font-size:30px;
}

  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:when test="${aaa_name=='aaa_jadyer'}">  
  10.         From:/mydemo/sayaaa  
  11.     </c:when>  
  12.     <c:when test="${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}  
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/my.css">

welcome: ${aaa_name}、${bbb_name}、${string}
<br/>
<c:choose>
	<c:when test="${aaa_name=='aaa_jadyer'}">
		From:/mydemo/sayaaa
	</c:when>
	<c:when test="${bbb_name=='bbb_jadyer'}">
		From:/mydemo/saybbb${sessionScope.loginUser}
	</c:when>
	<c:otherwise>
		From:others
	</c:otherwise>
</c:choose>
<br/>
${redirectName}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值