SpringMVC入门之Annotation篇——2

同样是WebProject,这里用到的是spring-framework-3.1.1.RELEASE

一、首先是Web.xml

 

  1. <?xml version="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

 

  1. <?xml version="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-scan base-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:resources mapping="/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.         <property name="prefix" value="/WEB-INF/jsp/"/>  

  31.         <property name="suffix" value=".jsp"/>  

  32.     </bean>  

  33. </beans>

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

 

  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}

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

 

  1. body{  

  2.     font-size:30px;  

  3. }

五、最后是最为核心的UserController.java

         

  1. package com.jadyer.controller;  

  2. import java.util.Map;  

  3. import javax.servlet.http.HttpServletRequest;  

  4. import javax.servlet.http.HttpServletResponse;  

  5. import javax.servlet.http.HttpSession;  

  6. import org.springframework.stereotype.Controller;  

  7. import org.springframework.ui.Model;  

  8. import org.springframework.web.bind.annotation.RequestMapping;  

  9. import org.springframework.web.bind.annotation.RequestMethod;  

  10. import org.springframework.web.bind.annotation.RequestParam;  

  11. import org.springframework.web.bind.annotation.SessionAttributes;  

  12. import org.springframework.web.servlet.mvc.support.RedirectAttributes;  

  13. import org.springframework.web.servlet.view.InternalResourceViewResolver;  

  14.   

  15. /** 

  16.  * UserController 

  17.  * @author http://blog.csdn.net/jadyer 

  18.  * @create Apr 20, 2012 1:23:29 AM 

  19.  */  

  20. @Controller  //指明这是一个Controller  

  21. @RequestMapping(value="/mydemo"//类似于命名空间,即访问该Controller时必须加上"/mydemo"在前面  

  22. //只要下面的方法中执行model.addAttribute("loginUser","jadyer")那么"loginUser"便被自动放到HttpSession  

  23. @SessionAttributes("loginUser")  

  24. public class UserController {  

  25.     /** 

  26.      * @see 如果在类上指定@RequestMapping并给了值,而在方法上指定@RequestMapping但不给值 

  27.      * @see 这时,以下的两种请求方式,都会被分发到该方法上 

  28.      * @see 第一种:'http://127.0.0.1:8088/SpringMVC_study/mydemo' 

  29.      * @see 第二种:'http://127.0.0.1:8088/SpringMVC_study/mydemo/' 

  30.      * @see 但,如果我们在某个方法上明确指定了@RequestMapping(value="/"),则第二种请求会被分发到该方法上 

  31.      */  

  32.     @RequestMapping  

  33.     public String login(){  

  34.         System.out.println("login() is invoked");  

  35.         return "addSuccess";  

  36.     }  

  37.       

  38.     @RequestMapping(value={"/","/add"}) //即访问"/mydemo/"或者"/mydemo/add",便自动访问该方法  

  39.     public String addUser(){  

  40.         System.out.println("addUser() is invoked");  

  41.         return "addSuccess"//return逻辑视图  

  42.     }  

  43.       

  44.     /** 

  45.      * 简述如何接收前台参数,以及@RequestParam的使用 

  46.      */  

  47.     //这里@RequestParam("userID")表明在访问该方法时,必须传个参数过来,并且参数名必须是int型的userID  

  48.     //以下三种情况会导致服务器返回HTTP Status 400  

  49.     //1)没有传任何参数2)传的参数中没有名为userID的参数3)传了userID参数但其参数值无法转换为int型  

  50.     @RequestMapping(value={"/delete"})  

  51.     public String deleteUser(@RequestParam("userID"int userID){  

  52.         System.out.println("===============" + userID);  

  53.         return "addSuccess";  

  54.     }  

  55.     //这里@RequestParam表明在访问该方法时,至少要把userName参数传过来,否则服务器返回HTTP Status 400  

  56.     @RequestMapping("/edit")  

  57.     public String editUser(@RequestParam String userName){  

  58.         System.out.println("===============" + userName);  

  59.         return "addSuccess";  

  60.     }  

  61.     //这种情况下,无论传不传userName参数,都可以访问到该方法。如果没有传userName,则打印出来的值就是null  

  62.     //这里method=RequestMethod.GET用于指定需要以GET方式访问该方法,注意两个以上属性时就要明确value值了  

  63.     @RequestMapping(value="/modify", method=RequestMethod.GET)  

  64.     public String modifyUser(String userName){  

  65.         System.out.println("===============" + userName);  

  66.         return "addSuccess";  

  67.     }  

  68.       

  69.     /** 

  70.      * 简述如何返回参数给前台,以及前台如何获取参数 

  71.      */  

  72.     @RequestMapping("/sayaaa")  

  73.     public String sayAaa(String userName, Map<String,Object> map){  

  74.         map.put("aaa_name""aaa_jadyer"); //此时前台使用${aaa_name}即可取值  

  75.         return "addSuccess";  

  76.     }  

  77.     @RequestMapping("/saybbb")  

  78.     public String sayBbb(String userName, Model model){  

  79.         model.addAttribute("bbb_name""bbb_jadyer"); //此时前台使用${bbb_name}即可取值  

  80.         model.addAttribute("loginUser","jadyer"); //由于@SessionAttributes,故loginUser会被自动放到HttpSession中  

  81.         return "addSuccess";  

  82.     }  

  83.     @RequestMapping("/sayccc")  

  84.     public String sayCcc(String userName, Model model){  

  85.         model.addAttribute("ccc_jadyer"); //此时默认以Object类型作为key,即String-->string,故前台使用${string}即可取值  

  86.         return "addSuccess";  

  87.     }  

  88.       

  89.     /** 

  90.      * 简述如何获取javax.servlet.http.HttpServletRequest、HttpServletResponse、HttpSession 

  91.      */  

  92.     @RequestMapping("/eat")  

  93.     public String eat(HttpServletRequest request, HttpServletResponse response, HttpSession session){  

  94.         System.out.println("===============" + request.getParameter("myname"));  

  95.         System.out.println("===============" + request.getLocalAddr());  

  96.         System.out.println("===============" + response.getLocale());  

  97.         System.out.println("===============" + session.getId());  

  98.         return "addSuccess";  

  99.     }  

  100.       

  101.     /** 

  102.      * 简述客户端跳转时,传参的传递 

  103.      * @see 注意:这种情况下的参数,并不是放到HttpSession中的,不信你可以试一下 

  104.      * @see 注意:即先访问/mydemo/sleep之后,再直接访问/mydemo/eat 

  105.      */  

  106.     @RequestMapping("/sleep")  

  107.     public String sleep(RedirectAttributes ra){  

  108.         ra.addFlashAttribute("redirectName""redirectValue");  

  109.         //等同于return "redirect:/mydemo/eat"; //两种写法都要写绝对路径,而SpringMVC都会为其自动添加应用上下文  

  110.         return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/mydemo/eat";  

  111.     }  

  112. }

你可能感兴趣的:(springMVC)