zoukankan      html  css  js  c++  java
  • SpringMVC教程/实例(一):java SpringMVC之入门配置篇

    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

    直接上例子吧,这是一个WebProject
    首先是Web.xml

    www.ishang123.com   复制内容到剪贴板折叠XML/HTML 代码
    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.     <!-- 使用ContextLoaderListener配置时,需要告诉它Spring配置文件的位置 -->  
    8.     <!-- 如果没有指定,上下文载入器会在/WEB-INF/applicationContext.xml中找Spring配置文件 -->  
    9.     <!-- 我们可以通过在Servlet上下文中设置contextConfigLocation参数,来为上下文载入器指定一个或多个Spring配置文件 -->  
    10.     <!-- 注意:contextConfigLocation参数是一个用逗号分隔的路径列表,其路径是相对于Web系统的根路径的 -->  
    11.     <context-param>  
    12.         <param-name>contextConfigLocation</param-name>  
    13.         <param-value>/WEB-INF/springmvc-servlet.xml, classpath:applicationContext-*.xml</param-value>  
    14.     </context-param>  
    15.        
    16.     <!-- SpringMVC的前端控制器 -->  
    17.     <!-- 当DispatcherServlet载入后,它将从一个XML文件中载入Spring的应用上下文,该XML文件的名字取决于<servlet-name> -->  
    18.     <!-- 这里DispatcherServlet将试图从一个叫做springmvc-servlet.xml的文件中载入应用上下文,其默认位于WEB-INF目录下 -->  
    19.     <!-- 所以ContextLoaderListener参数值也可写成<param-value>classpath:applicationContext-*.xml</param-value> -->  
    20.     <servlet>  
    21.         <servlet-name>springmvc</servlet-name>  
    22.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    23.         <load-on-startup>1</load-on-startup>  
    24.     </servlet>  
    25.     <servlet-mapping>  
    26.         <servlet-name>springmvc</servlet-name>  
    27.         <url-pattern>*.htm</url-pattern>  
    28.     </servlet-mapping>  
    29.        
    30.     <!-- 配置上下文载入器 -->  
    31.     <!-- 上下文载入器载入除DispatcherServlet载入的配置文件之外的其它上下文配置文件 -->  
    32.     <!-- 最常用的上下文载入器是一个Servlet监听器,其名称为ContextLoaderListener -->  
    33.     <listener>  
    34.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    35.     </listener>  
    36.        
    37.     <welcome-file-list>  
    38.         <welcome-file>index.jsp</welcome-file>  
    39.     </welcome-file-list>  
    40. </web-app>  

    接下来是SpringMVC的配置文件springmvc-servlet.xml

    www.ishang123.com   复制内容到剪贴板折叠XML/HTML 代码
    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:tx="http://www.springframework.org/schema/tx"  
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
    6.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
    7.     http://www.springframework.org/schema/tx      
    8.     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
    9.        
    10.     <!-- 【配置映射处理器】 -->  
    11.     <!-- SpringMVC自带的映射处理器均实现了Spring的Ordered接口,这意味着我们可以在应用系统中声明多个处理器映射 -->  
    12.     <!-- 并且可以设置它们的优先级,这主要体现在order属性上,其值越小,则对应的该映射处理器的优先级越高 -->  
    13.     <!-- 本例中,SimpleUrlHandlerMapping的order值比BeanNameUrlHandlerMapping的小 -->  
    14.     <!-- 这意味着DispatcherServlet在映射URL的时候,首先会咨询SimpleUrlHandlerMapping -->  
    15.     <!-- 只有在SimpleUrlHandlerMapping无法返回结果时,才咨询BeanNameUrlHandlerMapping -->  
    16.     <bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">  
    17.         <property name="order" value="1"/>  
    18.     </bean>  
    19.     <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
    20.         <property name="order" value="0"/>  
    21.         <property name="mappings">  
    22.             <props>  
    23.                 <prop key="/userlist22.htm">userController</prop>  
    24.                 <prop key="/userlist33.htm">userController</prop>  
    25.             </props>  
    26.         </property>  
    27.     </bean>  
    28.   
    29.     <!-- 这里的id="userController"对应的是<bean id="simpleUrlMapping">中的<prop>里面的value -->  
    30.     <bean id="userController" class="com.jadyer.controller.UserController"/>  
    31.        
    32.     <!-- DispatcherServlet使用的默认处理器映射是BeanNameUrlHandlerMapping,它使用URL样式的名字 -->  
    33.     <bean name="/userlist11.htm" class="com.jadyer.controller.UserController"/>  
    34. </beans>  

    然后是我们常见的Spring配置文件applicationContext-view.xml

    www.ishang123.com   复制内容到剪贴板折叠XML/HTML 代码
    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:tx="http://www.springframework.org/schema/tx"  
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
    6.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
    7.     http://www.springframework.org/schema/tx      
    8.     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
    9.        
    10.     <!-- 【配置视图解析器】 -->  
    11.     <!-- InternalResourceViewResolver会在ModelAndView返回的视图名前加上prefix指定的前缀,再在最后加上suffix指定的后缀 -->  
    12.     <!-- 由于UserController返回的ModelAndView中的视图名是userlist,故该视图解析器将在/WEB-INF/jsp/userlist.jsp处查找视图 -->  
    13.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    14.         <property name="prefix" value="/WEB-INF/jsp/"/>  
    15.         <property name="suffix" value=".jsp"/>  
    16.     </bean>  
    17. </beans>  

    接下来是首页index.jsp

    www.ishang123.com   复制内容到剪贴板折叠XML/HTML 代码
    1. <%@ page language="java" pageEncoding="UTF-8"%>  
    2. <a href="<%=request.getContextPath()%>/userlist11.htm">Visit "/userlist11.htm" to my SpringMVC demo page</a>  
    3. <br/>  
    4. <br/>  
    5. <a href="<%=request.getContextPath()%>/userlist22.htm">Visit "/userlist22.htm" to my SpringMVC demo page</a>  
    6. <br/>  
    7. <br/>  
    8. <a href="<%=request.getContextPath()%>/userlist33.htm">Visit "/userlist33.htm" to my SpringMVC demo page</a>  


    下面是响应请求结果的userlist.jsp

    www.ishang123.com   复制内容到剪贴板折叠XML/HTML 代码
    1. <%@ page language="java" pageEncoding="UTF-8"%>  
    2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
    3. <h2>Welcome to my SpringMVC demo page</h2>  
    4. <c:forEach items="${users}" var="user">  
    5.     <c:out value="${user.username}"/><br/>  
    6.     <c:out value="${user.password}"/><br/>  
    7.     <c:out value="${user.address}"/><br/>  
    8.     <c:out value="${user.age}"/><br/>  
    9. </c:forEach>  
    10.   
    11. <!--   
    12. 以下是,处理对"/userlist.htm"的请求的整个工作步骤   
    13. 1、DispatcherServlet接受对"/userlist.htm"样式的URL请求   
    14. 2、DispatcherServlet询问BeanNameUrlHandlerMapping   
    15.   询问Bean的名字是"/userlist.htm"的控制器,并且找到了UserController的Bean   
    16. 3、DispatcherServlet分发给UserController来处理这个请求   
    17. 4、UserController返回一个ModelAndView对象,它带有一个逻辑视图名"userlist",以及保存在"users"属性中的值   
    18. 5、DispatcherServlet询问它的视图解析器(配置为InternalResourceViewResolver)   
    19.   查找逻辑名为userlist的视图,InternalResourceViewResolver返回/WEB-INF/jsp/userlist.jsp路径   
    20. 6、DispatcherServlet将请求导向/WEB-INF/jsp/userlist.jsp页面   
    21. -->  

    这是用到的User.java

    www.ishang123.com   复制内容到剪贴板折叠Java 代码
    1. package com.jadyer.model;   
    2.   
    3. /**  
    4.  * User  
    5.  * @author 宏宇  
    6.  * @editor Jan 27, 2012 11:41:15 AM  
    7.  */  
    8. public class User {   
    9.     private String username;   
    10.     private String password;   
    11.     private String address;   
    12.     private Integer age;   
    13.        
    14.     public String getUsername() {   
    15.         return username;   
    16.     }   
    17.     public void setUsername(String username) {   
    18.         this.username = username;   
    19.     }   
    20.     public String getPassword() {   
    21.         return password;   
    22.     }   
    23.     public void setPassword(String password) {   
    24.         this.password = password;   
    25.     }   
    26.     public String getAddress() {   
    27.         return address;   
    28.     }   
    29.     public void setAddress(String address) {   
    30.         this.address = address;   
    31.     }   
    32.     public Integer getAge() {   
    33.         return age;   
    34.     }   
    35.     public void setAge(Integer age) {   
    36.         this.age = age;   
    37.     }   
    38. }  

    最后是SpringMVC的核心控制器UserController.java

    www.ishang123.com   复制内容到剪贴板折叠Java 代码
    1. package com.jadyer.controller;   
    2.   
    3. import java.util.ArrayList;   
    4. import java.util.List;   
    5.   
    6. import javax.servlet.http.HttpServletRequest;   
    7. import javax.servlet.http.HttpServletResponse;   
    8.   
    9. import org.springframework.web.servlet.ModelAndView;   
    10. import org.springframework.web.servlet.mvc.AbstractController;   
    11.   
    12. import com.jadyer.model.User;   
    13.   
    14. /**  
    15.  * UserController  
    16.  * @author 宏宇  
    17.  * @editor Jan 27, 2012 11:57:33 AM  
    18.  */  
    19. public class UserController extends AbstractController {   
    20.     @Override  
    21.     protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {   
    22.         List<User> userList = new ArrayList<User>();   
    23.         User user11 = new User();   
    24.         User user22 = new User();   
    25.         user11.setUsername("张起灵");   
    26.         user11.setPassword("02200059");   
    27.         user11.setAddress("阴山古楼");   
    28.         user11.setAge(27);   
    29.         user22.setUsername("吴三省");   
    30.         user22.setPassword("95000220");   
    31.         user22.setAddress("蛇沼鬼城");   
    32.         user22.setAge(37);   
    33.         userList.add(user11);   
    34.         userList.add(user22);   
    35.         //ModelAndView类在SpringMVC中是一个很重要的概念   
    36.         //控制器执行方法都必须返回一个ModelAndView,ModelAndView对象保存了视图以及视图显示的模型数据   
    37.         //第一个参数:视图组件的逻辑名称。这里视图的逻辑名称是userlist,视图解析器会使用该名称查找实际的View对象   
    38.         //第二个参数:传递给视图的,模型对象的名称   
    39.         //第三个参数:传递给视图的,模型对象的值   
    40.         return new ModelAndView("userlist""users", userList);   
    41.     }   
  • 相关阅读:
    Jboss
    AOP
    Spring AOP原理及拦截器
    深度解析Struts2中ValueStack
    struts2 ValueStack的作用
    理解ValueStack的基本机制
    Strus2中关于ValueStack详解
    struts2中的值栈对象ValueStack
    吴裕雄--天生自然Numpy库学习笔记:NumPy 广播(Broadcast)
    吴裕雄--天生自然Numpy库学习笔记:NumPy 高级索引
  • 原文地址:https://www.cnblogs.com/hechunhua/p/3071436.html
Copyright © 2011-2022 走看看