1.
提前下载好eclipse,mysql,tomcat9
![]()
下载apache-maven-3.6.3,放到C盘。
修改配置文件:C:\apache-maven-3.6.3\conf\settings.xml
<localRepository>C:\apache-maven-3.6.3\repository</localRepository>
apache-maven-3.6.3下新建目录:repository
2.配置eclipse
maven配置:


jdk配置、server配置、jsp配置:



3.创建maven project


4、配置maven project
选中项目,右击鼠标,选中Properties




这步如果提示WebContent已存在之类的报错,可以删除WebContent文件夹,再次尝试。
5.pom.xml、web.xml、springmvc.xml、spring.xml、mybatis-config.xml、jdbc.properties文件的创建.
【如果包名不一样,别忘记修改成自己的项目包名】
内容分别如下:
pom.xml(maven自动根据dependency配置,下载依赖包。)
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.fawiec.etp.ssmproject</groupId> <artifactId>ssmproject</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- 引入spring框架对应的jar --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.16.RELEASE</version> </dependency> <!-- 引入aop框架对应的实现spring-aspectjs --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.1.16.RELEASE</version> </dependency> <!-- 引入AOP联盟对应jar --> <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance --> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <!-- 进入spring-jdbc.jar --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.16.RELEASE</version> </dependency> <!-- 引入spring-webmvc对应的jar --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.16.RELEASE</version> </dependency> <!-- 引入mybatis框架对应的jar --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!-- 引入mybatis与spring框架整合的jar,mybatis-spring.jar --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.4</version> </dependency> <!-- 引入mysql数据库的驱动 --> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <!-- 引入数据库连接池(采用阿里的druid) --> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.22</version> </dependency> <!-- 引入jstl.jar --> <!-- https://mvnrepository.com/artifact/jstl/jstl --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 引入mybatis的缓存框架ehcache --> <!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache --> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.2.1</version> </dependency> <!-- 引入校验框架hibernate-validation(第三发的校验框架) --> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.20.Final</version> </dependency> <!-- 引入jackson,用来处理json --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.4</version> </dependency> <!-- 引入mybatis的分页插件 --> <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.11</version> </dependency> <!-- 引入文件上传组件Apache fileupload --> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <!-- 引入ognl(mybatis中的动态SQL) --> <!-- https://mvnrepository.com/artifact/ognl/ognl --> <dependency> <groupId>ognl</groupId> <artifactId>ognl</artifactId> <version>3.2.13</version> </dependency> <!-- 引入mybatis的逆向工程 --> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> </dependencies> </project>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <!-- 配置上下文的监听器ContextLoadListener,该类在spring-web.jar包中,其作用: 在web项目启动的同时加载并启动spring框架,同时我们也需要给该监听器配置一个上下文的初始化参数,目的是用来指定 spring框架的核心配置文件名称及路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置前端控制器DispatcherServlet,该类在spring-webmvc.jar包中,其作用: 1.在web项目启动的同时启动springmvc框架 2.把所有的用户请求都交给springmvc框架来处理 --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 给该前端控制器配置一个初始化参数contextConfigLocation,目的用来动态指定springmvc框架的核心配置文件名称及路径, 如果没有配置该初始化参数的话,默认会到WEB-INF/目录下查找名称为<servlet-name>-servlet.xml作为springmvc框架的核心配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <!-- 注意此处配置的路径为反斜杠“/”,注意不能配置成"/* --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 3.配置编码的过滤器CharacterEncodingFilter,其作用是统一全站编码 ,该类在spring-web.jar包中--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 配置相关的初始化参数,如encoding,用来指定所采用的编码 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!-- 配置初始化参数forceRequestEncoding,用来指定请求前的编码设置为UTF-8 --> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <!-- 配置初始化参数forceResponseEncoding,用来指定响应前的编码设置为UTF-8 --> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置过滤器HiddenHttpMethodFilter,其作用,如果采用基于REST风格的开发,需要把一些POST请求转换成PUT,DELETE等时就需要使用该过滤器 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置开启类扫描的注解解析器配置,这里主要针对@Controller注解 --> <context:component-scan base-package="com.fawiec.etp.ssmproject.controller"/> <!-- 配置开启依赖注入的注解解析器配置,主要针对@Autowired,@Resource等注解 --> <context:annotation-config /> <!-- 配置对于静态资源的放行操作配置(把静态资源交给web服务器来处理) --> <mvc:default-servlet-handler/> <!-- 配置开启基于注解的处理器映射器与适配器的配置,默认是开启的 --> <mvc:annotation-driven validator="validation"/> <!-- 配置视图解析器,该类在spring-webmvc.jar包中 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 配置加载校验错误的属性提示文件,该类在spring-context.jar包中 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 通过该basename属性来指定对应的错误消息提示文件的位置及名称 --> <property name="basename" value="classpath:message"/> </bean> <!-- 注册校验器,该类也是在spring-context.jar包中 --> <bean id="validation" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <property name="validationMessageSource" ref="messageSource"/> </bean> </beans>
spring.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置开启类扫描的注解解析器 --> <context:component-scan base-package="com.fawiec.etp.ssmproject"> <!-- 配置过滤掉@Controller注解,因为在springmvc.xml文件中已经进行扫描配置了 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 配置开启依赖注入的注解解析器 --> <context:annotation-config/> <!-- 引入jdbc.properties --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置数据源(druid),该类在druid.jar包中 --> <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.dburl}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> <!-- 获取设置初始化最小连接数 --> <property name="initialSize" value="${jdbc.pool.initialSize}"/> <!-- 获取设置连接池最小空闲连接数 --> <property name="minIdle" value="${jdbc.pool.minIdle}"/> <!-- 获取设置连接池最大并发使用连接数量 --> <property name="maxActive" value="${jdbc.pool.maxActive}"/> <!-- 获取设置连接最大等待时间 毫秒 --> <property name="maxWait" value="${jdbc.pool.maxWait}"/> </bean> <!-- 事务管理器TransactionManager,该类在spring-jdbc.jar包中 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="druidDataSource"/> </bean> <!-- 配置开启基于注解的事务管理器的解析器,主要针对注解@Transactional --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置SqlSessionFactory,该类在mybatis-spring.jar包中 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="druidDataSource"/> <!-- 配置整合并加载mybatis框架的核心配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- 配置基于MapperScannerConfigurer接口类扫描的方式来创建接口类的代理实现,该类在mybatis-spring.jar包中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.fawiec.etp.ssmproject.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> </beans>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- settings标签的作用,通常是用来配置一些常量的,如开启缓存,懒加载,驼峰命令等配置 --> <settings> <!-- 配置开启驼峰命名的映射配置,默认值为false --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 配置延迟加载开关 --> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> <!-- 开启二级缓存的配置 --> <setting name="cacheEnabled" value="true"/> </settings> <!-- 配置映射 --> <mappers> <package name="com.fawiec.etp.ssmproject.mapper"/> </mappers> </configuration>
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.dburl=jdbc:mysql://localhost:3306/ceshi
jdbc.user=zhangsan
jdbc.password=123456
jdbc.pool.initialSize=1
jdbc.pool.minIdle=3
jdbc.pool.maxActive=20
jdbc.pool.maxWait=60000
6.写代码

LoginUser.java:
package com.fawiec.etp.ssmproject.domain; public class LoginUser { private String userName;//用户名称 private String loginPwd;//用户登录密码 private Integer userType;//表示用户的类型,如 1:普通用户,2:管理员用户等 public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getLoginPwd() { return loginPwd; } public void setLoginPwd(String loginPwd) { this.loginPwd = loginPwd; } public Integer getUserType() { return userType; } public void setUserType(Integer userType) { this.userType = userType; } @Override public String toString() { return "LoginUser [userName=" + userName + ", loginPwd=" + loginPwd + ", userType=" + userType + "]"; } }
LoginUserMapper.java
package com.fawiec.etp.ssmproject.mapper; import org.apache.ibatis.annotations.Param; import com.fawiec.etp.ssmproject.domain.LoginUser; public interface LoginUserMapper { public LoginUser findUserByNameAndPwd(@Param("userName")String userName,@Param("loginPwd")String loginPwd); }
LoginUserMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.fawiec.etp.ssmproject.mapper.LoginUserMapper"> <!-- public LoginUser findUserByNameAndPwd(@Param("userName")String userName,@Param("loginPwd")String loginPwd); --> <select id="findUserByNameAndPwd" resultType="com.fawiec.etp.ssmproject.domain.LoginUser"> select * from tb_loginUser where userName=#{userName} and loginPwd=#{loginPwd} </select> </mapper>
LoginUserService.java
package com.fawiec.etp.ssmproject.service; import com.fawiec.etp.ssmproject.domain.LoginUser; public interface LoginUserService { public LoginUser findUserByUserNameAndPassword(String userName,String loginPwd); }
LoginUserServiceImpl.java
package com.fawiec.etp.ssmproject.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.fawiec.etp.ssmproject.domain.LoginUser; import com.fawiec.etp.ssmproject.mapper.LoginUserMapper; import com.fawiec.etp.ssmproject.service.LoginUserService; @Service @Transactional(isolation = Isolation.DEFAULT,propagation = Propagation.REQUIRED,readOnly = true) public class LoginUserServiceImpl implements LoginUserService{ @Autowired private LoginUserMapper loginUserMapper; public LoginUser findUserByUserNameAndPassword(String userName,String loginPwd) { return loginUserMapper.findUserByNameAndPwd(userName, loginPwd); } }
LoginUserController.java
package com.fawiec.etp.ssmproject.controller; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.fawiec.etp.ssmproject.domain.LoginUser; import com.fawiec.etp.ssmproject.service.LoginUserService; @Controller @RequestMapping(value="/user") public class LoginUserController { @Autowired private LoginUserService userService; @RequestMapping(value="/login",method = RequestMethod.POST) public String login(LoginUser user ,Map<String,Object> map) { System.out.println(user); LoginUser loginUser=userService.findUserByUserNameAndPassword(user.getUserName(), user.getLoginPwd()); if(loginUser!=null) { map.put("info", "["+loginUser.getUserName()+"]登录成功!"); }else { map.put("info", "用户名称或密码错误,登录失败!"); } return "login/info"; } }
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>用户登录页面</h1> <form action="${pageContext.request.contextPath }/user/login" method="post"> 用户名称:<input type="text" name="userName"/> 登录密码:<Input type="password" name="loginPwd"/> <input type="submit" value="用户登录"/> </form> </body> </html>
info.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>${info }</h1> </body> </html>
7.运行到server上,测试验证
Servers下增加Tomcat9 Server

项目添加BuildPath,增加Server Runtime,选中新建的Tomcat9 Server完成。

项目右键,Run As,然后Run On Server,启动后

输入账号密码,登陆成功:

原文:https://www.cnblogs.com/xiexieyc/p/14531347.html