spring相关概念及SSM框架在本文当中就不多述了,直接上干货!
一、用myEclipse初始化Web项目
新建一个web project:
二、创建包
controller //控制类
service//服务接口 service.impl//服务实现类 dao //data access object(接口) dao.impl //实现类
domain //实体类
mappers //mybatis的配置映射文件 util //工具类
三、是maven方式引入类库
3.1启动tomcat服务
3.2给web项目添加maven支持(引入maven私服库)
将web项目转化为maven项目:
3.3引入依赖
spring
mybatis spring mvc c3p0类库 MySQL
.......
3.4主要是编写pom.xml文件
[html] view plain copy
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2. <modelVersion>4.0.0</modelVersion>
3. <groupId>com.liuhai</groupId>
4. <artifactId>eshopSSM</artifactId>
5. <version>0.0.1-SNAPSHOT</version>
6. <packaging>war</packaging>
7. <properties>
8. <log4j.version>1.2.17</log4j.version>
9. <slf4j.version>1.7.7</slf4j.version>
10. </properties>
11. <build>
12. <sourceDirectory>src</sourceDirectory>
13. <resources>
14. <resource>
15. <directory>src</directory>
16. <excludes>
17. <exclude>**/*.java</exclude>
18. </excludes>
19. </resource>
20. </resources>
21. <plugins>
22. <plugin>
23. <artifactId>maven-compiler-plugin</artifactId>
24. <version>3.1</version>
25. <configuration>
26. <source>1.7</source>
27. <target>1.7</target>
28. </configuration>
29. </plugin>
30. <plugin>
31. <artifactId>maven-war-plugin</artifactId>
32. <version>2.3</version>
33. <configuration>
34. <warSourceDirectory>WebRoot</warSourceDirectory>
35. <failOnMissingWebXml>false</failOnMissingWebXml>
36. <version>3.0</version>
37. </configuration>
38. </plugin>
39. </plugins>
40. </build>
41. <dependencies>
42. <!-- webmvc -->
43. <dependency>
44. <groupId>org.springframework</groupId>
45. <artifactId>spring-webmvc</artifactId>
46. <version>4.0.2.RELEASE</version>
47. </dependency>
48. <dependency>
49. <groupId>org.springframework</groupId>
50. <artifactId>spring-jdbc</artifactId>
51. <version>4.0.2.RELEASE</version>
52. </dependency>
53. <dependency>
54. <groupId>org.springframework</groupId>
55. <artifactId>spring-tx</artifactId>
56. <version>4.0.2.RELEASE</version>
57. </dependency>
58. <dependency>
59. <groupId>org.springframework</groupId>
60. <artifactId>spring-context-support</artifactId>
61. <version>4.0.2.RELEASE</version>
62. </dependency>
63. <dependency>
64. <groupId>org.springframework</groupId>
65. <artifactId>spring-orm</artifactId>
66. <version>4.0.2.RELEASE</version>
67. </dependency>
68. <!-- 导入Mysql数据库链接jar包 -->
69. <dependency>
70. <groupId>mysql</groupId>
71. <artifactId>mysql-connector-java</artifactId>
72. <version>5.1.17</version>
73. </dependency>
74. <!--c3p0 用来在applicationContext.xml中配置数据库 -->
75. <dependency>
76. <groupId>com.mchange</groupId>
77. <artifactId>c3p0</artifactId>
78. <version>0.9.5.2</version>
79. </dependency>
80. <!-- JSTL标签类 -->
81. <dependency>
82. <groupId>javax.servlet</groupId>
83. <artifactId>jstl</artifactId>
84. <version>1.2</version>
85. </dependency>
86. <dependency>
87. <groupId>commons-io</groupId>
88. <artifactId>commons-io</artifactId>
89. <version>2.4</version>
90. </dependency>
91. <!-- mybatis核心包 -->
92. <dependency>
93. <groupId>org.mybatis</groupId>
94. <artifactId>mybatis</artifactId>
95. <version>3.1.1</version>
96. </dependency>
97. <!-- mybatis/spring包 -->
98. <dependency>
99. <groupId>org.mybatis</groupId>
100. <artifactId>mybatis-spring</artifactId>
101. <version>1.2.0</version>
102. </dependency>
103. <!-- 映入JSON 对象转json转换器,主要用来restful用-->
104. <dependency>
105. <groupId>org.codehaus.jackson</groupId>
106. <artifactId>jackson-mapper-asl</artifactId>
107. <version>1.9.4</version>
108. </dependency>
109. <!-- log start -->
110. <dependency>
111. <groupId>log4j</groupId>
112. <artifactId>log4j</artifactId>
113. <version>${log4j.version}</version>
114. </dependency>
115. <dependency>
116. <groupId>org.slf4j</groupId>
117. <artifactId>slf4j-api</artifactId>
118. <version>${slf4j.version}</version>
119. </dependency>
120. <dependency>
121. <groupId>org.slf4j</groupId>
122. <artifactId>slf4j-log4j12</artifactId>
123. <version>${slf4j.version}</version>
124. </dependency>
125. <!-- log end -->
126. <!-- 上传组件包begin -->
127. <dependency>
128. <groupId>commons-fileupload</groupId>
129. <artifactId>commons-fileupload</artifactId>
130. <version>1.3.1</version>
131. </dependency>
132. <dependency>
133. <groupId>commons-io</groupId>
134. <artifactId>commons-io</artifactId>
135. <version>2.4</version>
136. </dependency>
137. <!-- 上传组件包end -->
138. <!-- json解析包 -->
139. <dependency>
140. <groupId>net.sf.json-lib</groupId>
141. <artifactId>json-lib</artifactId>
142. <version>2.4</version>
143. </dependency>
144. </dependencies>
145. </project>
四、创建dao和service的基础类库
UserDao.Java如下:
[java] view plain copy
1. package com.liuhai.eshop.dao;
2.
3. import java.util.List;
4. import java.util.Map;
5.
6. import com.liuhai.eshop.domain.User;
7. /**
8. * 用户DAO接口
9. * @author Administrator
10. *
11. */
12. public interface UserDao {
13. /**
14. * 用户登录
15. * @param user
16. * @return
17. */
18. public User login(User user);
19. /**
20. * 查询所有用户
21. * @return
22. */
23. public List<User> getAll();
24. /**
25. * 根据条件查询用户
26. * @param user
27. * @return
28. */
29. public User getUser(User user);
30. /**
31. * 删除用户
32. * @param user
33. * @return
34. */
35. public int delete(int id);
36. /**
37. * 更新用户
38. * @param user
39. * @return
40. */
41. public int update(User user);
42. /**
43. * 添加用户
44. * @param user
45. * @return
46. */
47. public int add(User user);
48. /**
49. * 用户查询
50. * @param map
51. * @return
52. */
53. public List<User> find(Map<String,Object> map);
54. /**
55. * 获取总记录数
56. * @param map
57. * @return
58. */
59. public Long getTotal(Map<String,Object> map);
60. /**
61. * 根据id查询用户
62. * @param id
63. * @return
64. */
65. public User getUserById(int id);
66. }
UserService.java 用户service层接口如下:
[java] view plain copy
1. package com.liuhai.eshop.service;
2.
3. import java.util.List;
4. import java.util.Map;
5. import com.liuhai.eshop.domain.User;
6.
7. public interface UserService {
8. public List<User> getAll();
9. public User getUser(User user);
10. public int delete(int id);
11. public int update(User user);
12. public int add(User user);
13. public List<User> find(Map<String,Object> map);
14. public Long getTotal(Map<String,Object> map);
15. public User getUserById(int id);
16. }
UserServiceImpl.java 用户service实现层如下:
[java] view plain copy
1. package com.liuhai.eshop.service.impl;
2.
3. import java.util.List;
4. import java.util.Map;
5.
6. import javax.annotation.Resource;
7.
8. import org.springframework.stereotype.Service;
9.
10. import com.liuhai.eshop.dao.UserDao;
11. import com.liuhai.eshop.domain.User;
12. import com.liuhai.eshop.service.UserService;
13. @Service(value="userService")
14. public class UserServiceImpl implements UserService {
15. private UserDao userDao;
16. @Resource
17. public void setUserDao(UserDao userDao) {
18. this.userDao = userDao;
19. }
20. @Override
21. public List<User> getAll() {
22. return userDao.getAll();
23. }
24.
25. @Override
26. public User getUser(User user) {
27. return userDao.getUser(user);
28. }
29.
30. @Override
31. public int delete(int id) {
32. return userDao.delete(id);
33. }
34.
35. @Override
36. public int update(User user) {
37. return userDao.update(user);
38. }
39.
40. @Override
41. public int add(User user) {
42. return userDao.add(user);
43. }
44.
45. @Override
46. public List<User> find(Map<String, Object> map) {
47. return userDao.find(map);
48. }
49.
50. @Override
51. public Long getTotal(Map<String, Object> map) {
52. return userDao.getTotal(map);
53. }
54. public User getUserById(int id){
55. return userDao.getUserById(id);
56. }
57. }
user实体类如下:
[java] view plain copy
1. package com.liuhai.eshop.domain;
2.
3. import java.io.Serializable;
4.
5. /**
6. * 用户实体
7. * @author Administrator
8. *
9. */
10. public class User implements Serializable{
11. private static final long serialVersionUID = 1L;
12. private Integer id;
13. private String userName;
14. private String password;
15. private Integer age;
16. private String trueName;
17. private String email;
18. private String phone;
19. private String roleName;
20. public Integer getId() {
21. return id;
22. }
23. public void setId(Integer id) {
24. this.id = id;
25. }
26.
27. public Integer getAge() {
28. return age;
29. }
30. public void setAge(Integer age) {
31. this.age = age;
32. }
33. public String getPassword() {
34. return password;
35. }
36. public void setPassword(String password) {
37. this.password = password;
38. }
39. public String getUserName() {
40. return userName;
41. }
42. public void setUserName(String userName) {
43. this.userName = userName;
44. }
45. public String getTrueName() {
46. return trueName;
47. }
48. public void setTrueName(String trueName) {
49. this.trueName = trueName;
50. }
51. public String getEmail() {
52. return email;
53. }
54. public void setEmail(String email) {
55. this.email = email;
56. }
57. public String getPhone() {
58. return phone;
59. }
60. public void setPhone(String phone) {
61. this.phone = phone;
62. }
63. public String getRoleName() {
64. return roleName;
65. }
66. <h1><a name="t8"></a> public void setRoleName(String roleName) {</h1> this.roleName = roleName;
67. }
68. }
五、配置spring配置文件、jdbc和日志属性文件、myBatis的mapper.xml文件
5.1 spring配置文件applicationContext.xml如下:
[html] view plain copy
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:aop="http://www.springframework.org/schema/aop"
5. xmlns:context="http://www.springframework.org/schema/context"
6. xmlns:tx="http://www.springframework.org/schema/tx"
7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
8. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
11. <!-- 属性配置文件 -->
12. <context:property-placeholder location="classpath:jdbc.properties"/>
13. <!-- 组件扫描,指定spring管理哪些bean -->
14. <context:component-scan base-package="com.liuhai.eshop.dao.impl,com.liuhai.eshop.service.impl"></context:component-scan>
15.
16. <!-- 注解驱动 -->
17. <tx:annotation-driven/>
18. <!-- 创建数据源 -->
19. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
20. <property name="driverClass" value="${jdbc.driverclass}"></property>
21. <property name="jdbcUrl" value="${jdbc.url}"></property>
22. <property name="user" value="${jdbc.username}"></property>
23. <property name="password" value="${jdbc.password}"></property>
24. <property name="initialPoolSize" value="${c3p0.pool.size.init}"></property>
25. <property name="minPoolSize" value="${c3p0.pool.size.min}"></property>
26. <property name="maxPoolSize" value="${c3p0.pool.size.max}"></property>
27. <property name="acquireIncrement" value="${c3p0.pool.size.increment}"></property>
28. </bean>
29. <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
30. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
31. <property name="dataSource" ref="dataSource" />
32. <!-- 自动扫描mapping.xml文件 -->
33. <property name="mapperLocations" value="classpath:com/liuhai/eshop/mappers/*.xml"></property>
34. </bean>
35. <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
36. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
37. <property name="basePackage" value="com.liuhai.eshop.dao"></property>
38. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
39. </bean>
40. <!-- 事务管理器,service层面上实现事务管理的 -->
41. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
42. <property name="dataSource" ref="dataSource"></property>
43. </bean>
44. </beans>
5.2 jdbc属性文件jdbc.properties如下:
[html] view plain copy
1. jdbc.driverclass=com.mysql.jdbc.Driver
2. jdbc.url=jdbc\:mysql\://localhost\:3306/eshop
3. jdbc.username=root
4. jdbc.password=123456
5. c3p0.pool.size.max=10
6. c3p0.pool.size.min=2
7. c3p0.pool.size.init=3
8. c3p0.pool.size.increment=2
9.
10. hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
11. hibernate.show_sql=true
12. hibernate.hbm2ddl.auto=none
5.3 日志属性文件log4j.properties如下:
[html] view plain copy
1. log4j.rootLogger=INFO,Console,File
2. #定义日志输出目的地为控制台
3. log4j.appender.Console=org.apache.log4j.ConsoleAppender
4. log4j.appender.Console.Target=System.out
5. #可以灵活地指定日志输出格式,下面一行是指定具体的格式
6. log4j.appender.Console.layout = org.apache.log4j.PatternLayout
7. log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
8.
9. log4j.logger.java.sql.ResultSet=INFO
10. log4j.logger.org.apache=INFO
11. log4j.logger.java.sql.Connection=DEBUG
12. log4j.logger.java.sql.Statement=DEBUG
13. log4j.logger.java.sql.PreparedStatement=DEBUG
14.
15. #文件大小到达指定尺寸的时候产生一个新的文件
16. log4j.appender.File = org.apache.log4j.RollingFileAppender
17. #指定输出目录
18. log4j.appender.File.File = logs/ssm.log
19. #定义文件最大大小
20. log4j.appender.File.MaxFileSize = 10MB
21. # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
22. log4j.appender.File.Threshold =INFO
23. log4j.appender.File.layout = org.apache.log4j.PatternLayout
24. log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
5.4 myBatis的mapper.xml文件(UserMapper.xml)
[html] view plain copy
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE mapper
3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5. <mapper namespace="com.liuhai.eshop.dao.UserDao">
6. <!-- 定义缓存 一般是一级缓存,如果用同一个sqlsession 那么相同查询直接会从缓存中查找 -->
7. <cache size="1024" flushInterval="60000" eviction="LRU" readOnly="false"></cache>
8. <!-- 增加 -->
9. <insert id="add" parameterType="com.liuhai.eshop.domain.User">
10. insert into users values(null,#{userName},#{password},#{age},#{trueName},#{email},#{phone},#{roleName})
11. </insert>
12. <resultMap id="userResultMap" type="com.liuhai.eshop.domain.User" >
13. <id property="id" column="id"/>
14. <result property="userName" column="userName"/>
15. <result property="password" column="password"/>
16. <result property="age" column="age"/>
17. <result property="trueName" column="trueName" />
18. <result property="email" column="email" />
19. <result property="phone" column="phone" />
20. <result property="roleName" column="roleName" />
21. </resultMap>
22. <select id="getUserById" parameterType="Integer" resultMap="userResultMap">
23. select * from users where id=#{id}
24. </select>
25. <select id="find" parameterType="com.liuhai.eshop.domain.User" resultMap="userResultMap">
26. select * from users
27. <where>
28. <if test="userName!=null and userName!='' ">
29. and userName like #{userName}
30. </if>
31. </where>
32. <if test="start!=null and size!=null">
33. limit #{start},#{size}
34. </if>
35. </select>
36. <select id="getTotal" parameterType="Map" resultType="Long">
37. select count(*) from users
38. <where>
39. <if test="userName!=null and userName!='' ">
40. and userName like #{userName}
41. </if>
42. </where>
43. </select>
44. <!-- 用户删除 -->
45. <delete id="delete" parameterType="Integer">
46. delete from users where id = #{id}
47. </delete>
48. <!-- 用户修改 -->
49. <update id="update" parameterType="com.liuhai.eshop.domain.User">
50. update users
51. <set>
52. <if test="age != null and age != ''">age = #{age},</if>
53. <if test="userName != null and userName != ''">userName = #{userName},</if>
54. <if test="password != null and password != ''">password = #{password},</if>
55. <if test="trueName != null and trueName != ''">trueName = #{trueName},</if>
56. <if test="email != null and email != ''">email = #{email},</if>
57. <if test="phone != null and phone != ''">phone = #{phone},</if>
58. <if test="roleName != null and roleName != ''">roleName = #{roleName},</if>
59. </set>
60. where id = #{id}
61. </update>
62. </mapper>
六、创建测试类,测试数据源是否通了
以上spring框架及spring+mybatis配置基本完成,再就是创建测试类测试数据源是否通
首先创建一个mysql库的,再建立users表,创建测试类TestSpring.java如下:
[java] view plain copy
1. package com.liuhai.eshop;
2.
3. import org.junit.Test;
4. import org.springframework.context.ApplicationContext;
5. import org.springframework.context.support.ClassPathXmlApplicationContext;
6.
7. import com.liuhai.eshop.domain.User;
8. import com.liuhai.eshop.service.UserService;
9.
10. public class TestSpring {
11. @Test
12. public void TestUserService() throws Exception{
13. @SuppressWarnings("resource")
14. ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
15. UserService us=(UserService) ac.getBean("userService");
16. User user=new User();
17. user.setAge(1);
18. user.setUserName("zhangsan");
19. user.setPassword("123456");
20. user.setTrueName("张三");
21. us.add(user);
22. }
23. }
最后查询users表中是否有新插入的数据。
七、整合SpringMVC
7.1、配置spring-mvc.xml
配置里面的注释也很详细,在此就不说了,主要是自动扫描控制器,视图模式,注解的启动这三个
[html] view plain copy
1. <span style="font-size:18px;"><?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:context="http://www.springframework.org/schema/context"
5. xmlns:mvc="http://www.springframework.org/schema/mvc"
6. xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
9.
10. <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
11. <context:component-scan base-package="com.liuhai.eshop.controller"></context:component-scan>
12. <!--避免IE执行AJAX时,返回JSON出现下载文件 -->
13. <bean id="mappingJacksonHttpMessageConverter"
14. class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
15. <property name="supportedMediaTypes">
16. <list>
17. <value>text/html;charset=UTF-8</value>
18. </list>
19. </property>
20. </bean>
21. <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
22. <!-- 详细介绍:http://www.ibm.com/developerworks/cn/web/wa-restful/ -->
23. <bean
24. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
25. <property name="messageConverters">
26. <list>
27. <ref bean="mappingJacksonHttpMessageConverter" /> <!-- 对象转化为JSON转换器 -->
28. </list>
29. </property>
30. </bean>
31. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
32. <property name="prefix" value="/jsps/"></property>
33. <property name="suffix" value=".jsp"></property>
34. </bean>
35. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
36. <!-- 默认编码 -->
37. <property name="defaultEncoding" value="utf-8"></property>
38. <!-- 文件大小最大值 -->
39. <property name="maxUploadSize" value="10485760000"></property>
40. <!-- 内存中的最大值 -->
41. <property name="maxInMemorySize" value="40960"></property>
42. </bean>
43. </beans></span>
7.2、配置web.xml文件
这里面对applicationContext.xml的引入以及配置的spring-mvc的Servlet就是为了完成SSM整合,之前2框架整合不需要在此处进行任何配置。配置一样有详细注释,不多解释了。
[html] view plain copy
1. <?xml version="1.0" encoding="UTF-8"?>
2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3. xmlns="http://java.sun.com/xml/ns/javaee"
4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
5. version="3.0">
6.
7. <display-name>web 测试页面</display-name>
8. <!-- Spring和mybatis的配置文件 -->
9. <context-param>
10. <param-name>contextConfigLocation</param-name>
11. <param-value>classpath:applicationContext.xml</param-value>
12. </context-param>
13. <!-- 编码过滤器 -->
14. <filter>
15. <filter-name>encodingFilter</filter-name>
16. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
17. <async-supported>true</async-supported>
18. <init-param>
19. <param-name>encoding</param-name>
20. <param-value>UTF-8</param-value>
21. </init-param>
22. </filter>
23. <filter-mapping>
24. <filter-name>encodingFilter</filter-name>
25. <url-pattern>/*</url-pattern>
26. </filter-mapping>
27. <!-- Spring监听器:启动Web容器时,自动装配ApplicationContext的配置信息,即上面的:contextConfigLocation-->
28. <listener>
29. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
30. </listener>
31. <!-- 防止Spring内存溢出监听器 -->
32. <listener>
33. <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
34. </listener>
35. <!-- Spring MVC servlet -->
36. <servlet>
37. <servlet-name>springMVC</servlet-name>
38. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
39. <init-param>
40. <param-name>contextConfigLocation</param-name>
41. <param-value>classpath:spring-mvc.xml</param-value>
42. </init-param>
43. <load-on-startup>1</load-on-startup>
44. <async-supported>true</async-supported>
45. </servlet>
46. <servlet-mapping>
47. <servlet-name>springMVC</servlet-name>
48. <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 也可以是/-->
49. <url-pattern>*.do</url-pattern>
50. </servlet-mapping>
51. <!-- 解决由于采用spring的过滤器,导致页面引用的JS、images、CSS发生找不到的错误;也可以用使用spring mvc 的 <mvc:resources /> 注解 用来处理静态文件 -->
52. <servlet-mapping>
53. <servlet-name>default</servlet-name>
54. <url-pattern>*.css</url-pattern>
55. </servlet-mapping>
56. <servlet-mapping>
57. <servlet-name>default</servlet-name>
58. <url-pattern>*.gif</url-pattern>
59. </servlet-mapping>
60. <servlet-mapping>
61. <servlet-name>default</servlet-name>
62. <url-pattern>*.png</url-pattern>
63. </servlet-mapping>
64. <servlet-mapping>
65. <servlet-name>default</servlet-name>
66. <url-pattern>*.jpg</url-pattern>
67. </servlet-mapping>
68. <servlet-mapping>
69. <servlet-name>default</servlet-name>
70. <url-pattern>*.js</url-pattern>
71. </servlet-mapping>
72. <welcome-file-list>
73. <welcome-file>/index.jsp</welcome-file>
74. </welcome-file-list>
75. </web-app>
7.3 新建控制类controller及jsp页面之间交互
在这里使用jsp页面引入easyui集成并实现增删改查功能
userManage.jsp如下:
[html] view plain copy
1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2. <%
3. String path = request.getContextPath();
4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
5. %>
6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
7. <html>
8. <head>
9. <base href="<%=basePath%>">
10.
11. <title>My JSP 'userManage.jsp' starting page</title>
12.
13. <meta http-equiv="pragma" content="no-cache">
14. <meta http-equiv="cache-control" content="no-cache">
15. <meta http-equiv="expires" content="0">
16. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17. <meta http-equiv="description" content="This is my page">
18. <link rel="stylesheet" type="text/css" href="jquery-easyui-1.5.1/themes/default/easyui.css">
19. <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/jquery-easyui-1.5.1/themes/icon.css">
20. <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.5.1/jquery.min.js"></script>
21. <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.5.1/jquery.easyui.min.js"></script>
22. <script type="text/javascript" src="${pageContext.request.contextPath}/jquery-easyui-1.5.1/locale/easyui-lang-zh_CN.js"></script>
23. <script type="text/javascript">
24. var url;
25. function openUserAddDialog() {
26. $("#dlg").dialog("open").dialog("setTitle", "添加用户信息");
27. url = "${pageContext.request.contextPath}/user/save.do";
28. }
29. function saveUser() {
30. $("#fm").form("submit", {
31. url : url,
32. onSubmit : function() {
33. if ($("#roleName").combobox("getValue") == "") {
34. $.messager.alert("系统提示", "请选择用户角色!");
35. return false;
36. }
37. return $(this).form("validate");
38. },
39. success : function(result) {
40. var result = eval('(' + result + ')');
41. if (result.success) {
42. $.messager.alert("系统提示", "保存成功!");
43. resetValue();
44. $("#dlg").dialog("close");
45. $("#dg").datagrid("reload");
46. } else {
47. $.messager.alert("系统提示", "保存失败!");
48. return;
49. }
50. }
51. });
52. }
53. function searchUser() {
54. $("#dg").datagrid('load', {
55. "userName" : $("#s_userName").val()
56. });
57. }
58. function resetValue() {
59. $("#userName").val("");
60. $("#password").val("");
61. $("#trueName").val("");
62. $("#email").val("");
63. $("#phone").val("");
64. $("#roleName").combobox("setValue", "");
65. }
66. function deleteUser() {
67. var selectedRows = $("#dg").datagrid("getSelections");
68. if (selectedRows.length == 0) {
69. $.messager.alert("系统提示", "请选择要删除的数据!");
70. return;
71. }
72. var strIds = [];
73. for ( var i = 0; i < selectedRows.length; i++) {
74. strIds.push(selectedRows[i].id);
75. }
76. var ids = strIds.join(",");
77. $.messager.confirm("系统提示", "您确定要删除这<font color=red>"
78. + selectedRows.length + "</font>条数据吗?", function(r) {
79. if (r) {
80. $.post("${pageContext.request.contextPath}/user/delete.do", {
81. ids : ids
82. }, function(result) {
83. if (result.success) {
84. $.messager.alert("系统提示", "数据已成功删除!");
85. $("#dg").datagrid("reload");
86. } else {
87. $.messager.alert("系统提示", "数据删除失败,请联系系统管理员!");
88. }
89. }, "json");
90. }
91. });
92. }
93. function openUserModifyDialog() {
94. var selectedRows = $("#dg").datagrid("getSelections");
95. if (selectedRows.length != 1) {
96. $.messager.alert("系统提示", "请选择一条要编辑的数据!");
97. return;
98. }
99. var row = selectedRows[0];
100. $("#dlg").dialog("open").dialog("setTitle", "编辑用户信息");
101. $("#fm").form("load", row);
102. url = "${pageContext.request.contextPath}/user/save.do?id=" + row.id;
103. }
104. </script>
105. </head>
106.
107. <body style="margin: 1px">
108. <table id="dg" title="用户管理" class="easyui-datagrid" fitColumns="true"
109. pagination="true" rownumbers="true"
110. url="${pageContext.request.contextPath}/user/list.do" fit="true"
111. toolbar="#tb">
112. <thead>
113. <tr>
114. <th field="cb" checkbox="true" align="center"></th>
115. <th field="id" width="50" align="center">编号</th>
116. <th field="userName" width="50" align="center">用户名</th>
117. <th field="password" width="50" align="center">密码</th>
118. <th field="trueName" width="50" align="center">真实姓名</th>
119. <th field="email" width="50" align="center">邮件</th>
120. <th field="phone" width="50" align="center">联系电话</th>
121. <th field="roleName" width="50" align="center">角色</th>
122. </tr>
123. </thead>
124. </table>
125. <div id="tb">
126. <a href="javascript:openUserAddDialog()" class="easyui-linkbutton"
127. iconCls="icon-add" plain="true">添加</a> <a
128. href="javascript:openUserModifyDialog()" class="easyui-linkbutton"
129. iconCls="icon-edit" plain="true">修改</a> <a
130. href="javascript:deleteUser()" class="easyui-linkbutton"
131. iconCls="icon-remove" plain="true">删除</a>
132. <div>
133. 用户名: <input type="text" id="s_userName" size="20"
134. οnkeydοwn="if(event.keyCode == 13)searchUser()" /> <a
135. href="javascript:searchUser()" class="easyui-linkbutton"
136. iconCls="icon-search" plain="true">查询</a>
137. </div>
138. <div id="dlg-buttons">
139. <a href="javascript:saveUser()" class="easyui-linkbutton"
140. iconCls="icon-ok">保存</a> <a href="javascript:closeUserDialog()"
141. class="easyui-linkbutton" iconCls="icon-cancel">关闭</a>
142. </div>
143. <div id="dlg" class="easyui-dialog"
144. style="width: 730px;height:280px;padding:10px 10px;" closed="true"
145. buttons="#dlg-buttons">
146. <form method="post" id="fm">
147. <table cellspacing="8px;">
148. <tr>
149. <td>用户名:</td>
150. <td><input type="text" id="userName" name="userName"
151. class="easyui-validatebox" required="true" /> <span
152. style="color: red">*</span>
153. </td>
154. <td> </td>
155. <td>密码:</td>
156. <td><input type="password" id="password" name="password"
157. class="easyui-validatebox" required="true" /> <span
158. style="color: red">*</span>
159. </td>
160. </tr>
161. <tr>
162. <td>真实姓名:</td>
163. <td><input type="text" id="trueName" name="trueName"
164. class="easyui-validatebox" required="true" /> <span
165. style="color: red">*</span>
166. </td>
167. <td> </td>
168. <td>邮箱:</td>
169. <td><input type="text" id="email" name="email"
170. validType="email" class="easyui-validatebox" required="true" /> <span
171. style="color: red">*</span>
172. </td>
173. </tr>
174. <tr>
175. <td>联系电话:</td>
176. <td><input type="text" id="phone" name="phone"
177. class="easyui-validatebox" required="true" /> <span
178. style="color: red">*</span>
179. </td>
180. <td> </td>
181. <td>用户角色:</td>
182. <td><select name="roleName" class="easyui-combobox"
183. id="roleName" style="width: 154px;" editable="false"
184. panelHeight="auto">
185. <option value="">请选择角色</option>
186. <option value="系统管理员">系统管理员</option>
187. <option value="销售主管">销售主管</option>
188. <option value="客户经理">客户经理</option>
189. <option value="高管">高管</option>
190. </select> <span style="color: red">*</span>
191. </td>
192. </tr>
193. </table>
194. </form>
195. </div>
196. </div>
197. </body>
198. </html>
UserController.java
[java] view plain copy
1. package com.liuhai.eshop.controller;
2.
3. import java.io.File;
4. import java.io.IOException;
5. import java.util.HashMap;
6. import java.util.List;
7. import java.util.Map;
8.
9. import javax.annotation.Resource;
10. import javax.servlet.http.HttpServletRequest;
11. import javax.servlet.http.HttpServletResponse;
12.
13. import net.sf.json.JSONArray;
14. import net.sf.json.JSONObject;
15.
16. import org.apache.commons.io.FileUtils;
17. import org.slf4j.Logger;
18. import org.slf4j.LoggerFactory;
19. import org.springframework.http.HttpStatus;
20. import org.springframework.http.ResponseEntity;
21. import org.springframework.stereotype.Controller;
22. import org.springframework.ui.Model;
23. import org.springframework.web.bind.annotation.RequestMapping;
24. import org.springframework.web.bind.annotation.RequestMethod;
25. import org.springframework.web.bind.annotation.RequestParam;
26. import org.springframework.web.bind.annotation.ResponseBody;
27. import org.springframework.web.multipart.MultipartFile;
28.
29. import com.liuhai.eshop.domain.User;
30. import com.liuhai.eshop.service.UserService;
31. import com.liuhai.eshop.util.PageBean;
32. import com.liuhai.eshop.util.ResponseUtil;
33. import com.liuhai.eshop.util.StringUtil;
34.
35. @Controller
36. @RequestMapping("/user")
37. public class UserController {
38. private static Logger log=LoggerFactory.getLogger(UserController.class);
39. @Resource
40. private UserService userService;
41.
42. @RequestMapping("/showUser.do")
43. public String toIndex(HttpServletRequest request,Model model){
44. System.out.println("liuhaitest");
45. return "showUser";
46. }
47. // /user/test.do?id=1
48. @RequestMapping(value="/test.do",method=RequestMethod.GET)
49. public String test(HttpServletRequest request,Model model){
50. int userId = Integer.parseInt(request.getParameter("id"));
51. System.out.println("userId:"+userId);
52. User user=null;
53. if (userId==1) {
54. user = new User();
55. user.setAge(11);
56. user.setId(1);
57. user.setPassword("123");
58. user.setUserName("javen");
59. }
60. log.debug(user.toString());
61. model.addAttribute("user", user);
62. return "index";
63. }
64. // /user/showUser.do?id=1
65. @RequestMapping(value="/showUser.do",method=RequestMethod.GET)
66. public String toindex(HttpServletRequest request,Model model){
67. int userId = Integer.parseInt(request.getParameter("id"));
68. System.out.println("userId:"+userId);
69. User user = this.userService.getUserById(userId);
70. log.debug(user.toString());
71. model.addAttribute("user", user);
72. return "showUser";
73. }
74.
75. // /user/showUser2.do?id=1
76. @RequestMapping(value="/showUser2.do",method=RequestMethod.GET)
77. public String toIndex2(@RequestParam("id") String id,Model model){
78. int userId = Integer.parseInt(id);
79. System.out.println("userId:"+userId);
80. User user = this.userService.getUserById(userId);
81. log.debug(user.toString());
82. model.addAttribute("user", user);
83. return "showUser";
84. }
85.
86. // /user/jsontype.do?id=1
87. @RequestMapping(value="/jsontype.do",method=RequestMethod.GET)
88. public @ResponseBody User getUserInJson(@RequestParam("id") String id,Map<String, Object> model){
89. int userId = Integer.parseInt(id);
90. System.out.println("userId:"+userId);
91. User user = this.userService.getUserById(userId);
92. log.info(user.toString());
93. return user;
94. }
95. // /user/jsontype2.do?id=1
96. @RequestMapping(value="/jsontype2.do",method=RequestMethod.GET)
97. public ResponseEntity<User> getUserInJson2(@RequestParam("id") String id,Map<String, Object> model){
98. int userId = Integer.parseInt(id);
99. System.out.println("userId:"+userId);
100. User user = this.userService.getUserById(userId);
101. log.info(user.toString());
102. return new ResponseEntity<User>(user,HttpStatus.OK);
103. }
104.
105. //文件上传页面
106. @RequestMapping(value="/upload.do")
107. public String showUploadPage(){
108. return "file";
109. }
110. //文件上传
111. @RequestMapping(value="/doUpload.do",method=RequestMethod.POST)
112. public String doUploadFile(@RequestParam("file")MultipartFile file) throws IOException{
113. if (!file.isEmpty()) {
114. log.info("Process file:{}",file.getOriginalFilename());
115. }
116. FileUtils.copyInputStreamToFile(file.getInputStream(), new File("E:\\",System.currentTimeMillis()+file.getOriginalFilename()));
117. return "succes";
118. }
119. /**
120. * 用户管理页面
121. * @return
122. */
123. @RequestMapping(value="/userManage.do")
124. public String userManagePage(){
125. return "userManage";
126. }
127. /**
128. * 添加或者修改
129. * @param user
130. * @param res
131. * @return
132. * @throws Exception
133. */
134. @RequestMapping("/save.do")
135. public String save(User user,HttpServletResponse res) throws Exception{
136. //操作记录条数,初始化为0
137. int resultTotal = 0;
138. if (user.getId() == null) {
139. resultTotal = userService.add(user);
140. }else{
141. resultTotal = userService.update(user);
142. }
143. JSONObject jsonObject = new JSONObject();
144. if(resultTotal > 0){ //说明修改或添加成功
145. jsonObject.put("success", true);
146. }else{
147. jsonObject.put("success", false);
148. }
149. ResponseUtil.write(res, jsonObject);
150. return null;
151. }
152. /**
153. * 用户分页查询
154. * @param page
155. * @param rows
156. * @param s_user
157. * @param res
158. * @return
159. * @throws Exception
160. */
161. @RequestMapping("/list.do")
162. public String list(@RequestParam(value="page",required=false) String page,@RequestParam(value="rows",required=false) String rows,User s_user,HttpServletResponse res) throws Exception{
163. PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
164. Map<String,Object> map=new HashMap<String,Object>();
165. map.put("userName", StringUtil.formatLike(s_user.getUserName()));
166. map.put("start", pageBean.getStart());
167. map.put("size", pageBean.getPageSize());
168. List<User> userList=userService.find(map);
169. Long total=userService.getTotal(map);
170. JSONObject result=new JSONObject();
171. JSONArray jsonArray=JSONArray.fromObject(userList);
172. result.put("rows", jsonArray);
173. result.put("total", total);
174. ResponseUtil.write(res, result);
175. return null;
176. }
177. /**
178. * 删除用户
179. * @param ids
180. * @param res
181. * @return
182. * @throws Exception
183. */
184. @RequestMapping("/delete.do")
185. public String delete(@RequestParam(value="ids") String ids,HttpServletResponse res) throws Exception{
186. String[] idStr = ids.split(",");
187. JSONObject jsonObject = new JSONObject();
188. for (String id : idStr) {
189. userService.delete(Integer.parseInt(id));
190. }
191. jsonObject.put("success", true);
192. ResponseUtil.write(res, jsonObject);
193. return null;
194. }
195. }
7.4其它工具类及jsp页面
分页Model类PageBean.java
[java] view plain copy
1. package com.liuhai.eshop.util;
2. /**
3. * 分页Model类
4. * @author Administrator
5. *
6. */
7. public class PageBean {
8. private int page; // 第几页
9. private int pageSize; // 每页记录数
10. private int start; // 起始页
11. public PageBean(int page, int pageSize) {
12. super();
13. this.page = page;
14. this.pageSize = pageSize;
15. }
16. public int getPage() {
17. return page;
18. }
19. public void setPage(int page) {
20. this.page = page;
21. }
22. public int getPageSize() {
23. return pageSize;
24. }
25. public void setPageSize(int pageSize) {
26. this.pageSize = pageSize;
27. }
28. public int getStart() {
29. return (page-1)*pageSize;
30. }
31. }
用于返回json数据ResponseUtil.java
[java] view plain copy
1. package com.liuhai.eshop.util;
2.
3. import java.io.PrintWriter;
4.
5. import javax.servlet.http.HttpServletResponse;
6. /***
7. * 主要用于返回json数据
8. * @author Administrator
9. */
10. public class ResponseUtil {
11. public static void write(HttpServletResponse response,Object object)throws Exception{
12. response.setContentType("text/html;charset=utf-8");
13. PrintWriter out=response.getWriter();
14. out.println(object);
15. out.flush();
16. out.close();
17. }
18. }
字符串工具类StringUtil.java如下:
[java] view plain copy
1. package com.liuhai.eshop.util;
2. /***
3. * 字符串工具类
4. * @author Administrator
5. *
6. */
7. public class StringUtil {
8. /**
9. * 判断是否是空
10. * @param str
11. * @return
12. */
13. public static boolean isEmpty(String str){
14. if(str==null||"".equals(str.trim())){
15. return true;
16. }else{
17. return false;
18. }
19. }
20.
21. /**
22. * 判断是否不是空
23. * @param str
24. * @return
25. */
26. public static boolean isNotEmpty(String str){
27. if((str!=null)&&!"".equals(str.trim())){
28. return true;
29. }else{
30. return false;
31. }
32. }
33.
34. /**
35. * 格式化模糊查询
36. * @param str
37. * @return
38. */
39. public static String formatLike(String str){
40. if(isNotEmpty(str)){
41. return "%"+str+"%";
42. }else{
43. return null;
44. }
45. }
46. }
上传文件file.jsp页面
[html] view plain copy
1. <%@ page language="java" contentType="text/html; charset=utf-8"
2. pageEncoding="utf-8"%>
3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4. <html>
5. <head>
6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7. <title>Insert title here</title>
8. </head>
9. <body>
10. <h1>上传文件</h1>
11. <form method="post" action="../user/doUpload.do" enctype="multipart/form-data">
12. <input type="file" name="file"/>
13. <input type="submit" value="上传文件"/>
14.
15. </form>
16. </body>
17. </html>
八、项目结果及目录
转自:http://blog.csdn.net/liuhaiabc/article/details/53899519