这就是SSH框架内容很多,随着下面一个案例来进入分析:
1 首先项目是依赖maven进行管理的,创建一个动态的web项目
2 在pom.xml导入相关jar包,配置如下:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wy</groupId>
<artifactId>Struct</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Struct Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- Spring版本控制 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.11.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.2</version>
</dependency>
<!-- 数据库 https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- spring https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<!-- mysql数据库的驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- spring对jdbc的支持包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- hibernate https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.common/hibernate-commons-annotations -->
<dependency>
<groupId>org.hibernate.common</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>5.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.12</version>
</dependency>
<!-- servlet 包,上线后不要,因为 tomcat的lib中自带有, 所以要配置 scope为provided -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- spring容器 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<finalName>Struct</finalName>
</build>
</project>
3 创建简单Student类,一般在开发中javabean放置在entity下,如com.yc.entity;持久层放在dao ,如com.yc.dao,业务层放在service,如com.yc.service ,控制层放置在controller,Student类如下(本案例的增删改查是对Student):
package com.yc.entity;
public class Student {
public int id ;
public String name;
public String pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
}
}
Student在数据库对应表示student:
create table student(
id int primary key auto_increment,
name varchar(20),
pwd varchar(50)
)
4 创建映射文件,一般命名规则是类名.hbm.xml,因此映射文件为Student.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.yc.entity.Student" table="student">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="native"/>
</id>
<property name="name" type="java.lang.String">
<column name="name" />
</property>
<property name="pwd" type="java.lang.String">
<column name="pwd" />
</property>
</class>
</hibernate-mapping>
5 编写dao层接口,StudentDao:
package com.yc.dao;
import com.yc.entity.Student;
public interface StudentDao {
//登录
public int login(Student student);
//注册
public int add(Student student);
//修改
public int update(Student student);
//注销
public int del(Student student);
}
6 实现Dao层接口,StudentDaoImpl:
package com.yc.dao.Impl;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.stereotype.Service;
import com.yc.dao.StudentDao;
import com.yc.entity.Student;
@Service
public class StudentDaoImpl implements StudentDao {
@Resource(name="sessionFactory")
public SessionFactory sessionFactory;
@Override
public int login(Student student) {//登录操作
Session session=sessionFactory.getCurrentSession();
Query query=session.createQuery("from Student where name= ? and pwd= ?");
query.setParameter(0,student.getName());//注入参数
query.setParameter(1,student.getPwd());
List<Student> list=query.list();
System.out.println(list);
if(list.size()>0&&list.get(0)!=null){
return 1; //返回1为成功
}
return 0; //返回0为失败
}
@Override
public int add(Student student) { //注册操作
try {
Session session=sessionFactory.getCurrentSession();
Query query=session.createSQLQuery("insert into (name,pwd) student values(?,?)").addEntity(Student.class);
query.setString(0,student.getName());
query.setString(1, student.getPwd());
session.save(student);
return 1;
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
@Override
public int update(Student student) { //修改操作
try {
Session session=sessionFactory.getCurrentSession();
Transaction transAction=session.beginTransaction();
Query query=session.createSQLQuery("update student set pwd=? where name=? ").addEntity(Student.class);
query.setString(0,student.getPwd());
query.setString(1, student.getName());
query.executeUpdate();
transAction.commit();
return 1;
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
@Override
public int del(Student student) { //注销用户
try {
Session session=sessionFactory.getCurrentSession();
Transaction transAction=session.beginTransaction();
Query query=session.createSQLQuery("delete from student where name=?").addEntity(Student.class);
query.setString(0,student.getName());
query.executeUpdate();
transAction.commit();
return 1;
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
}
7 编写业务层借口,StudentService:
package com.yc.service;
import com.yc.entity.Student;
public interface StudentService {
//登录
public int login(Student student);
//注册
public int add(Student student);
//修改
public int update(Student student);
//注销
public int del(Student student);
}
8 实现业务层接口,StudentServiceImpl:
package com.yc.service.Impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.yc.dao.StudentDao;
import com.yc.entity.Student;
import com.yc.service.StudentService;
@Service
public class StudentServiceImpl implements StudentService {
@Resource(name="studentDaoImpl")
public StudentDao studentDao;
@Override
public int login(Student student) {
return studentDao.login(student);
}
@Override
public int add(Student student) {
return studentDao.add(student);
}
@Override
public int update(Student student) {
return studentDao.update(student);
}
@Override
public int del(Student student) {
return studentDao.del(student);
}
}
9 编写action类,用于客户端请求处理:本案例实现对Student对象的增删改查,所以编写了四个Action类:LoginAction、AddAction、UpdateAction、DelAction分别实现登录、注册、修改用户密码、注销用户操作:
LoginAction控制类:
package com.yc.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.yc.entity.Student;
import com.yc.service.StudentService;
@Controller
public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 3867837111230648465L;
private String name;
private String pwd;
private Student student;
@Resource(name="studentServiceImpl")
private StudentService studentService;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String login(){
Student student=new Student();
student.setName(name);
student.setPwd(pwd);
int result= studentService.login(student);
if(result==1){
ActionContext text=ActionContext.getContext();
text.getSession().put("user",student.getName());
return "success";
}else{
return "error";
}
}
}
AddAction控制类:
package com.yc.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.yc.entity.Student;
import com.yc.service.StudentService;
@Controller
public class AddAction extends ActionSupport {
private static final long serialVersionUID = 5805525553867263305L;
private Student student;
private String name;
private String pwd;
@Resource(name="studentServiceImpl")
private StudentService studentService;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String add(){
Student student=new Student();
student.setName(name);
student.setPwd(pwd);
int result=studentService.add(student);
if(result==1){
return "success";
}else{
return "error";
}
}
}
UpdateAction控制类:
package com.yc.controller;
import javax.annotation.Resource;
import com.opensymphony.xwork2.ActionSupport;
import com.yc.entity.Student;
import com.yc.service.StudentService;
public class UpdateAction extends ActionSupport {
private static final long serialVersionUID = 5758012919993220108L;
private String name;
private String pwd;
private Student student;
@Resource(name="studentServiceImpl")
private StudentService studentService;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String update(){
Student student=new Student();
student.setName(name);
student.setPwd(pwd);
int result= studentService.update(student);
if(result==1){
return "success";
}else{
return "error";
}
}
}
DelAction控制类:
package com.yc.controller;
import javax.annotation.Resource;
import com.opensymphony.xwork2.ActionSupport;
import com.yc.entity.Student;
import com.yc.service.StudentService;
public class DelAction extends ActionSupport {
private static final long serialVersionUID = -3188134023173913520L;
private String name;
private String pwd;
private Student student;
@Resource(name="studentServiceImpl")
private StudentService studentService;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String del(){
Student student=new Student();
student.setName(name);
student.setPwd(pwd);
int result= studentService.del(student);
if(result==1){
return "success";
}else{
return "error";
}
}
}
10 接下来就是编写struts的配置文件,将请求交个相应的控制类,struts.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true">
</constant>
<package name="student" extends="struts-default" namespace="/">
<!--action中的name属性,就是拦截的请求对象 method是处理请求的方法-->
<action name="login" class="com.yc.controller.LoginAction" method="login">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="add" class="com.yc.controller.AddAction" method="add">
<result name="success">/index.jsp</result>
<result name="error">/register.jsp</result>
</action>
<action name="update" class="com.yc.controller.UpdateAction" method="update">
<result name="success">/index.jsp</result>
</action>
<action name="del" class="com.yc.controller.DelAction" method="del">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
11 配置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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- tomcat开启时,加载Spring配置文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 延迟加载的过滤 ,必须设置在前端控制器之前 -->
<!-- 能保持对象在使用前session为打开状态 -->
<filter>
<filter-name>OpenSessionView</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenSessionView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置Struts前端控制器 -->
<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>
</web-app>
12 配置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:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
default-lazy-init="true">
<!-- 数据源的配置 -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="a"></property>
</bean>
<!-- sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="ds">
</property>
<!-- hibernate配置信息 -->
<property name="hibernateProperties">
<props>
<!-- -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.formate_sql">false</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/yc/entity/Student.hbm.xml</value>
</list>
</property>
</bean>
<!--包扫描-->
<context:component-scan base-package="com"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
13 前端界面有index.jsp、register.jsp、update.jsp、del.jsp、error.jsp、success.jsp分别是登录界面、注册界面、修改密码界面、注销界面、错误界面、登录成功界面
index.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>
<title>登录</title>
</head>
<body>
<center>
<form action="login" method="post">
姓名:<input type="text" name="name"/></br></br></br>
密码:<input type="text" name="pwd"/></br></br></br>
<input type="submit" value="登录" /> <a href="register.jsp" >注册</a>
</form>
</center>
</body>
</html>
register.jsp注册界面:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<center>
<form action="add" method="post">
姓名:<input type="text" name="name"/></br></br></br>
密码:<input type="text" name="pwd"/></br></br></br>
<input type="submit" value="立即注册" />
</form>
</center>
</body>
</html>
update.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>
<title>修改密码</title>
</head>
<body>
<center>
<h2>修改密码!</h2>
<form action="update" method="post">
<input type=hidden name="name" value='<%=request.getSession().getAttribute("user")%>'>
新密码:<input type="password" name="pwd"> <br/> <br/>
<input type="submit" value="确认修改">
</form>
</center>
</body>
</html>
del.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>
<title>注销用户</title>
</head>
<body>
<center>
<h2>确定要注销吗?</h2>
<!-- 注销即删除用户所有数据 -->
<form action="del" method="post">
<input type="hidden" name="name" value="<%=request.getSession().getAttribute("user")%>">
<input type="submit" value="确认">
</form>
<br/>
</center>
</body>
</html>
error.jsp错误界面:
扫描二维码关注公众号,回复:
2775090 查看本文章
<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>错误页面</h1>
</body>
</html>
success.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>
<title>Insert title here</title>
</head>
<body>
<center>
<h1>欢迎你, <%=request.getSession().getAttribute("user")%></h1>
<a href="update.jsp">修改密码</a> <a href="del.jsp">注销</a>
</center>
</body>
</html>