774530750 发表于 2017-3-2 10:22:14

Spring学习进阶(一)初识Spring

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5   <modelVersion>4.0.0</modelVersion>
6   <groupId>com.smart</groupId>
7   <artifactId>chapter</artifactId>
8   <packaging>pom</packaging>
9   <version>3.1-SNAPSHOT</version>
10   <name>Spring3.1 </name>
11   <description>Spring3.1</description>
12   <properties>
13   <file.encoding>UTF-8</file.encoding>
14   <java.version>1.6</java.version>
15   <spring.action.version>3.1-SNAPSHOT</spring.action.version>
16   <org.springframework.version>3.1.1.RELEASE</org.springframework.version>
17   <mysql.version>5.1.6</mysql.version>
18   <commons-dbcp.version>1.2.2</commons-dbcp.version>
19   <aspectjweaver.version>1.6.9</aspectjweaver.version>
20   <apache.commons.version>1.1.1</apache.commons.version>
21   <commons-collections.version>3.2.1</commons-collections.version>
22   <javassist.version>3.9.0.GA</javassist.version>
23   <commons-beanutils.version>1.8.3</commons-beanutils.version>
24   <ehcache.version>1.6.2</ehcache.version>
25   <hibernate.version>3.6.10.Final</hibernate.version>
26   <hibernate-validator.version>4.0.2.GA</hibernate-validator.version>
27   <slf4j-jdk14.version>1.6.1</slf4j-jdk14.version>
28
29   <commons-fileupload.version>1.2.1</commons-fileupload.version>
30   <jsp-api.version>2.0</jsp-api.version>
31   <servlet-api.version>2.5</servlet-api.version>
32   <jstl.version>1.2</jstl.version>
33   <standard.version>1.1.2</standard.version>
34   <freemarker.version>2.3.8</freemarker.version>
35   <jetty.version>6.1.5</jetty.version>
36
37   <mockito-all.version>1.8.5</mockito-all.version>
38   <junit.version>4.9.0</junit.version>
39   <testng.version>6.3.1</testng.version>
40   <unitils.version>3.1</unitils.version>
41   <dbunit.version>2.4.8</dbunit.version>
42   </properties>
43   <modules>
44   <module>chapter1</module>
45   <!--<module>chapter2</module>
46   <module>chapter3</module>
47   <module>chapter4</module>
48   <module>chapter5</module>
49   <module>chapter6</module>
50   <module>chapter7</module>
51   <module>chapter8</module>
52   <module>chapter9</module>
53   <module>chapter11</module>-->
54   </modules>
55   <build>
56   <plugins>
57       <plugin>
58         <artifactId>maven-surefire-plugin</artifactId>
59         <configuration>
60         <skip>true</skip>
61         </configuration>
62       </plugin>
63   </plugins>
64   </build>
65 </project>
  chapter:pom.xml



1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5   <parent>
6         <groupId>com.smart</groupId>
7         <artifactId>chapter</artifactId>
8         <version>3.1-SNAPSHOT</version>
9   </parent>
10   <modelVersion>4.0.0</modelVersion>
11   <artifactId>chapter1</artifactId>
12   <version>3.1-SNAPSHOT</version>
13   <name>第一章示例</name>
14   <description>Spring 快速入门</description>
15   <packaging>war</packaging>
16   <dependencies>
17         <!--① 依赖的Spring模块类库 -->
18         <dependency>
19             <groupId>org.springframework</groupId>
20             <artifactId>spring-beans</artifactId>
21             <version>${org.springframework.version}</version>
22         </dependency>
23         <dependency>
24             <groupId>org.springframework</groupId>
25             <artifactId>spring-jdbc</artifactId>
26             <version>${org.springframework.version}</version>
27         </dependency>
28         <dependency>
29             <groupId>org.springframework</groupId>
30             <artifactId>spring-web</artifactId>
31             <version>${org.springframework.version}</version>
32         </dependency>
33         <dependency>
34             <groupId>org.springframework</groupId>
35             <artifactId>spring-webmvc</artifactId>
36             <version>${org.springframework.version}</version>
37         </dependency>
38         <!--② 依赖的持久化类库-->
39         <dependency>
40             <groupId>mysql</groupId>
41             <artifactId>mysql-connector-java</artifactId>
42             <version>${mysql.version}</version>
43         </dependency>
44         <!--③ 依赖的公共类库-->
45         <dependency>
46             <groupId>commons-dbcp</groupId>
47             <artifactId>commons-dbcp</artifactId>
48             <version>${commons-dbcp.version}</version>
49         </dependency>
50         <dependency>
51             <groupId>org.aspectj</groupId>
52             <artifactId>aspectjweaver</artifactId>
53             <version>${aspectjweaver.version}</version>
54         </dependency>
55         <!--④ 依赖的WEB类库-->
56         <dependency>
57             <groupId>javax.servlet.jsp</groupId>
58             <artifactId>jsp-api</artifactId>
59             <version>${jsp-api.version}</version>
60            <scope>provided</scope>
61         </dependency>
62         <dependency>
63             <groupId>taglibs</groupId>
64             <artifactId>standard</artifactId>
65             <version>${standard.version}</version>
66             <scope>runtime</scope>
67         </dependency>
68         <dependency>
69             <groupId>javax.servlet</groupId>
70             <artifactId>servlet-api</artifactId>
71             <version>${servlet-api.version}</version>
72         </dependency>
73         <dependency>
74             <groupId>javax.servlet</groupId>
75             <artifactId>jstl</artifactId>
76             <version>${jstl.version}</version>
77         </dependency>
78         <!--⑤ 依赖的测试类库-->
79         <dependency>
80             <groupId>org.springframework</groupId>
81             <artifactId>spring-test</artifactId>
82             <version>${org.springframework.version}</version>
83         </dependency>
84         <dependency>
85             <groupId>org.testng</groupId>
86             <artifactId>testng</artifactId>
87             <version>${testng.version}</version>
88         </dependency>
89         <dependency>
90             <groupId>cglib</groupId>
91             <artifactId>cglib</artifactId>
92             <version>1.0</version>
93         </dependency>
94         <dependency>
95             <groupId>commons-logging</groupId>
96             <artifactId>commons-logging</artifactId>
97             <version>1.1</version>
98         </dependency>
99   </dependencies>
100   <build>
101         <finalName>chapter1</finalName>
102         <plugins>
103             <plugin>
104               <artifactId>maven-surefire-plugin</artifactId>
105               <configuration>
106                     <skip>true</skip>
107               </configuration>
108             </plugin>
109             <!-- jetty插件 -->
110             <plugin>
111               <groupId>org.mortbay.jetty</groupId>
112               <artifactId>maven-jetty-plugin</artifactId>
113               <version>6.1.5</version>
114               <configuration>
115                     <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
116                     <scanIntervalSeconds>3</scanIntervalSeconds>
117                     <contextPath>/chapter1</contextPath>
118                     <connectors>
119                         <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
120                           <port>8088</port>
121                         </connector>
122                     </connectors>
123               </configuration>
124             </plugin>
125         </plugins>
126   </build>
127 </project>
  chapter1 pom.xml



1 package com.smart.domain;
2
3 import java.io.Serializable;
4 import java.util.*;
5 /**
6* Created by sanglp on 2016/6/29.
7*/
8
9 /**
10* domain对象一般要实现Serializable接口,以便进行序列化
11*/
12 public class User implements Serializable {
13    private int userId;
14    private String userName;
15   private String password;
16   private String lastIp;
17   private Date lastVisit;
18
19   public int getUserId() {
20         return userId;
21   }
22
23   public String getUserName() {
24         return userName;
25   }
26
27   public String getPassword() {
28         return password;
29   }
30
31   public String getLastIp() {
32         return lastIp;
33   }
34
35   public Date getLastVisit() {
36         return lastVisit;
37   }
38
39   public void setUserId(int userId) {
40         this.userId = userId;
41   }
42
43   public void setUserName(String userName) {
44         this.userName = userName;
45   }
46
47   public void setPassword(String password) {
48         this.password = password;
49   }
50
51   public void setLastIp(String lastIp) {
52         this.lastIp = lastIp;
53   }
54
55   public void setLastVisit(Date lastVisit) {
56         this.lastVisit = lastVisit;
57   }
58 }
  User.java



1 package com.smart.domain;
2
3 /**
4* Created by sanglp on 2016/6/29.
5*/
6 import java.util.*;
7 public class LoginLog {
8   private int loginLogId;
9   private int userId;
10   private String ip;
11   private Date loginDate;
12
13   public int getLoginLogId() {
14         return loginLogId;
15   }
16
17   public int getUserId() {
18         return userId;
19   }
20
21   public String getIp() {
22         return ip;
23   }
24
25   public Date getLoginDate() {
26         return loginDate;
27   }
28
29   public void setLoginLogId(int loginLogId) {
30         this.loginLogId = loginLogId;
31   }
32
33   public void setUserId(int userId) {
34         this.userId = userId;
35   }
36
37   public void setIp(String ip) {
38         this.ip = ip;
39   }
40
41   public void setLoginDate(Date loginDate) {
42         this.loginDate = loginDate;
43   }
44 }
  LoginLog.java



1 package com.smart.dao;
2
3 import com.smart.domain.User;
4 import org.springframework.beans.factory.annotation.Autowired;
5 import org.springframework.jdbc.core.JdbcTemplate;
6 import org.springframework.jdbc.core.RowCallbackHandler;
7 import org.springframework.stereotype.Repository;
8
9 import java.sql.ResultSet;
10 import java.sql.SQLException;
11
12 /**
13* Created by sanglp on 2016/6/29.
14*/
15 //通过Spring注解定义一个DAO
16 @Repository
17 public class UserDao {
18   //自动注入JdbcTemplate的Bean
19   @Autowired
20   private JdbcTemplate jdbcTemplate;
21   //根据用户名和密码获取匹配的用户数。等于1表示用户名/密码正确,等于0表示用户名或密码错误
22   public int getMatchCount(String userName ,String password){
23         String sqlStr="select count(*) FROM t_user where user_name=? and password=?";
24         return jdbcTemplate.queryForInt(sqlStr,new Object[]{userName,password});
25   }
26
27   /**
28      * 通过调用RowCallbackHandler回调接口实例,将ResultSet转换为User对象
29      * @param userName
30      * @return
31      */
32   public User findUserByUserName(final String userName){
33         String sqlStr="SELECT user_id,user_name FROM t_user WHERE user_name=?";
34         finalUser user=new User();
35         jdbcTemplate.query(sqlStr, new Object[]{userName},
36               new RowCallbackHandler() {//匿名类方式实现的回调函数
37                     //processRow负责将查询的结果congenialResultSet装载到类似于领域对象的对象示例中
38                     public void processRow(ResultSet resultSet) throws SQLException {
39                         user.setUserId(resultSet.getInt("user_id"));
40                         user.setUserName(userName);
41                     }
42               });
43         return user;
44   }
45
46   public void updateLoginInfo (User user){
47         String sqlStr="UPDATE t_user SET last_visit=?,last_ip=? WHERE user_id=?";
48         jdbcTemplate.update(sqlStr,new Object[]{user.getLastVisit(),user.getLastIp(),user.getUserId()});
49   }
50
51 }
  UserDao.java



1 package com.smart.dao;
2
3 import com.smart.domain.LoginLog;
4 import org.springframework.beans.factory.annotation.Autowired;
5 import org.springframework.jdbc.core.JdbcTemplate;
6 import org.springframework.stereotype.Repository;
7
8 import java.io.Serializable;
9
10 /**
11* Created by sanglp on 2016/6/29.
12*/
13 @Repository
14 public class LoginLogDao implements Serializable{
15   @Autowired
16   private JdbcTemplate jdbcTemplate;
17
18   public void insertLoginLog(LoginLog loginLog){
19         String sqlStr="INSERT INTO t_login_log(user_id,ip,login_datetime) VALUES(?,?,?)";
20         jdbcTemplate.update(sqlStr,new Object[]{loginLog.getUserId(),loginLog.getIp(),loginLog.getLoginDate()});
21   }
22 }
  LoginLogDao.java



1 在UserDao和LoginLogDao实现类中都没有打开/释放Connection的代码,那么DAO如何访问数据库?
2 答:样板式的操作都被JdbcTemplate给封装起来了,JdbcTemplate本身需要一个DateSource,这样他就可以根据需要congenialDataSource中获取或返回连接。
3 UserDao和LoginLogDao都提供了一个带@Autowried注解的JdbcTemplate变量。所以必须事先声明一个数据源,然后定义一个JdbcTemplate Bean,通过Spring的
4 容器上下文自动绑定机制进行Bean的注入。
  在Spring中装载DAO



1 <?xml version="1.0" encoding="utf-8" ?>
2 <!--引用Spring的多个Schema空间格式定义文件-->
3   <beans xmlns="http://www.springframework.org/schema/beans"
4      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5         xmlns:p="http://www.springframework.org/schema/p"
6      xmlns:context="http://www.springframework.org/schema/context"
7      xmlns:aop="http://www.springframework.org/schema/aop"
8         xmlns:tx="http://www.springframework.org/schema/tx"
9      xsi:schemaLocation="http://www.springframework.org/schema/beans
10      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
11      http://www.springframework.org/schema/context
12      http://www.springframework.org/schema/context/spring-context-3.1.xsd
13      http://www.springframework.org/schema/tx
14      http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
15      http://www.springframework.org/schema/aop
16      http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
17
18   <!--扫描包类,将标注Spring注解的类自动转化Bean,同时完成Bean的注入-->
19   <!--使用Spring的context:component-scan扫描指定类包下的所有类,这样在类中定义的Spring注解(@Repository和@Autowired等才能产生作用)-->
20   <context:component-scan base-package="com.smart.dao"/>
21   <!--扫描service类包,应用Spring的注解配置-->
22   <context:component-scan base-package="com.smart.service"/>
23   <!--定义一个使用DBCP实现的数据源-->
24   <!--使用Jakarta的DBCP开源数据源实现方案定义个一个数据源并设置驱动,端口用户名密码-->
25   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
26         destroy-method="close"
27         p:driverClassName="com.mysql.jdbc.Driver"
28         p:url="jdbc:mysql://localhost:3306/sampledb"
29         p:username="root"
30         p:password="123456"/>
31
32   <!--定义JDBC模板Bean-->
33   <!--配置JdbcTemplate将上面声明的dataSource注入JdbcTemplate中,而这个JdbcTemplate将通过@Autowired自动注入LoginLogDao和UserDao的Bean中-->
34   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
35         p:dataSource-ref="dataSource"/>
36   <!--配置事务管理器 定义了基于数据源的DataSourceTransactionManager事务管理器,该事务管理器负责声明式事务的管理,该管理器需要引用dataSource Bean-->
37   <bean id="transactionManager"
38         class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource"/>
39
40   <!--通过AOP配置提供事务增强,让service包下所有Bean的所有方法拥有事务-->
41   <aop:config proxy-target-class="true">
42         <aop:pointcut id="serviceMethod" expression=" execution(* com.smart.service..*(..))"/>
43         <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>
44   </aop:config>
45   <tx:advice id="txAdvice" transaction-manager="transactionManager">
46         <tx:attributes>
47             <tx:method name="*"/>
48         </tx:attributes>
49   </tx:advice>
50   </beans>
  ApplicationContext.xml



1 package com.smart.service;
2
3 import com.smart.dao.LoginLogDao;
4 import com.smart.dao.UserDao;
5 import com.smart.domain.LoginLog;
6 import com.smart.domain.User;
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.stereotype.Service;
9
10 /**
11* Created by sanglp on 2016/6/30.
12*/
13
14
15 //通过@Service注解将UserService标注为一个服务层的Bean,
16 @Service
17 public class UserService {
18   @Autowired
19   private UserDao userDao;
20   @Autowired
21   private LoginLogDao loginLogDao;
22
23   public boolean hasMatchUser(String userName,String password){
24         int matchCount=userDao.getMatchCount(userName,password);
25         return matchCount > 0;
26   }
27
28   public User findUserByUserName(String userName){
29         return userDao.findUserByUserName(userName);
30   }
31
32   public void loginSuccess(User user){
33         LoginLog loginLog=new LoginLog();
34         loginLog.setUserId(user.getUserId());
35         loginLog.setIp(user.getLastIp());
36         loginLog.setLoginDate(user.getLastVisit());
37         loginLogDao.insertLoginLog(loginLog);
38
39   }
40 }
  UserService.java



1 package com.smart.service;
2
3 import com.smart.domain.User;
4 import org.springframework.beans.factory.annotation.Autowired;
5 import org.springframework.test.context.ContextConfiguration;
6 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
7 import org.testng.annotations.Test;
8
9 import javax.jws.soap.SOAPBinding;
10
11 import java.util.Date;
12
13 import static org.testng.Assert.*;
14 /**
15* Created by sanglp on 2016/6/30.
16* Spring3.1的测试框架可以和TestNG整合,通过Spring提供的测试基类AbatractTestNGSpringContextTests,可以将Spring
17* 容器和TestNG测试框架整合。@ContextConfiguration也是Spring提供的注解,它用于指定Spring的配置文件。
18* 在测试类中可以使用Spring的@Autowired将Spring容器中的Bean注入测试类中。在测试方法前通过TestNG的@Test注解即可将方法标注为测试方法。
19*/
20 //启动Spring容器
21 @ContextConfiguration(locations ={"/applicationContext.xml"})
22 //基于TestNG的Spring测试框架
23 public class UserServiceTest extends AbstractTestNGSpringContextTests {
24   @Autowired
25   private UserService userService;
26
27   //标注测试方法
28   @Test
29   public void hasMatchUser(){
30         boolean b1=userService.hasMatchUser("admin","123456");
31         boolean b2=userService.hasMatchUser("admin","1111");
32         assertTrue(b1);
33
34   }
35
36   @Test
37   public void findUserByUserName(){
38         User user =userService.findUserByUserName("admin");
39         assertEquals(user.getUserName(),"admin");
40   }
41
42   @Test
43   public void loginSuccess(){
44         User user=userService.findUserByUserName("admin");
45         user.setUserId(1);
46         user.setUserName("admin");
47         user.setLastIp("192.168.12.7");
48         user.setLastVisit(new Date());
49         userService.loginSuccess(user);
50   }
51 }
  UserServiceTest.java



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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
6   <context-param>
7   <!--从类路径下加载spring配置文件,classpath关键字特指在类路径下加载-->
8   <param-name>contextConfigLocation</param-name>
9   <param-value>classpath:applicationContext.xml</param-value>
10   </context-param>
11   <listener>
12   <!--负责启动spring的容器的监听器,他将引用处的上下文参数获得spring配置文件地址-->
13   <listener-class>
14       org.springframework.web.context.ContextLoaderListener
15   </listener-class>
16   </listener>
17   <!--spring mvc的主控Servlet-->
18   <servlet>
19   <!--Spring mvc也拥有一个spring配置文件,配置文件的文件名和此处定义的servlet名有一个契约,即采用<servlet名>-servlet.xml 因为这里为viewspace所以/WEB-INF目录下必须有一个VIEWSPACE-SERVLET.XMLL-->
20   <servlet-name>viewspace</servlet-name>
21   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
22   <load-on-startup>3</load-on-startup>
23   </servlet>
24   <!--spring mvc处理的URL-->
25   <servlet-mapping>
26   <servlet-name>viewspace</servlet-name>
27   <url-pattern>*.html</url-pattern>
28   </servlet-mapping>
29 </web-app>
  web.xml配置Spring MVC



1 package com.smart.web;
2
3 import com.smart.domain.User;
4 import com.smart.service.UserService;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.stereotype.Controller;
7 import org.springframework.web.bind.annotation.RequestMapping;
8 import org.springframework.web.servlet.ModelAndView;
9
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import java.util.Date;
13
14 /**
15* Created by sanglp on 2016/7/5.
16*/
17 /**
18* Spring mvc的@Controller注解可以将任何一个POJO的类标注为Spring MVC的控制器,处理HTTP请求,当然标注 了@Controller的类首先会是一个Bean,所以可以使用@Autowired进行Bean的注入
19* 一个控制器可以拥有多个对应不同HTTP请求路径的处理方法,通过@RequestMapping指定方法如何映射请求路径
20* 请求的参数会根据参数默认契约自动绑定到响应方法的入参中,在loginCheck方法中请求参数会按名称匹配绑定到loginCommand的入参中。
21* 请求响应犯法会返回一个ModelAndView或直接返回一个字符串,Spring MVC会解析之并转向目标响应页面。
22* ModelAndView对象既包括了视图信息又包括偶了视图渲染所需要的模型数据信息。
23*/
24 //标注为一个controller
25 @Controller
26 @RequestMapping(value="/admin")
27 public class LoginController {
28
29   @Autowired
30   public UserService userService;
31   @RequestMapping(value = "/login.html") //负责处理login.html的请求
32   publicString loginPage(){
33         return "login";
34   }
35
36   /**
37      * 控制器根据登录处理结果分别返回ModelAndView("login","error","用户名或密码错误")和ModelAndView("main")ModelAndView的第一个参数带包视图的逻辑名
38      * 第二个和第三个参数分别为数据模型名称和数据模型对象,数据模型对象将以数据模型名称为参数名放置到request的属性中
39      * @param request
40      * @param loginCommand
41      * @return
42      */
43   @RequestMapping(value = "/loginCheck.html")
44   public ModelAndView loginCheck(HttpServletRequest request,LoginCommand loginCommand){
45         boolean isValidUser = userService.hasMatchUser(loginCommand.getUserName(),loginCommand.getPassword());
46
47         if(!isValidUser){
48             return new ModelAndView("login","error","用户名或密码错误");
49         }else{
50             User user=userService.findUserByUserName(loginCommand.getUserName());
51             user.setLastIp(request.getRemoteAddr());
52             user.setLastVisit(new Date());
53             userService.loginSuccess(user);
54             request.getSession().setAttribute("user",user);
55             returnnew ModelAndView("main");
56         }
57   }
58 }
  LoginController.java



1 package com.smart.web;
2
3 /**
4* Created by sanglp on 2016/7/5.
5*/
6 public class LoginCommand {
7   privateString userName;
8   private String password;
9
10   public String getUserName() {
11         return userName;
12   }
13
14   public String getPassword() {
15         return password;
16   }
17
18   public void setUserName(String userName) {
19         this.userName = userName;
20   }
21
22   public void setPassword(String password) {
23         this.password = password;
24   }
25 }
  LoginCommand.java



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" xmlns:p="http://www.springframework.org/schema/p"
4      xmlns:context="http://www.springframework.org/schema/context"
5      xsi:schemaLocation="http://www.springframework.org/schema/beans
6      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
7      http://www.springframework.org/schema/context
8      http://www.springframework.org/schema/context/spring-context-3.1.xsd">
9   <!--扫描相应的包,应用spring注解-->
10   <context:component-scan base-package="com.smart.web"/>
11   <bean id="defaultAnnotationHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
12   <bean id="annotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
13
14   <!--配置视图解析器,将ModelAndView及字符串解析为具体的页眉 在这里我们使用了InternalResourceViewResolver的视图映射方式,他通过添加前后缀来进行解析-->
15   <!--Springmvc如何将视图逻辑名解析为具体的视图页眉呢? 通过prefix指定在视图名前所添加的前缀,通过suffix指定在视图名后添加的后缀-->
16    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
17          p:viewClass="org.springframework.web.servlet.view.JstlView"
18          p:prefix="/WEB-INF/jsp/"
19          p:suffix=".jsp"/>
20   </beans>
  viewspace-servlet.xml



1 <%@ page language="java" contentType="text/html" charset="UTF-8" pageEncoding="UTF-8"%>
2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 <html>
4 <head>
5 <title>景区网站登录</title>
6 </head>
7 <body>
8 <c:if test="${!empty error}">
9 <!--使用JSTL标签对登录返回的信息进行错误处理,JSTL标签中引用了error变量,这个变量正是LoginController中返回的ModelAndView("login","error","用户名或密码错误")对象所声明的error参数-->
10 <font color="red"><c:out value="${error}"/></font>
11 </c:if>
12 <!--login.jsp登录表单提交到loginController.html JSTL标签会在URL前自动加上应用程序部署根目录,假设应用部署在网站的viewspace目录下,标签将输出/viewspace/loginController.html
13 由于login.jsp放在WEB-INF/jsp目录下,无法直接通过URL进行调用,他由LoginController控制类中标注了@RequestMapping(value="/login.html")的loginPage()进行转发-->
14 <form action="<c:url value="/loginCheck.html"/>" method="post">
15 用户名:
16 <input type="text" name="userName">
17 <br/>
18 密码:
19 <input type="password" name="password">
20 <br/>
21 <input type="submit" value="登录"/>
22 <input type="reset" value="重置"/>
23 </form>
24 </body>
25 </html>
  login.jsp



1 <%@ page language="java" contentType="text/html" charset="UTF-8" pageEncoding="UTF-8"%>
2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 <html>
4 <head>
5 <title>景区后台管理主页面</title>
6 </head>
7 <body>
8 <!--访问Session域中的user对象,显示用户名和积分信息-->
9 ${user.userName},欢迎您进入景区管理后台!
10 </body>
11 </html>
  main.jsp
  jetty无法启动使用:mvn org.mertbay.jetty:maven-jetty-plugin:run
页: [1]
查看完整版本: Spring学习进阶(一)初识Spring