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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://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 {@Resourceprivate UserDao userDao;public boolean login(EliUser user) {EliUser eliUser = this.userDao.findByNameAndPassword(user.getName(), user.getPassword());if (eliUser == null)return false;elsereturn true;}
}
编写 Action 层代码
Action 主要是调用业务逻辑,结合 struts.xml 来进行处理页面跳转,我们是希望实现用户登录,在 action 包下建立一个 UserAction.java,代码如下
@Controller("userAction")
@Scope("prototype")
public class UserAction extends ActionSupport {@Resourceprivate 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)实现简单登录相关推荐
- Maven工程Spring框架AOP的简单使用
目录结构: 引入的jar包 aspect.Validate.java package aspect;import java.text.*; import java.util.*;public clas ...
- Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系 java实现基于用户的协同过滤推荐算法 源代码下载 算法实现 Spring+Struts+Hibernate(SSH)开发框架
Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,t ...
- java springmvc 数据库事务_事务的简单回顾_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...
SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...
- 通向架构师的道路(第十九天)使用maven构建Spring工程
一.前言 上次大家拿了我上传的工程后,有些人自己通过spring3,struts1.3,hibernate3的download的包自行去装配jar包到工程的WEB-INF\lib目录下.有些是通过我上 ...
- 在Eclipse中使用Maven构建Spring项目
最新版的Spring需要使用Maven构建,本文讲述怎么在Eclipse构建Maven项目,以配置Spring项目为例. maven简单介绍 maven是构建工具,也是构建管理工具.ant只是构建工具 ...
- 使用maven构建Spring工程的一些重点
2019独角兽企业重金招聘Python工程师标准>>> 有人喜欢把一个下载的spring3.1和struts1.3下载包里的的lib目录下所有的jar不管三七二十一全部cop ...
- Spring Boot持久化的简单实现
本篇主要讲解的是Spring Data Jpa 前提准备:JDK1.8,Mysql5.7.18 主要maven依赖的包: spring-boot-starter-jdbc mysql-connecto ...
- 使用Maven管理Spring
1. 概述 本教程向您展示如何通过 Maven 管理 Spring 的依赖关系.最新的Spring版本可以在 Maven Central仓库 中找到. 也可以访问 mvnrepository: ...
- Spring AOP 简介以及简单用法
Spring AOP 简介以及简单用法 如果你去面试java开发, 那么Spring的AOP和DI几乎是必问的问题. 那么AOP是什么呢? 一. AOP 所谓Aop就是 Aspect-Oriented ...
最新文章
- c语言实验七实验报告,C语言实验七 数 实验报告.doc
- 网络切片,切开5G万亿级市场“大面包”
- python中re模块_python之re模块
- powerdesigner辅助导入导出excel文件
- 《人月神话》读后感一
- 20155307 《Java程序设计》课堂实践项目数据库
- agent python实现 建模_零基础三天学会Python爬虫(第二天)
- Hive insert into小文件问题优化解决
- linux编辑复制多行命令,linux下文本编辑器vim的使用,复制-粘贴-替换-行号-撤销-多文件操作...
- 对流式计算模型的理解
- 实训三:交换机恢复出厂设置以及基本配置
- 手把手教如何修改运动步数
- 三消游戏核心逻辑的一种实现
- php更换banner图片,如何替换banner上的图片?
- 为什么我的微信小程序开发工具调试窗口一片空白?
- 在内核中之获取HKEY_CURRENT_USER对应路径
- threeJS 创建逼真海洋落日
- Linux C遍历文件夹
- 在java中用log4j写日志文件
- C#.NET程序尝试—修复Excel批注错误
热门文章
- 音频原始数据能量检测算法
- f1签证计算机专业容易拒签吗,美国签证F1被拒,拒签调档出来原来是这个原因...
- 大数据 - 大数据开发技术课程总结(未完)
- source insight 4.0 闪退问题
- python网页爬虫xpath应用
- 根据word模板(书签)创建导出word
- android默认smb用户名和密码错误,win7系统下连接SMB提示用户名密码错误的解决方法...
- Docker compose 环境变量env_file相关
- C# 读取 vCard 格式
- 挑战华为社招:2021Java高级面试题汇总解答