前言:在使用IntelliJ IDEA和Maven管理搭建Web开发环境(以Spring MVC为例)(一)中已经介绍了如何对web基础环境进行搭建,这里主要演示,如何对spring环境进行搭建,然后组合成一个完整的spring MVC Web项目。


Spring环境的搭建

1.通过Maven可以轻松的配置,spring环境,具体pom文件如下所示

  1. <!--设置版本信息-->
  2. <properties>
  3. <file.encoding>UTF-8</file.encoding>
  4. <spring.version>4.2.1.RELEASE</spring.version>
  5. <mysql.version>5.1.20</mysql.version>
  6. <servlet.version>2.5</servlet.version>
  7. <commons-dbcp.version>1.4</commons-dbcp.version>
  8. <commons-pool.version>1.4</commons-pool.version>
  9. <aspectj.version>1.8.1</aspectj.version>
  10. </properties>
  11. <!--定义依赖-->
  12. <dependencies>
  13. <!--spring相关依赖-->
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-core</artifactId>
  17. <version>${spring.version}</version>
  18. </dependency>
  19.  
  20. <dependency>
  21. <groupId>org.springframework</groupId>
  22. <artifactId>spring-beans</artifactId>
  23. <version>${spring.version}</version>
  24. </dependency>
  25.  
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-context</artifactId>
  29. <version>${spring.version}</version>
  30. </dependency>
  31.  
  32. <dependency>
  33. <groupId>org.springframework</groupId>
  34. <artifactId>spring-context-support</artifactId>
  35. <version>${spring.version}</version>
  36. </dependency>
  37.  
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-jdbc</artifactId>
  41. <version>${spring.version}</version>
  42. </dependency>
  43.  
  44. <dependency>
  45. <groupId>org.springframework</groupId>
  46. <artifactId>spring-tx</artifactId>
  47. <version>${spring.version}</version>
  48. </dependency>
  49.  
  50. <dependency>
  51. <groupId>org.springframework</groupId>
  52. <artifactId>spring-webmvc</artifactId>
  53. <version>${spring.version}</version>
  54. </dependency>
  55.  
  56. <dependency>
  57. <groupId>org.springframework</groupId>
  58. <artifactId>spring-web</artifactId>
  59. <version>${spring.version}</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>org.aspectj</groupId>
  63. <artifactId>aspectjweaver</artifactId>
  64. <version>${aspectj.version}</version>
  65. </dependency>
  66. <!-- 数据库驱动依赖-->
  67. <dependency>
  68. <groupId>mysql</groupId>
  69. <artifactId>mysql-connector-java</artifactId>
  70. <version>${mysql.version}</version>
  71. </dependency>
  72.  
  73. <!-- 连接池依赖-->
  74. <dependency>
  75. <groupId>commons-dbcp</groupId>
  76. <artifactId>commons-dbcp</artifactId>
  77. <version>${commons-dbcp.version}</version>
  78. </dependency>
  79. <dependency>
  80. <groupId>commons-pool</groupId>
  81. <artifactId>commons-pool</artifactId>
  82. <version>${commons-pool.version}</version>
  83. </dependency>
  84. <!-- web类库依赖-->
  85. <dependency>
  86. <groupId>javax.servlet</groupId>
  87. <artifactId>servlet-api</artifactId>
  88. <version>${servlet.version}</version>
  89. <scope>provided</scope>
  90. </dependency>
  91. <dependency>
  92. <groupId>javax.servlet</groupId>
  93. <artifactId>jstl</artifactId>
  94. <version>1.2</version>
  95. </dependency>
  96.  
  97. <!-- 日志依赖-->
  98. <dependency>
  99. <groupId>log4j</groupId>
  100. <artifactId>log4j</artifactId>
  101. <version>1.2.17</version>
  102. </dependency>
  103. </dependencies>
  104.  
  105. <build>
  106.  
  107. <plugins>
  108. <plugin>
  109. <groupId>org.apache.maven.plugins</groupId>
  110. <artifactId>maven-surefire-plugin</artifactId>
  111. <version>2.17</version>
  112. <configuration>
  113. <parallel>methods</parallel>
  114. <threadCount>10</threadCount>
  115. </configuration>
  116.  
  117. </plugin>
  118.  
  119. </plugins>
  120.  
  121. </build>

注:pom文件中除了spring所需jar包,还对数据库驱动等相关信息,进行了依赖配置。

2.在Resource目录下创建spring配置文件,如下图所示

3.由于需演示一个相对完整的Spring MVC Web项目,因此建立如下所示的目录结构

注:这里主要演示一个登录界面,当登录成功后,进入主界面(为了简单这里就不演示日志操作了)。因此接下来需要创建一个数据库。

4.创建数据库

  1. DROP DATABASE IF EXISTS springtestdb;
  2. CREATE DATABASE springtestdb DEFAULT CHARACTER SET utf8;
  3. USE springtestdb;
  4. ##建表
  5. CREATE TABLE `t_user` (
  6. `user_id` int(11) NOT NULL auto_increment,
  7. `user_name` varchar(30) default NULL,
  8. `password` varchar(32) default NULL,
  9. PRIMARY KEY (`user_id`)
  10. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
  11.  
  12. ##插入初始化数据
  13. INSERT INTO t_user (user_name,password)
  14. VALUES('admin','');
  15. COMMIT;

5.编写相应代码

User:

  1. public class User implements Serializable
  2. {
  3. private int userid;
  4. private String username;
  5. private String password;
  6.  
  7. public int getUserid()
  8. {
  9. return userid;
  10. }
  11.  
  12. public void setUserid(int userid)
  13. {
  14. this.userid = userid;
  15. }
  16.  
  17. public String getUsername()
  18. {
  19. return username;
  20. }
  21.  
  22. public void setUsername(String username)
  23. {
  24. this.username = username;
  25. }
  26.  
  27. public String getPassword()
  28. {
  29. return password;
  30. }
  31.  
  32. public void setPassword(String password)
  33. {
  34. this.password = password;
  35. }
  36.  
  37. @Override
  38. public String toString()
  39. {
  40. return "User[" +
  41. "userid=" + userid +
  42. ", username='" + username + '\'' +
  43. ", password='" + password + '\'' +
  44. ']';
  45. }
  46. }

UserDao:

  1. @Repository("userDao")
  2. public class UserDao
  3. {
  4. private static Logger logger = Logger.getLogger(UserDao.class);
  5. //如果直接使用注解进行属性的修饰,可以不用set函数
  6. @Resource(name = "jdbcTemplate")
  7. private JdbcTemplate jdbcTemplate;
  8.  
  9. /**
  10. * 获取匹配用户的个数
  11. * @param username
  12. * @param password
  13. * @return
  14. */
  15. public int getMatchCount(String username, String password)
  16. {
  17. String querysql = "select count(*) from t_user where user_name=? and password=?";
  18.  
  19. int rows = jdbcTemplate.queryForObject(querysql, Integer.class, username, password);
  20.  
  21. logger.info("rows=" + rows);
  22. return rows;
  23. }
  24. }

UserService:

  1. @Transactional
  2. @Service("userService")
  3. public class UserService
  4. {
  5. //直接通过在属性上进行配置注入,就可以不用写set方法了
  6. @Resource(name = "userDao")
  7. private UserDao userDao;
  8.  
  9. @Resource(name="loginlogDao")
  10. private LoginLogDao loginLogDao;
  11.  
  12. /**
  13. * 判断用户名与密码是否正确
  14. * @param useranme
  15. * @param password
  16. * @return
  17. */
  18. public boolean hasMatchUser(String useranme,String password)
  19. {
  20. int matchcount=userDao.getMatchCount(useranme,password);
  21. return matchcount>0;
  22. }
  23. }

 LoginController:

  1. @Controller("loginController")
  2. public class LoginController
  3. {
  4. private static Logger logger=Logger.getLogger(LoginController.class);
  5.  
  6. @Resource(name = "userService")
  7. private UserService userService;
  8.  
  9. @RequestMapping(value = "/index.html") //默认会 访问index.html页面
  10. public String loginPage()
  11. {
  12. return "login";
  13. }
  14.  
  15. @RequestMapping(value = "/loginCheck.html")
  16. public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand)
  17. {
  18. String username=loginCommand.getUsername();
  19. String password=loginCommand.getPassword();
  20. boolean isvaliduser = userService.hasMatchUser(username, password);
  21.  
  22. if (!isvaliduser)
  23. {
  24. return new ModelAndView("login", "error", "用户名或密码错误");
  25. }
  26. else
  27. {
  28. logger.info("username="+username+" password="+password);
  29.  
  30. request.getSession().setAttribute("user", user);
  31. return new ModelAndView("main");
  32.  
  33. }
  34.  
  35. }
  36.  
  37. }

LoginCommand:

  1. public class LoginCommand
  2. {
  3. private String username;
  4. private String password;
  5.  
  6. public String getUsername()
  7. {
  8. return username;
  9. }
  10.  
  11. public void setUsername(String username)
  12. {
  13. this.username = username;
  14. }
  15.  
  16. public String getPassword()
  17. {
  18. return password;
  19. }
  20.  
  21. public void setPassword(String password)
  22. {
  23. this.password = password;
  24. }
  25. }

login.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4. <html>
  5. <head>
  6. <title>测试</title>
  7. </head>
  8. <body>
  9. <c:if test="${!empty error}">
  10. <font color="red"><c:out value="${error}" /></font>
  11. </c:if>
  12. <form action="<c:url value="/loginCheck.html"/>" method="post">
  13. 用户名:
  14. <input type="text" name="username">
  15. <br>
  16. 密 码:
  17. <input type="password" name="password">
  18. <br>
  19. <input type="submit" value="登录" />
  20. <input type="reset" value="重置" />
  21. </form>
  22. </body>
  23. </html>

main.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8. <title>测试</title>
  9. </head>
  10. <body>
  11. ${user.username},欢迎您!
  12. </body>
  13. </html>

6.进行相应配置

spring配置:

  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:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  12. http://www.springframework.org/schema/tx
  13. http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  14. http://www.springframework.org/schema/aop
  15. http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
  16. <!-- 开启注解-->
  17. <context:component-scan base-package="com.springlearning"/>
  18.  
  19. <!-- 配置数据源-->
  20. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  21. destroy-method="close"
  22. p:driverClassName="com.mysql.jdbc.Driver"
  23. p:url="jdbc:mysql://localhost:3307/springtestdb"
  24. p:username="root"
  25. p:password=""/>
  26.  
  27. <!-- 配置jdbcTemplate-->
  28. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
  29. p:dataSource-ref="dataSource"/>
  30.  
  31. <!-- 配置jdbc事务管理器-->
  32. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  33. <!-- 注入数据源 -->
  34. <property name="dataSource" ref="dataSource"/>
  35. </bean>
  36.  
  37. <aop:config proxy-target-class="true">
  38. <aop:pointcut id="serviceMethod"
  39. expression="(execution(* com.springlearning.service..*(..)))" />
  40. <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
  41. </aop:config>
  42. <tx:advice id="txAdvice" transaction-manager="txManager">
  43. <tx:attributes>
  44. <tx:method name="*" />
  45. </tx:attributes>
  46. </tx:advice>
  47.  
  48. </beans>

web.xml配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  6. version="2.5" id="webapp_id">
  7. <!--配置监听器 --> <!--以便在服务器启动的时候,加载spring配置文件-->
  8. <listener>
  9. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  10. </listener>
  11. <!--配置spring配置文件-->
  12. <context-param>
  13. <param-name>contextConfigLocation</param-name>
  14. <param-value>classpath:spring/springconfig.xml</param-value>
  15. </context-param>
  16.  
  17. <servlet>
  18. <servlet-name>learning</servlet-name>
  19. <servlet-class>
  20. org.springframework.web.servlet.DispatcherServlet
  21. </servlet-class>
  22. <load-on-startup>3</load-on-startup>
  23. </servlet>
  24. <servlet-mapping>
  25. <servlet-name>learning</servlet-name>
  26. <url-pattern>*.html</url-pattern>
  27. </servlet-mapping>
  28.  
  29. <welcome-file-list>
  30. <welcome-file>index.html</welcome-file> <!--这里配置的默认页面和LoginController中对应名称需要一致-->
  31. </welcome-file-list>
  32.  
  33. </web-app>

learning-servlet.xml配置:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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-4.0.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-4.0.xsd">
  9.  
  10. <!-- 开启web包的spring注解-->
  11. <context:component-scan base-package="com.springlearning.web"/>
  12.  
  13. <!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面 -->
  14. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  15. p:viewClass="org.springframework.web.servlet.view.JstlView"
  16. p:prefix="/WEB-INF/jsp/"
  17. p:suffix=".jsp"/>
  18.  
  19. </beans>

至此,编写和配置完所有文件,下面进行发布(不要忘记Put into Output Root,具体步骤请参看看上一篇文章)。当正确输入用户名和密码后,效果如下:

至此通过IDEA与Maven搭建Spring MVC Web项目成功。


by Shawn Chen,2018.1.11日,下午。

使用IntelliJ IDEA和Maven管理搭建Web开发环境(以Spring MVC为例)(二)的更多相关文章

  1. 使用IntelliJ IDEA和Maven管理搭建Web开发环境(以Spring MVC为例)(一)

    前言:原来一直使用MyEclipse,换工作后,新公司使用IDEA,初识IDEA发现,哇,它的快捷键可真多啊,但是一路用下来,觉得非常的好用,特别是利用Maven管理,那简直叫一个爽.当然笔者在使用过 ...

  2. 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境

    使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境 前言:原来一直使用Eclipse,换工作后使用IDEA,初识IDEA发现,哇,它的快捷键可真多啊,但是一路用下来,觉得 ...

  3. PyCharm社区版+Django搭建web开发环境-2

    接上一篇:PyCharm社区版+Django搭建web开发环境-1 1. 创建好django项目并建立app应用:web 2. setting.py:配置app应用 INSTALLED_APPS = ...

  4. 【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...

  5. 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener

    [Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...

  6. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  7. 【Java Web开发学习】Spring MVC文件上传

    [Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...

  8. 【Java Web开发学习】Spring MVC异常统一处理

    [Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...

  9. 搭建Web开发环境JavaEE_Eclipse

    1. 下载和安装1.1 下载JDK在Java官方网站下载最新版本的 Java SE:  http://www.oracle.com/technetwork/java/javase/downloads/ ...

随机推荐

  1. Centos 6.8 定时任务Crontab服务

    一,crontab服务的简介 二.安装cron服务 安装cron服务 : --yum install vixie-cron --yum install crontabs 检出cron服务 检查cron ...

  2. C# Winform打包部署时添加注册表信息实现开机自启动

    1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下 2. 写入注册表的方式有两种 a.在生成安装程序时配置 b.在程序运行时,动态配置 方法一:使用VS2010自带的打包 ...

  3. [android] sharedPreference入门

    /********************2016年5月6日 更新**************************************/ 知乎:Android 如何实现判断用户首次使用,比如首 ...

  4. 【Linux】nginx常用命令

    相关内容链接 Centos之安装Nginx及注意事项 [nginx]详细配置说明 nginx常用命令 [重新加载配置]sudo nginx -s reload [打开nginx配置]sudo vim ...

  5. 反射demo(拷贝一个对象)

    经过了上一次对反射的初步认知,最近又接触到了后,做了一个小demo,感觉这次带了一点理解去做的,比第一次接触反射好了许多. 上次学习的链接,有一些反射用的基础语句.https://www.cnblog ...

  6. JS实现缓动效果-让div运动起来

    var tween = { linear:function(t,b,c,d){ return c*t/d + b; }, easeIn:function(t,b,c,d){ return c * ( ...

  7. 洛谷P3247 [HNOI2016]最小公倍数(分块 带撤销加权并查集)

    题意 题目链接 给出一张带权无向图,每次询问\((u, v)\)之间是否存在一条路径满足\(max(a) = A, max(b) = B\) Sol 这题居然是分块..想不到想不到..做这题的心路历程 ...

  8. https遇到自签名证书/信任证书

    对于CA机构颁发的证书Okhttp默认支持 可以直接访问 但是对于自定义的证书就不可以了(如:https ://kyfw.12306.cn/otn/), 需要加入Trust 下面分两部分来写,一是信任 ...

  9. Django+MongoDB批量插入数据

    在百万级和千万级数据级别进行插入,pymongo的insert_many()方法有着很强的优势.原因是每次使用insert_one()方法进行插入数据,都是要对数据库服务器进行一次访问,而这样的访问是 ...

  10. ASP.NET Core 入门教程 1、使用ASP.NET Core 构建第一个Web应用

    一.前言 1.本文主要内容 Visual Studio Code 开发环境配置 使用 ASP.NET Core 构建Web应用 ASP.NET Core Web 应用启动类说明 ASP.NET Cor ...