idea maven sss(Spring+Struts+SpringDataJpa)实现简单登录
Posted Eli Shaw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了idea maven sss(Spring+Struts+SpringDataJpa)实现简单登录相关的知识,希望对你有一定的参考价值。
前言
最近学习 Java,昨天刚搞完ssh的简单登录实现,今天搞了搞sss(即Spring+Struts+SpringDataJpa),使用 SpringDataJpa 代替 Hibernate 进行持久化操作,但是网上相关(SpringDataJpa)的资料太少了,走了不少弯路,今天写个全面的博客记录一下,方便以后复习,也为需要的朋友提供方便。
完整代码在此下载:sssDemo
环境
1.IDEA 2017
2.Oracle12c
注意事项
不同环境,不同版本的 oracle 数据库,使用的架包版本与相关配置也需要改变
创建项目
pom.xml 配置
1.由于 Oracle 授权问题,Maven 不提供 Oracle JDBC Driver,使用方法:在 IDEA 中使用 Oracle JDBC 驱动
2.pom.xml配置信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.eli.sss</groupId>
<artifactId>sssDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 各架包的版本号 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>5.0.3.RELEASE</spring.version>
<springData.version>2.0.4.RELEASE</springData.version>
<hibernate.version>5.2.13.Final</hibernate.version>
<struts2.version>2.5.14</struts2.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>$spring.version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>$spring.version</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>$springData.version</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>$hibernate.version</version>
</dependency>
<!-- struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>$struts2.version</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>$struts2.version</version>
</dependency>
<!-- 添加对数据源的支持 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1.0</version>
</dependency>
</dependencies>
</project>
创建 Java 目录
配置 applicationContext.xml
1.创建 db.properties 设置 Oracle 数据库的配置信息
db.database=oracle
db.driverClassName=oracle.jdbc.driver.OracleDriver
db.userName=xxx
db.password=xxx
db.url=jdbc:oracle:thin:@localhost:1521:orcl
2.设置 applicationContext.xml
applicationContext.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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<!-- 引入数据库配置文件 db.properties -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 使用annotation -->
<context:annotation-config/>
<!-- 使用annotation自动注册bean,并检查@Controller, @Service, @Repository注解已被注入 -->
<context:component-scan base-package="cn.eli.sss.action"/>
<context:component-scan base-package="cn.eli.sss.service"/>
<context:component-scan base-package="cn.eli.sss.dao"/>
<!-- data connection setting -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="$db.driverClassName"></property>
<property name="jdbcUrl" value="$db.url"></property>
<property name="user" value="$db.username"></property>
<property name="password" value="$db.password"></property>
<!-- 设置数据库连接池的最大连接数 -->
<property name="maxPoolSize">
<value>50</value>
</property>
<!-- 设置数据库连接池的最小连接数 -->
<property name="minPoolSize">
<value>5</value>
</property>
<!-- 设置数据库连接池的初始化连接数 -->
<property name="initialPoolSize">
<value>5</value>
</property>
<!-- 设置数据库连接池的连接最大空闲时间 -->
<property name="maxIdleTime">
<value>20</value>
</property>
<!-- c3p0缓存Statement的数量数 -->
<property name="maxStatements">
<value>50</value>
</property>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取新的连接数 -->
<property name="acquireIncrement">
<value>20</value>
</property>
</bean>
<!-- springJPA 管理-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
</property>
<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
<property name="packagesToScan" value="cn.eli.sss.entity"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<!--是否显示 SQL-->
<prop key="hibernate.show_sql">true</prop>
<!--如果显示 SQL,输出的 SQL 时候要格式化-->
<prop key="hibernate.format_sql">true</prop>
<!--在显示的 SQL 中增加一些 Hibernate 提供的注释说明,依此来解释它生成的 SQL 意思-->
<!--配置如何根据java模型生成数据库表结构,常用update,validate-->
<prop key="hibernate.use_sql_comments">true</prop>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
<!--关于这个属性可以看:http://blog.csdn.net/dracotianlong/article/details/27834143-->
<!--ImprovedNamingStrategy 是采用下划线,符合我们一般命名表字段的习惯-->
<!--所以,命名规则 My_NAME->MyName-->
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
</props>
</property>
</bean>
<!-- Hibernate对Jpa的实现 -->
<bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
<jpa:repositories base-package="cn.eli.sss.dao" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>
<!--配置针对JPA的局部事务管理器-->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
</beans>
使用 IDEA 连接 Oracle 数据库
其中 Name 不用管(任意),Host 是数据库的主机名,SID 、User、Password 可在你要使用的数据库中查看,查看方法如下:
打开 SQL Developer —— 右键查看的数据库 —— 属性 —— 左边选中要查看的数据库(system-orcl) —— 右面显示的是数据库信息,其中 SID 就是 IDEA 连接时使用的 SID
使用 Persisstence 创建数据库映射实体类
在 IDEA 左下角找到 Persistence
现在实体类创建完成,如下
编写 Dao 层实体类代码
@Repository
public interface UserDao extends JpaRepository<EliUser, Long>
/**
* 根据用户名密码查询数据
*
* @param name
* @param password
* @return
*/
EliUser findByNameAndPassword(String name, String password);
注:其中方法名 findByNameAndPassword 不是随便起的,spring-data-jpa 提供了 CURD,这条语句就是查询语句,以findBy 开头,Name 是用户实体类(EliUser)中的名称字段 name,And 相当于 SQL 语句中的 and 关键字,Password 是用户实体类(EliUser)中的密码字段 password。具体的 SpringDataJpa 使用方法,可以去百度,有很多资料,在这里就不再重复说明。
编写 Service 层实体类代码
为了代码的可拓展性,我们把实现与定义分离;在src/main/java/cn/eli/sss/service下面再建立一个 impl 包,存放接口的实现类;在 service 目录下新建一个 UserService.java 接口类(记住是接口,在选择类型的时候要选择接口), 在 impl 放这个接口的实现类,UserServiceImpl.java
UserService.java 内容如下:
public interface UserService
boolean login(EliUser user);
UserServiceImpl.java 内容如下:
@Service("userService")
public class UserServiceImpl implements UserService
@Resource
private UserDao userDao;
public boolean login(EliUser user)
EliUser eliUser = this.userDao.findByNameAndPassword(user.getName(), user.getPassword());
if (eliUser == null)
return false;
else
return true;
编写 Action 层代码
Action 主要是调用业务逻辑,结合 struts.xml 来进行处理页面跳转,我们是希望实现用户登录,在 action 包下建立一个 UserAction.java,代码如下
@Controller("userAction")
@Scope("prototype")
public class UserAction extends ActionSupport
@Resource
private UserService userService;
private EliUser user;
public EliUser getUser()
return user;
public void setUser(EliUser user)
this.user = user;
public String login()
if (userService.login(user))
Map session = ActionContext.getContext().getSession();
session.put("user", user);
return SUCCESS;
else
return ERROR;
现在所有实体类的代码已经完成,整体结构如下:
配置 struts2
strtus.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!--启用开发模式-->
<constant name="struts.devMode" value="true"/>
<!--由spring管理struts的Action实例-->
<constant name="struts.objectFactory" value="spring" />
<!--启用通配符-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<!--在URL中的Action段中支持斜线-->
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<package name="user" namespace="/" extends="struts-default" strict-method-invocation="false">
<action name="user_*" class="userAction" method="1">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
配置 Web
web.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
version="3.1">
<!-- struts2容器控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring容器配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<!-- spring容器监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
编写 JSP 页面
1.index.jsp (登录页面)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="user_login.action" method="post">
<input type="text" name="user.name" placeholder="输入用户名"/>
<br/>
<input type="password" name="user.password" placeholder="输入密码"/>
<br/>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</body>
</html>
2.success.jsp(登录成功页面)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<h1>hello $user.name</h1>
</body>
</html>
3.error.jsp(登录失败页面)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>somethin error</h1>
</body>
</html>
Tomcat 部署
运行项目,完成。
以上是关于idea maven sss(Spring+Struts+SpringDataJpa)实现简单登录的主要内容,如果未能解决你的问题,请参考以下文章
Java EE 学习:IDEA + maven + spring 搭建 web- 用户管理
intellij idea通过maven创建spring项目
Java EE 学习:IDEA + maven + spring 搭建 web