Spring MVC 框架搭建及详解
- 格式:docx
- 大小:30.42 KB
- 文档页数:12
spring mvc 框架介绍
Spring MVC 简介
Spring MVC 框架是有一个MVC 框架,通过实现Model-View- Controller 模式来很好地将数据、业务与展现进行分离。
从这样一个角度来
说,Spring MVC 和Struts、Struts2 非常类似。
Spring MVC 的设计是围绕DispatcherServlet 展开的,DispatcherServlet 负责将请求派发到特定的handler。
通过可配置的handler mappings、view resoluTIon、locale 以及theme resoluTIon 来处理请求并且转到对应的视图。
Spring MVC 请求处理的整体流
程如图:
Spring3.x 中定义一个控制器类,必须以@Controller 注解标记。
当控
制器类接收到一个请求时,它会在自己内部寻找一个合适的处理方法来处理
请求。
使用@RequestMapping 注解将方法映射到一些请求上,以便让该方法
处理那些请求。
这种方法就像一般的类中的方法,方法名参数列表和返回值
并不像Struts2 之类的框架有很强的限制。
方法参数列表具体以及返回值具体
都有哪些,这里先不细说。
这篇博客的目的在于简单介绍如何快速上手使用Spring MVC 框架。
SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。
另外spring的aop,事务管理等等都是我们经常⽤到的。
Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。
mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。
mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。
在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。
使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。
spring MVC原理及配置springmvc原理及配置springmvc原理及配置1.springmvc详述:springmvc就是spring提供更多的一个强悍而有效率的web框架。
借助注释,springmvc提供更多了几乎就是pojo的研发模式,使控制器的研发和测试更加直观。
这些控制器通常不轻易处置命令,而是将其委托给spring上下文中的其他bean,通过spring的倚赖转化成功能,这些bean被转化成至控制器中。
springmvc主要由dispatcherservlet、处理器映射、处理器(控制器)、视图解析器、视图组成。
他的两个核心是两个核心:处理器映射:选择使用哪个控制器来处理请求视图解析器:选择结果应该如何渲染通过以上两点,springmvc确保了如何挑选掌控处置命令和如何挑选视图展现出输入之间的松耦合。
2.springmvc运行原理这里写图片描述(2)找寻处理器:由dispatcherservlet控制器查阅一个或多个handlermapping,找出处置命令的controller。
(3)调用处理器:dispatcherservlet将请求提交到controller。
(4)(5)调用业务处置和回到结果:controller调用业务逻辑处置后,回到modelandview。
3.springmvc接口解释(1)dispatcherservlet接口:spring提供的前端控制器,所有的请求都有经过它来统一分发。
在dispatcherservlet将请求分发给springcontroller 之前,需要借助于spring提供的handlermapping定位到具体的controller。
(2)handlermappingUSB:能够完成客户请求到controller映射。
(3)controller接口:须要为mammalian用户处置上述命令,因此同时实现controllerUSB时,必须确保线程安全并且可以器重。
spring mvc学习教程(一)-入门实例引言1.MVC:Model-View-Control框架性质的C层要完成的主要工作:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。
2.简要概述springmvcSpring C 层框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。
Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。
并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。
一、入门实例1. 搭建环境在spring的官方API文档中,给出所有包的作用概述,现列举常用的包及相关作用:org.springframework.aop-3.0.5.RELEASE.jar:与Aop编程相关的包org.springframework.beans-3.0.5.RELEASE.jar:提供了简捷操作bean的接口org.springframework.context-3.0.5.RELEASE.jar:构建在beans包基础上,用来处理资源文件及国际化。
org.springframework.core-3.0.5.RELEASE.jar:spring核心包org.springframework.web-3.0.5.RELEASE.jar:web核心包,提供了web层接口org.springframework.web.servlet-3.0.5.RELEASE.jar:web 层的一个具体实包,DispatcherServlet也位于此包中。
后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。
SpringMVC框架搭建说明Spring4.1.4 + hibernate4.3.81、web.xml配置程序运行时从web.xml开始,加载顺序为:context-param -> listener -> filter ->structs (如果使用structs的话)-> servlet如下为web.xml的配置说明<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><!—-显示项目名称--><display-name>bmymis2</display-name><!-- 指定配置文件位置,contextConfigLocation是ContextLoaderListener中的一个参数,通过该参数在ContextLoaderListener中加载applicationContext-*.xml,并装配ApplicationContext --> <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-*.xml</param-value></context-param><!-- 定义SPRING监听器,启动Web容器时,自动装配ApplicationContext的配置信息--><listener><listener-class>org.springframework.web.context.ContextLoaderListener </listener-class></listener><!—-字符编码过滤器,解决中文乱码问题--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><!—- springmvc配置--><servlet><servlet-name>springServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup> //容器启动时首先初始化该servlet </servlet><servlet-mapping><servlet-name>springServlet</servlet-name><url-pattern>/</url-pattern> //表示所有页面都由springmvc处理</servlet-mapping><!—-浏览器输入到项目名,默认打开如下配置页面--><welcome-file-list><welcome-file>/web/login.jsp</welcome-file></welcome-file-list><!—-错误跳转页面--><error-page><error-code>404</error-code><location>/404.html</location></error-page></web-app>2、applicationContext-common.xml配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:context="/schema/context"xmlns:xsi="/2001/XMLSchema-instance"xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.0.xsd/schema/context/schema/context/spring-context-4.0.xsd/schema/aop/schema/aop/spring-aop-4.0.xsd/schema/tx/schema/tx/spring-tx-4.0.xsd"><!-- 加载资源文件其中包含变量信息,必须在Spring配置文件的最前面加载,即第一个加载--><context:property-placeholder location="classpath:application.properties"/><!—-扫描包路径选项,使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入,有了该配置,那么<context:annotation-config/>这个配置就可以省略(以下配置包含了<context:annotation-config/>配置)--><context:component-scan base-package="xxx.xxx.xxx"/><!-- 数据源配置,使用应用内的DBCP数据库连接池 --><bean id="dataSource" class="mons.dbcp.BasicDataSource"destroy-method="close"><!-- 定义数据库连接池数据源bean destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用--><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${ername}"/><property name="password" value="${jdbc.password}"/></bean><!—Hibernate的注解配置 --><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="hibernateProperties"><props><prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.show_sql">${hibernate.show_sql}</prop></props></property><property name="packagesToScan" value="xxx.xxx.xxx.model" /></bean><!-- 配置Hibernate事务管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/></bean><!-- 配置事务异常封装 --><bean id="persistenceExceptionTranslationPostProcessor"class="org.springframework.dao.annotation.PersistenceExceptionTranslationPost Processor"/><!-- 声明式容器事务管理 ,transaction-manager指定事务管理器为transactionManager --> <tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED"/><tx:method name="get*" propagation="REQUIRED"/><tx:method name="*" read-only="true"/></tx:attributes></tx:advice><aop:config expose-proxy="true"><!-- 只对业务逻辑层实施事务 --><aop:pointcut id="txPointcut"expression="execution(*xxx.xxx.xxx.service..*.*(..))"/><!-- Advisor定义,切入点和通知分别为txPointcut、txAdvice --><aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/> </aop:config></beans>3、application.properties配置jdbc.driverClassName=org.postgresql.Driverjdbc.url=jdbc:postgresql://ip:5432/数据库名ername=postgresjdbc.password=123hibernate.dialect=org.hibernate.dialect.PostgreSQLDialecthibernate.show_sql=truehibernate.format_sql=false4、spring-mvc.xml配置<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xmlns:p="/schema/p"xmlns:xsi="/2001/XMLSchema-instance"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd/schema/mvc/schema/mvc/spring-mvc-3.0.xsd/schema/tx/schema/tx/spring-tx-4.0.xsd"><!-- 启用spring mvc 注解 --><mvc:annotation-driven><!-- 自动扫描且只扫描@Controller --><context:component-scan base-package="xxx.xxx.xxx "use-default-filters="false"></context:component-scan><!-- 定义JSP文件的位置 --><beanclass="org.springframework.web.servlet.view.InternalResourceView Resolver"><property name="prefix"value="/jsp/"/><property name="suffix"value=".jsp"/></bean><!-- 容器默认的DefaultServletHandler处理所有静态内容与无RequestMapping处理的URL--> <mvc:default-servlet-handler/><!-- 定义无需Controller的url<->view直接映射 --><mvc:view-controller path="/"view-name="login"/></beans>。
SpringMVC框架搭建流程(完整详细版)SpringMVC框架搭建流程开发过程1)配置DispatcherServlet前端控制器2)开发处理具体业务逻辑的Handler(@Controller、 @RequestMapping)3) xml配置⽂件配置controller扫描,配置springmvc三⼤件4)将xml⽂件路径告诉springmvc(DispatcherServlet)详细流程:创建⽬录新建maven项⽬,注意选择webapp⾻架。
创建成功之后会发现没有src等⽬录,这些需要我们⼿动创建:在src下⾯新建main,main下⾯新建java⽬录,选择java⽬录,右键,在main下⾯继续新建resource⽬录,选择resource⽬录,右键,pom.xmlpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><groupId></groupId><artifactId>springmvc-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><piler.source>11</piler.source><piler.target>11</piler.target></properties><dependencies><!--引⼊spring webmvc的依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.12.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins></build></project>注意Tomcat7插件是⽤来运⾏项⽬的,右侧运⾏:springmvc相关配置main⽂件夹下⾯新建webapp⽂件夹,webapp下⾯新建WEB-INF,下⾯新建web.xml<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!--⽅式⼀:带后缀,⽐如*.action *.do *.aaa该种⽅式⽐较精确、⽅便,在以前和现在企业中都有很⼤的使⽤⽐例⽅式⼆:/ 不会拦截 .jsp,但是会拦截.html等静态资源(静态资源:除了servlet和jsp之外的js、css、png等)为什么配置为/ 会拦截静态资源因为tomcat容器中有⼀个web.xml(⽗),你的项⽬中也有⼀个web.xml(⼦),是⼀个继承关系⽗web.xml中有⼀个DefaultServlet, url-pattern 是⼀个 /此时我们⾃⼰的web.xml中也配置了⼀个 / ,覆写了⽗web.xml的配置为什么不拦截.jsp呢?因为⽗web.xml中有⼀个JspServlet,这个servlet拦截.jsp⽂件,⽽我们并没有覆写这个配置,所以springmvc此时不拦截jsp,jsp的处理交给了tomcat如何解决/拦截静态资源这件事?⽅式三:/* 拦截所有,包括.jsp--><!--拦截匹配规则的url请求,进⼊springmvc框架处理--><url-pattern>/</url-pattern></servlet-mapping></web-app>⾥⾯配置了springmvc相关的配置,引⼊了springmvc.xml:在resource⽬录下新建springmvc.xml:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beanshttps:///schema/beans/spring-beans.xsd/schema/contexthttps:///schema/context/spring-context.xsd/schema/mvchttps:///schema/mvc/spring-mvc.xsd"><!--开启controller扫描--><context:component-scan base-package=".controller"/><!--配置springmvc的视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean><!--⾃动注册最合适的处理器映射器,处理器适配器(调⽤handler⽅法)--><mvc:annotation-driven/></beans>在java⽬录下新建包.controller,下⾯新建DemoController:package .controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import java.util.Date;/*** @author lyj* @Title: DemoController* @ProjectName springmvc-demo* @Description: TODO* @date 2020/6/9 21:21*/@Controller@RequestMapping("/demo")public class DemoController {/*** http://localhost:8080/demo/handle01*/@RequestMapping("/handle01")public ModelAndView handle01(){Date date=new Date();ModelAndView modelAndView=new ModelAndView();modelAndView.addObject("date",date);modelAndView.setViewName("success");return modelAndView;}}在WEB-INF下⾯新建jsp⽂件夹,下⾯新建success.jsp:<%@ page language="java" isELIgnored="false" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>当前时间 ${date}</body></html>完毕后整个项⽬结构如下:测试:浏览器访问:。
SpringMVC框架详解随着Web应用程序变得越来越复杂,使用适当的框架变得越来越重要。
SpringMVC是一个流行的Java Web框架,它提供了许多功能,使开发Web应用程序更容易和更快速。
本文将对SpringMVC框架进行详细介绍,包括其架构、工作流程、控制器、视图和模型等方面的内容。
1. SpringMVC架构SpringMVC框架基于Model-View-Controller(MVC)架构。
在这种架构中,应用程序被分为三个组件,分别是:1. Model:负责管理数据的处理和存储。
2. View:负责呈现数据给用户的界面。
3. Controller:负责接收用户的请求和处理数据,控制应用程序的行为。
SpringMVC通过DispatcherServlet实现了这种MVC架构。
DispatcherServlet是一个前端控制器(Front Controller),它接收所有的客户端请求并将其分配给相应的处理程序。
2. SpringMVC的工作流程SpringMVC框架具有以下的工作流程:1. 用户发送请求到DispatcherServlet。
2. DispatcherServlet收到请求后,根据配置文件中的URL映射找到相应的Controller。
3. Controller接收请求,并将数据传递给Service层。
4. Service层对数据进行处理,并将处理结果返回给Controller。
5. Controller根据视图解析器的配置选择相应的视图,将处理结果传递给视图并渲染。
6. 视图呈现处理结果,并将其返回给客户端。
3. SpringMVC的控制器控制器是SpringMVC架构中最重要的组件之一。
它负责接收客户端请求,并根据请求的类型执行相应的逻辑。
SpringMVC提供了以下几种类型的控制器:1. @Controller:该注解标注的类被SpringMVC视为控制器。
2. @RestController:可以理解为@Controller和@ResponseBody的组合注解。
SpringMVC框架配置⽅法详解本⽂实例为⼤家分享了Spring MVC框架配置⽅法,供⼤家参考,具体内容如下1、概述 Spring MVC 作⽤:⽤来实现前端浏览器与后⾯程序的交互 Spring MVC 是基于Spring 的MVC框架,所谓MVC(model,controller,view) ,整个Spring MVC 作⽤就是,基于Spring 将model(数据)在controller(后台程序) ,view(前端浏览器)之间交互 ⾄于Spring MVC优点缺点,了解不深不作评价,2、引⽤的jar包 既然是基于Spring那么 Spring的核⼼jar包(beans,context,core,expression,commons-logging)是必须的;Spring MVC的相关Jar包有个(web,webmvc),特别包(aop)这个包不是必须,但如果基于注解,⽤以包扫描的时候就必需3、配置⽂件 配置⽂件,就是显式配置程序执⾏的初始化的⽂件。
配置⽂件如下:springmvc-config.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.3.xsd/schema/context/schema/context/spring-context-4.3.xsd/schema/mvc/schema/mvc/spring-mvc-4.3.xsd"><!--<context:component-scan base-package="com.itheima.controller"/>--><!-- 配置处理器Handle,映射“/firstController”请求 --><bean name="/firstController" class="com.itheima.controller.FirstController" /><!--<mvc:annotation-driven />--!><!-- 处理器映射器,将处理器Handle的name作为url进⾏查找 --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><!-- 处理器适配器,配置对处理器中handleRequest()⽅法的调⽤--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean></beans>Web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><!-- 配置前端过滤器 --><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 初始化时加载配置⽂件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-config.xml</param-value></init-param><!-- 表⽰容器在启动时⽴即加载Servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>图⽚来源()步骤:1、客户端发起访问,被Spring MVC的前端控制器拦截(DispatcherServlet ) 2、拦截器会找到映射器(handlerMapping),让映射器根据URL找到具体的bean,例如上⾯如果 URL"/firstController" 那么就找到了对应的Bean,并反馈给DispatcherServlet 3、DispatcherServlet将到找到的bean交给适配器(handlerAdapter),由适配器去调⽤对应的handler(执⾏bean中的⽅法) 4、执⾏完成后,将结果把返回给DispatcherServlet,然后由DispatcherServlet 交给视图解析器(ViewReslover) 5、视图解析完成后,再交给DispatcherServlet,然后交给view 渲染(⽐如 JSP)。
SSI框架搭建SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6编号:SSI-SMVC3-S3-I3版本:V1.0级别:公开编写时间:2016-02-17目录1 导言 (1)1.1 目的 (1)1.2 范围 (1)1.3 说明 (1)2 搭建SpringMVC (2)2.1 搭建所需jar包 (2)2.2 其他依赖包 (3)2.3 搭建步骤 (4)2.3.1 创建项目 (4)2.3.2 导入jar包 (6)2.3.3 配置web.xml (7)2.3.4 配置spring-servlet.xml (9)2.3.5 配置applicationContext.xml (10)2.3.6 配置log4j.properties (10)3 整合mybatis (11)3.1 整合所需jar包 (11)3.2 其他依赖包 (11)3.3 整合步骤 (11)3.3.1 导入jar包 (11)3.3.2 配置config.properties (12)3.3.3 配置spring-dataSource.xml (12)3.3.4 配置applicationContext.xml (15)3.3.5 配置mybatis-config.xml (16)3.3.6 创建实体model (17)3.3.7 创建实例化dao (19)3.3.8 创建业务服务service (21)3.3.9 创建控制层controller (23)3.3.10 页面代码 (28)3.3.11 启动项目 (37)1导言1.1 目的本文档是根据个人的工作经验搭建的轻量级SSI框架,也是实际应用中比较全面的基础框架,用于指导SSI框架初学者学习搭建SSI框架,希望能给各位使用者提供帮助,同时也希望朋友们尽量去帮助其他人。
1.2 范围本次框架搭建的版本是SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6,数据库采用的是mysql,在eclipse开发工具下搭建直接搭建的web项目,页面采用的是h5,ajax实现数据访问,如果页面为jsp等,则修改controller的返回类型即可。
Spring+SpringMVC企业快速开发架构搭建创建项目从2014年12月开始,一直在研究Spring的框架;并且在我们新的开发框架中得到应用;这篇文章记录了这段时间的成长记录,仅此先给共同成长的小白。
为了简单,我们选择使用maven来构建项目,通过maven可以控制引入jar的版本,大大简化了jar包的管理工作,废话不多说,创建一个项目一、创建一个新项目1、创建maven项目2、选择 maven-archetype-webapp3、填写groupId、artifactId、package项目目录:二、项目创建完成后修改默认的jdk、编译器等默认属性,我的项目选择的是jdk73、引入Spring的jarXml代码<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.2.12.RELEASE</spring.version><tddl.version>3.0.1.5.taobaocode-SNAPSHOT</tddl.version><druid.version>0.2.3</druid.version><cglib.version>2.1_3</cglib.version><aspectj.version>1.6.6</aspectj.version><jms.version>2.0</jms.version><jackson.version>1.9.5</jackson.version><poi.version>3.10.1</poi.version><mail.version>1.4.3</mail.version><atomikos.version>3.9.3</atomikos.version><mysql.version>5.1.34</mysql.version><redis.version>2.1.0</redis.version><jta.version>1.1</jta.version><activemq.version>5.10.0</activemq.version><servlet-api.version>5.5.23</servlet-api.version><fileupload.version>1.3.1</fileupload.version><fastjson.version>1.1.15</fastjson.version><json-lib.version>2.4</json-lib.version><jaxb-api.version>2.2.11</jaxb-api.version><jaxb-impl.version>2.1</jaxb-impl.version><woodstox.version>4.1.5</woodstox.version><activation.version>1.1.1</activation.version> <testng.version>6.8.13</testng.version><mockito.version>1.10.18</mockito.version> <unitils.version>3.4.2</unitils.version><java.version>1.7</java.version><jodd.version>3.3.8</jodd.version><jstl.version>1.2</jstl.version><file.encoding>utf-8</file.encoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- JSTL --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId> <artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId> <version>${spring.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.version}</version></dependency><dependency><groupId>javax.jms</groupId><artifactId>javax.jms-api</artifactId><version>${jms.version}</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mailapi</artifactId><version>${mail.version}</version></dependency><!-- json --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>${json-lib.version}</version><classifier>jdk15</classifier></dependency><!-- MQ--><dependency><groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId><version>${activemq.version}</version></dependency><dependency><groupId>tomcat</groupId><artifactId>servlet-api</artifactId><version>${servlet-api.version}</version> </dependency><!-- 分布式事务处理 --><dependency><groupId>com.atomikos</groupId><artifactId>transactions-jta</artifactId> <version>${atomikos.version}</version> <optional>true</optional></dependency><dependency><groupId>com.atomikos</groupId><artifactId>transactions-jdbc</artifactId> <version>${atomikos.version}</version> <optional>true</optional></dependency><dependency><groupId>javax.transaction</groupId><artifactId>jta</artifactId><version>${jta.version}</version> <optional>true</optional></dependency><dependency><groupId>com.alibaba</groupId> <artifactId>druid</artifactId><version>1.0.9</version><optional>true</optional></dependency><!-- poi --><dependency><groupId>org.apache.poi</groupId> <artifactId>poi</artifactId><version>${poi.version}</version> </dependency><dependency><groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi.version}</version> </dependency><!-- jackson --><dependency><groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>${jackson.version}</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId> <version>${cglib.version}</version> </dependency><dependency><groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${fileupload.version}</version></dependency><dependency><groupId>org.jodd</groupId><artifactId>jodd</artifactId><version>${jodd.version}</version></dependency></dependencies>四、创建Spring的配置文件1、启动Spring需要在web.xml中配置监听,使用SpringMVC需要配置Spring的servlet Web.xml代码<?xml version="1.0" encoding="UTF-8"?><web-app><display-name>Archetype Created Web Application</display-name><error-page><exception-type>ng.Throwable</exception-type><location>/500.jsp</location></error-page><error-page><error-code>500</error-code><location>/500.jsp</location></error-page><error-page><error-code>404</error-code><location>/404.jsp</location></error-page><!-- 装载spring 父上下文 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener><!-- 支持MVC 装载子上下文 --><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><description>Spring MVC Configuration Location</description><param-name>contextConfigLocation</param-name><param-value>classpath:spring-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><filter><filter-name>encode</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>ssojcFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>2、Spring上下文配置文件ApplicationContext.xml用于配置Spring的通用配置Applicationcontext.xml代码<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="http://www.sprin /schema/p"xmlns:aop="/schema/aop" xmlns:tx="http://www.sprin /schema/tx"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd "><context:property-placeholder location="classpath:*.properties" /><!--dataSource--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="i nit" destroy-method="close"><!-- 基本属性 url、user、password --><property name="url" value="${jdbc.url}" /><property name="username" value="${erName}" /><property name="password" value="${jdbc.passWord}" /><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="${jdbc.initialSize}" /><property name="minIdle" value="${jdbc.minIdle}" /><property name="maxIdle" value="maxIdle" /><property name="maxActive" value="${jdbc.maxActive}" /><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionR unsMillis}" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis} " /><property name="validationQuery" value="${jdbc.validationQuery}" /><property name="testWhileIdle" value="${jdbc.testWhileIdle}" /><property name="testOnBorrow" value="${jdbc.testOnBorrow}" /><property name="testOnReturn" value="${jdbc.testOnReturn}" /><property name="filters" value="${jdbc.filters}" /></bean><!--daoSupport--><bean id="jldaoSupport" class=".framework.dao.support.JLDeDaoSupport"><property name="dataSource" ref="dataSource"/></bean><bean id = "transactionManager" class="org.springframework.jdbc.datasource.DataSo urceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 声明式事务配置 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED" rollback-for="Throwable, Excepti on, RuntimeException"/><tx:method name="begin*" propagation="REQUIRED" rollback-for="Throwable, Exce ption, RuntimeException"/><tx:method name="end*" propagation="REQUIRED" rollback-for="Throwable, Excepti on, RuntimeException"/><tx:method name="update*" propagation="REQUIRED" rollback-for="Throwable, Exc eption, RuntimeException"/><tx:method name="del*" propagation="REQUIRED" rollback-for="Throwable, Excepti on, RuntimeException"/><tx:method name="do*" propagation="REQUIRED" rollback-for="Throwable, Exceptio n, RuntimeException"/><tx:method name="save*" propagation="REQUIRED" rollback-for="Throwable, Except ion, RuntimeException"/><tx:method name="modify*" propagation="REQUIRED" rollback-for="Throwable, Exc eption, RuntimeException"/><tx:method name="query*" propagation="NOT_SUPPORTED"/><tx:method name="get*" propagation="NOT_SUPPORTED"/><tx:method name="load*" propagation="NOT_SUPPORTED"/><tx:method name="find*" propagation="NOT_SUPPORTED"/><tx:method name="*" read-only="true" propagation="SUPPORTS" /></tx:attributes></tx:advice><!-- 内部服务 --><aop:config><aop:pointcut expression="execution(* ..service.*.*(..))" id="pointCut" /><aop:advisor pointcut-ref="pointCut" advice-ref="txAdvice"/></aop:config><!-- 对外服务 --><aop:config><aop:pointcut expression="execution(* ..service.soa.*.*(..))" id="pointCut_s oa" /><aop:advisor pointcut-ref="pointCut_soa" advice-ref="txAdvice"/></aop:config><!-- JMS --><aop:config><aop:pointcut expression="execution(* ..service.jms.receiver.*.*(..))" id="po intCut_jms" /><aop:advisor pointcut-ref="pointCut_jms" advice-ref="txAdvice"/></aop:config><!-- 定义过滤器 --><bean id="encode" class=".framework.web.filter.JLEncoderFilter"><property name="encode" value="UTF-8" /></bean></beans>3、SpringMVC配置Springmmc.xml代码<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="http://www.sprin /schema/p"xmlns:mvc="/schema/mvc" xmlns:context="http://ww /schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/mvc/schema/mvc/spring-mvc.xsd"><context:component-scan base-package=".*.web.controller"/><!-- mvc --><context:annotation-config /><!-- 使用ConfigurableWebBindingInitializer注册conversionService --><bean id="conversionService" class=".framework.converter.suport.JLConversi onService" init-method="init"><property name="converters"><set><bean class=".framework.converter.JLStringToTimestampConverter "><property name="formarts"><props><prop key="^\\d{4}-\\d{1,2}$">yyyy-MM</prop><prop key="^\\d{4}-\\d{1,2}-\\d{1,2}$">yyyy-MM-dd</prop><prop key="^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$">yyyy-MM-d d hh-mm</prop><prop key="^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$">yy yy-MM-dd hh-mm-ss</prop></props></property></bean></set></property></bean><bean id="webBindingInitializer" class="org.springframework.web.bind.support.Confi gurableWebBindingInitializer"><property name="conversionService" ref="conversionService"/></bean><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappin gHandlerAdapter"><property name="webBindingInitializer" ref="webBindingInitializer"/></bean><!-- 根据后缀支持多视图处理器 --><!-- 根据客户端的不同的请求决定不同的view进行响应, 如/blog/1.json /blog/1.xml --><bean id="viewResolver" class="org.springframework.web.servlet.view.ContentNegotiat ingViewResolver"><!-- 设置为true以忽略对Accept Header的支持 --><property name="ignoreAcceptHeader" value="true" /><!-- 在没有扩展名时即: "/blog/1" 时的默认展现形式 --><property name="defaultContentType" value="application/json" /><!-- 扩展名至mimeType的映射,即 /blog.json => application/json --> <property name="mediaTypes"><map><entry key="html" value="text/html" /><entry key="jsp" value="text/html" /><entry key="pdf" value="application/pdf" /><entry key="xsl" value="application/vnd.ms-excel" /><entry key="xslx" value="application/vnd.ms-excel" /><entry key="xml" value="application/xml" /><entry key="json" value="application/json" /></map></property><!-- 用于开启 /blog/123?format=json 的支持 --><property name="favorParameter" value="true" /><!-- 视图解析器 --><property name="viewResolvers"><list><!-- jsp解析 --><ref bean="jspRseolver"/><ref bean="beanRseolver"/></property><property name="defaultViews"><list><!-- for application/json --><bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /></list></property></bean><!-- 声明视图解析的对象 --><bean id="beanRseolver" class="org.springframework.web.servlet.view.BeanNameView Resolver" /><bean id="multipartRseolver" class=" monsMultipartResolver"><property name="maxUploadSize" value="5000000" /></bean><bean id="jspRseolver" class="org.springframework.web.servlet.view.InternalResource ViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp"></property><!-- 转向异常处理页面 --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolve r"><!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --><property name="defaultErrorView" value="error/error" /><!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception --><property name="exceptionAttribute" value="ex" /><!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 --><property name="exceptionMappings"><props><!-- 这里还可以继续扩展对不同异常类型的处理 --><prop key=".framework.exception.ValidateException">/error/error </prop><prop key=".framework.exception.SessionException">/error/login< /prop></props></property></bean><!-- 输出对象转String支持 --><bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessa geConverter"><property name="supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value></list></property></bean><!-- 输出对象转JSON支持 --><bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJack sonHttpMessageConverter" /><bean id="byteArrayConverter" class="org.springframework.http.converter.ByteArrayHt tpMessageConverter" /><bean id="resourceConverter" class="org.springframework.http.converter.ResourceHttp MessageConverter" /><bean id="sourceConverter" class="org.springframework.http.converter.xml.SourceHttp MessageConverter" /><bean id="xmlAwareFormConverter" class="org.springframework.http.converter.xml.X mlAwareFormHttpMessageConverter" /><bean id="jaxb2RootElementConverter" class="org.springframework.http.converter.xml. Jaxb2RootElementHttpMessageConverter" /><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandl erAdapter"><property name="messageConverters"><list><ref bean="stringConverter" /><ref bean="jsonConverter" /><ref bean="byteArrayConverter" /><ref bean="resourceConverter" /><ref bean="sourceConverter" /><ref bean="xmlAwareFormConverter" /><ref bean="jaxb2RootElementConverter" /></list></property></bean><!-- URL映射管理器 --><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandl erMapping"><property name="order" value="0"/><property name="useDefaultSuffixPattern" value="true"/><!-- 拦截器 --><property name="interceptors"><list><!--会话管理的拦截器 --><ref bean="userInfoInterceptor"/></list></property></bean><bean id="userInfoInterceptor" class="erInfoI nterceptor" /><!--<mvc:interceptors><mvc:interceptor><mvc:mapping path="/*"/><ref bean="securityInterceptor"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/*"/><ref bean="userInfoInterceptor"/></mvc:interceptor></mvc:interceptors>--></beans>完成以上操作一个完整的SpringMVC项目就创建完成了!更多详情见请继续阅读下一页的精彩内容:/Linux/2015-0 9/122942p2.htm--------------------------------------分割线 --------------------------------------。
Spring MVC 环境搭建及详解一、Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0)1. jar包引入Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib-nodep-2.1_3.jarHibernate 3.6.8:hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、antlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.GA.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.4.jar、相应数据库的驱动jar包2. web.xml配置(部分)<!-- Spring MVC配置 --><!-- ====================================== --><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</se rvlet-class><!--可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml<init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-servlet.xml</param-value> 默认</init-param>--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><!-- Spring配置 --><!-- ====================================== --><listener><listener-class>org.springframework.web.context.ContextLoaderListene r</listener-class></listener><!--指定Spring Bean的配置文件所在目录。
默认配置在WEB-INF目录下 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/applicationContext.xml</param-value> </context-param>3. spring-servlet.xml配置spring-servlet这个名字是因为上面web.xml中<servlet-name>标签配的值为spring(<servlet-name>spring</servlet-name>),再加上“-servlet”后缀而形成的spring-servlet.xml文件名,如果改为springMVC,对应的文件名则为springMVC-servlet.xml。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/aop/schema/aop/spring-aop-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd"><!--启用spring mvc注解 --><context:annotation-config /><!--设置使用注解的类所在的jar包 --><context:component-scanbase-package="controller"></context:component-scan><!--完成请求和注解POJO的映射 --><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandle rAdapter" /><!--对转向页面的路径解析。
prefix:前缀, suffix:后缀 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/" p:suffix=".jsp" /></beans>4. applicationContext.xml配置<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><!--采用hibernate.cfg.xml方式配置数据源 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"><value>classpath:config/hibernate.cfg.xml</value> </property></bean><!--将事务与Hibernate关联 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref local="sessionFactory"/></property></bean><!--事务(注解)--><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/><!--测试Service --><bean id="loginService" class="service.LoginService"></bean><!--测试Dao --><bean id="hibernateDao" class="dao.HibernateDao"><property name="sessionFactory"ref="sessionFactory"></property></bean></beans>二、详解Spring MVC与Struts从原理上很相似(都是基于MVC架构),都有一个控制页面请求的Servlet,处理完后跳转页面。
看如下代码(注解):package controller;importjavax.servlet.http.HttpServletRequest;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;er;@Controller //类似Struts的Actionpublic class TestController {@RequestMapping("test/login.do") // 请求url地址映射,类似Struts的action-mappingpublic String testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) {// @RequestParam是指请求url地址映射中必须含有的参数(除非属性required=false)// @RequestParam可简写为:@RequestParam("username")if (!"admin".equals(username) || !"admin".equals(password)) {return "loginError"; // 跳转页面路径(默认为转发),该路径不需要包含spring-servlet配置文件中配置的前缀和后缀}return "loginSuccess";}@RequestMapping("/test/login2.do")publicModelAndView testLogin2(String username, String password, int age){// request和response不必非要出现在方法中,如果用不上的话可以去掉// 参数的名称是与页面控件的name相匹配,参数类型会自动被转换if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {return new ModelAndView("loginError"); // 手动实例化ModelAndView完成跳转页面(转发),效果等同于上面的方法返回字符串}return new ModelAndView(new RedirectView("../index.jsp")); // 采用重定向方式跳转页面// 重定向还有一种简单写法// return new ModelAndView("redirect:../index.jsp");}@RequestMapping("/test/login3.do")publicModelAndView testLogin3(User user) {// 同样支持参数为表单对象,类似于Struts的ActionForm,User不需要任何配置,直接写即可String username = user.getUsername();String password = user.getPassword();int age = user.getAge();if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {return new ModelAndView("loginError");}return new ModelAndView("loginSuccess");}@Resource(name = "loginService") // 获取applicationContext.xml中bean 的id为loginService的,并注入private LoginServiceloginService; //等价于spring传统注入方式写get和set 方法,这样的好处是简洁工整,省去了不必要得代码@RequestMapping("/test/login4.do")public String testLogin4(User user) {if (loginService.login(user) == false) {return "loginError";}return "loginSuccess";}}以上4个方法示例,是一个Controller里含有不同的请求url,也可以采用一个url访问,通过url参数来区分访问不同的方法,代码如下:package controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping("/test2/login.do") // 指定唯一一个*.do请求关联到该Controller public class TestController2 {@RequestMappingpublic String testLogin(String username, String password, int age) { // 如果不加任何参数,则在请求/test2/login.do时,便默认执行该方法if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {return "loginError";}return "loginSuccess";}@RequestMapping(params = "method=1", method=RequestMethod.POST)public String testLogin2(String username, String password) {// 依据params的参数method的值来区分不同的调用方法// 可以指定页面请求方式的类型,默认为get请求if (!"admin".equals(username) || !"admin".equals(password)) {return "loginError";}return "loginSuccess";}@RequestMapping(params = "method=2")public String testLogin3(String username, String password, int age) { if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {return "loginError";}return "loginSuccess";}}其实RequestMapping在Class上,可看做是父Request请求url,而RequestMapping 在方法上的可看做是子Request请求url,父子请求url最终会拼起来与页面请求url进行匹配,因此RequestMapping也可以这么写:package controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/test3/*") // 父request请求urlpublic class TestController3 {@RequestMapping("login.do") // 子request请求url,拼接后等价于/test3/login.dopublic String testLogin(String username, String password, int age) { if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {return "loginError";}return "loginSuccess";}}。