这是一篇myeclipse版的利用注解整合ssm实现登录的教程
大纲:1.数据库设计
2.ssm搭建
3.实现登录
4.总结
一、数据库设计
设计数据库,建立一个数据库,名字这里我用pro,建立一张表users,该表一共有三个字段
二、ssm搭建
1.创建动态web项目
右击项目空白处--new--project
选择Dynamic Web Project,点击next,如果没有的话勾选下面的Show All Wizards,然后在上面搜索就可以找到了
Project Name:项目名称,填写好后点finish
之后如果弹出一个框你不用管,点取消就行,如果点了也没事,就是视图切换而已,在右上角如图所示点击选择java就行
2.导入jar包
我将jar包整理好定义了一个library,要用的时候导入可以了。
jar如下:
3.搭建项目架构,如下所示(为了包分开建了一个实体类)
4.编写ssm配置文件
4.1编写与数据库相关的jdbc.properties
在src根目录新建配置文件
jdbc.properties,内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/pro?useUnicode=true&characterEncoding=utf-8
username=root
password=root
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最大等待时间(毫秒)
maxWait=60000
4.2编写mybatis配置文件mybatis_config.xml,在src根目录下新建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>
</configuration>
4.3编写spring-mybatis.xml配置文件,在src根目录下新建spring-mybatis.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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
<!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
<!-- 配置连接池,以dbcp为例 -->
<bean id="dataSourcePool" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最大数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis_config.xml"/>
<property name="dataSource" ref="dataSourcePool" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:cn/syy/ssmdemo2/mapping/*.xml"></property>
</bean>
<!-- 声明事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourcePool"></property>
</bean>
<!-- 声明事务增强处理 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- 声明事务属性 -->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"
read-only="false" />
</tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config>
<!-- 定义切入点 -->
<aop:pointcut expression="execution(* cn.syy.ssmdemo2.service.*.*(..))"
id="pointCut" />
<!-- 将切入点和增强处理组合,构成切面 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut" />
</aop:config>
</beans>
4.4编写springmvc-servlet.xml,在WEB-INF根目录下创建springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 启动mvc注解驱动 -->
<mvc:annotation-driven/>
<!-- 自动扫描包,将注解的类加入bean工厂,交由spring管理 -->
<context:component-scan base-package="cn.syy.ssmdemo2"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 配置静态资源如css -->
<mvc:resources mapping="/resources/**" location="/resources/" />
</beans>
4.5日志属性log4j.properties,在src根目录创建
log4j.properties内容如下:
### direct log messages to stdout ###
log4j.rootLogger=warn, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file ssm1.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=ssm1.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
4.6编写web.xml,在WEB-INF下新建web.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ssmdemo2</display-name>
<!-- spring和mybatis配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring-mybatis.xml
</param-value>
</context-param>
<!-- 配置log4j配置文件 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:jdbc.properties</param-value>
</context-param>
<!-- 设定刷新日志配置文件的时间间隔,这里设置为10s -->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>10000</param-value>
</context-param>
<!-- 为避免项目间冲突,定义唯一的 webAppRootKey -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>scheduleProject</param-value>
</context-param>
<!-- 配置springmvc编码过滤器,防止页面传值乱码 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring监听器 ApplicationContext 载入 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载Spring框架中的log4j监听器Log4jConfigListener -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 配置spring核心控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.用mybatis-generator 代码自动生成工具自动生成dao、entity、mapping文件映射,具体有兴趣可以去百度,很简单
generator.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 数据库驱动包位置 -->
<classPathEntry location="D:\generator\mysql-connector-java-5.1.18-bin.jar" />
<!-- <classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" />-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库链接URL、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/pro?characterEncoding=utf8" userId="root" password="root">
<!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">-->
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="cn.syy.ssmdemo2.entity" targetProject="D:\generator\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator targetPackage="cn.syy.ssmdemo2.mapping" targetProject="D:\generator\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="cn.syy.ssmdemo2.dao" targetProject="D:\generator\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
接着将这些文件复制到项目路径里就可以了,要简单修改一下,如果不改的话可能映射文件里就把你自增的字段给insert进去了,当然没有注释的啦,自己加。
接着我们在web.controller新建个controller,如LoginController
package cn.syy.ssmdemo2.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value="/")
public class LoginController {
@RequestMapping(value="/")
@ResponseBody
public String hello(){
return "hello";
}
}
然后将项目运行在tomcat,接着输入:
http://localhost:8080/ssmdemo2/
出现这样就代表搭建完成了。
三、实现登录
我的登录逻辑是这样的:根据用户名判断用户是否存在,再根据查到用户的密码与页面密码相比较。不多说上代码。
1.实体类
User.java
package cn.syy.ssmdemo2.entity;
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
}
2.dao层(为方便起见把多余的代码都删了)
UserMapper.java
package cn.syy.ssmdemo2.dao;
import cn.syy.ssmdemo2.entity.User;
public interface UserMapper {
/**
* 根据username查数据
*/
User getByName(String username);
}
impl:UserMapperImpl.java
package cn.syy.ssmdemo2.dao.impl;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Repository;
import cn.syy.ssmdemo2.dao.UserMapper;
import cn.syy.ssmdemo2.entity.User;
@Repository
public class UserMapperImpl implements UserMapper {
@Resource
private SqlSessionFactory sqlSessionFactory;
/**
* 根据username查User对象
*/
@Override
public User getByName(String username) {
User user = sqlSessionFactory.openSession()
.selectOne("cn.syy.ssmdemo2.dao.UserMapper.getByName",username);
return user;
}
}
3.映射文件包mapping
UserMapper.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 -->
<mapper namespace="cn.syy.ssmdemo2.dao.UserMapper">
<!-- 创建与数据库的关系映射 -->
<resultMap type="cn.syy.ssmdemo2.entity.User" id="userMap">
<!-- 配置主键映射 -->
<id property="id" column="ID"></id>
<result property="username" column="USERNAME"/>
<result property="password" column="PASSWORD"/>
</resultMap>
<select id="getByName" parameterType="string" resultMap="userMap">
SELECT ID,USERNAME,PASSWORD FROM users WHERE USERNAME=#{username}
</select>
</mapper>
4.service层
ILoginService.java
package cn.syy.ssmdemo2.service;
import cn.syy.ssmdemo2.entity.User;
public interface ILoginService {
/**
* 登录逻辑:根据用户名判断用户是否存在,再根据查到用户的密码与页面密码相比较
*/
User isLogin(String username,String password);
}
impl:
ILoginServiceImpl.java
package cn.syy.ssmdemo2.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cn.syy.ssmdemo2.dao.UserMapper;
import cn.syy.ssmdemo2.entity.User;
import cn.syy.ssmdemo2.service.ILoginService;
@Service
public class ILoginServiceImpl implements ILoginService {
@Resource
private UserMapper userDao;
/**
* 登录逻辑:根据用户名判断用户是否存在,再根据查到用户的密码与页面密码相比较
*/
@Override
public User isLogin(String username,String password) {
User user = userDao.getByName(username);
if(user!=null){
return password.equals(user.getPassword())?user:null;
}
return null;
}
}
5.controller
修改LoginController
package cn.syy.ssmdemo2.web.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.syy.ssmdemo2.entity.User;
import cn.syy.ssmdemo2.service.ILoginService;
@Controller
@RequestMapping(value="login")
@Scope("prototype")
public class LoginController {
@Resource
private ILoginService loginService;
/**
* 登录:判断登录是否成功,成功存入session,并打印成功信息,失败提示失败,并打印失败信息
*/
@RequestMapping(value="login")
public String login(String username,String password,HttpServletRequest request){
User user = loginService.isLogin(username, password);
if(user!=null){
System.out.println(username+"登录成功!");
request.getSession().setAttribute("logined",user);
return "login/success";
}
System.out.println(username+"登录失败");
return "login/fail";
}
}
结果如下:
fail.jsp就一个“登录失败”,success.jsp就一个“登录成功”。
login.jsp如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body>
<form action="/ssmdemo2/login/login" method="post">
用户名:<input name="username" type="text">
密码:<input name="password" type="password">
<input type="submit" value="登录">
</form>
</body>
</html>
好了一切搞定,启动tomcat,浏览器输入:
http://localhost:8080/ssmdemo2/jsp/login/login.jsp
事先写入数据表的内置用户:admin 密码:admin
后台:
直接回车,由于没有传username,查到user对象为null
好了,教程到此结束,现在你已经知道如何搭建ssm了,快去自己动手搭建一个吧。
四、总结:
搭建ssm步骤如下:
1.新建一个web项目
2.导入jar
3.搭建网站基本架构(dao、service、entity、controller、utils、mapping)
4.
编写与数据库相关的jdbc.properties
5.编写mybatis.xml配置文件
6.编写spring-mybatis.xml配置文件
7.在web/info下编写spingmvc-servlet.xml配置文件
8.编写日志属性log4j.properties
9.编写配置文件web.xml
实现登录步骤如下:
1.设计数据库
2.用代码自动生成工具
mybatis-generator
3.复制和修改文件
(2.3步也可以自己写,顺序:1.实体类--2.实体类映射--3.dao--4.daoimpl)
4.为dao增加方法
5.编写service
6.编写controller
7.编写页面