项目搭建工具:eclipse

项目开发环境:①Windows10-64位 ②Tomcat 8.5 ③jdk1.8.0_91 ④MySql 8.0.11

jar包准备:这里不详说,自己准备不不冲突能跑起来就没啥问题。

(1)新建一个Dynamic Web Project,可命名为SSH_Template,直接点击finish按钮
(2)将选择的jar包导入到lib(/WebContent/WEB-INF/lib)中,其中包括hibernate、mysql-connector-java、spring、struts2
(3)将导入的jar包添加到项目Libraries中,项目右键==》Properties==》Java Build Path==》Libraries==》选中导入的所有jar包添加到进Libraries中
(4)在/WebContent/WEB-INF/下新建一个web.xml,配置过滤器和监听器

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1"> <display-name>ssh</display-name>
<welcome-file-list>
<welcome-file>index.action</welcome-file>
</welcome-file-list> <!-- struts 过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.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>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>

开始搭建

(1)创建用于分层的四个基础包,并分别添加BookCard的操作类

(2)根据数据库表的字段编写BookCard(实体类)和BookCard.hbm.xml(映射文件)放到ssh.entity包里

BookCard.java
package ssh.entity;

import java.math.BigDecimal;
import java.sql.Date; public class BookCard {
private int cid;
private String name;
private String sex;
private Date cardDate;
private BigDecimal deposit; //押金 //get set方法
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getCardDate() {
return cardDate;
}
public void setCardDate(Date cardDate) {
this.cardDate = cardDate;
}
public BigDecimal getDeposit() {
return deposit;
}
public void setDeposit(BigDecimal deposit) {
this.deposit = deposit;
} }

BookCard.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="ssh.entity.BookCard" table="BookCard">
<id name="cid" column="cid">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<property name="sex" column="sex"></property>
<property name="cardDate" column="cardDate"></property>
<property name="deposit" column="deposit"></property>
</class>
</hibernate-mapping>

(3)在ssh.dao包里编写BookCardDao(接口类)和BookCardDaoImpl(实现类)。

BookCardDao.java

package ssh.dao;

import java.util.List;

import ssh.entity.BookCard;

public interface BookCardDao {
public List<BookCard> getAllBookCard();
}

BookCardDaoImpl.java

package ssh.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; import ssh.entity.BookCard; public class BookCardDaoImpl implements BookCardDao {
//在SSH的设计理念:要使用某个实例,那么就定义声明一个对象,然后
//给它添加set方法(用于spring注入进来)
//实现不要关注这个实例来自于那里,以及怎么创建,或者它是谁
private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} @Override
public List<BookCard> getAllBookCard() { //sessionFactory这个实例可以自己按常规的hibernate传统写法创建
//也可以交给spring去托管 Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory(); //获取session
Session session = sessionFactory.openSession(); //后面当使用JPA的时候,EntityManager 类似于 Session
Query query = session.createQuery("from BookCard"); //将所有的数据查询出来并放到List集合里
List<BookCard> list = query.list(); //将集合遍历循环
for(BookCard bookCard:list){
//打印输出到控制台
System.out.println(bookCard);
} //关闭session
session.close();
//关闭sessionFactory
sessionFactory.close();
//返回list集合
return list;
}
}

(4)在ssh.service包里编写BookCardService(接口类)和BookCardServiceImpl(实现类)。

BookCardService.java

package ssh.service;

import java.util.List;

import ssh.entity.BookCard;

public interface BookCardService {
public List<BookCard> getAllBookCard();
}

BookCardServiceImpl.java

package ssh.service;

import java.util.List;

import ssh.dao.BookCardDao;
import ssh.entity.BookCard; public class BookCardServiceImpl implements BookCardService{
//dao实例使用注入方式
private BookCardDao id;
//用于注入使用
public void setId(BookCardDao id) {
this.id = id;
} @Override
public List<BookCard> getAllBookCard() {
//本类应该编写业务逻辑的代码,
//但本例没有业务逻辑,就不用写。 //访问数据库的代码,不会出现在service这一层
//交给dao来操作数据库
List<BookCard> myBookCardList = id.getAllBookCard(); //进行其它的业务逻辑操作,比如增加多一个选项,是否过期
//本例不需要
//.... return myBookCardList;
}
}

(5)在ssh.action包里编写IndexAction(action类)。

IndexAction.java

package ssh.action;

import java.text.DecimalFormat;
import java.util.List; import ssh.entity.BookCard;
import ssh.service.BookCardService; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; //创建IndexAction(action类)继承ActionSupport接口
public class IndexAction extends ActionSupport { private static final long serialVersionUID = 1L; //声明service,但不给它创建具体的实现类的实例,
private BookCardService is = null;
//添加set()方法
public void setIs(BookCardService is) {
this.is = is;
} //编写execute()方法
public String execute() { //获取IndexService实例,调用getAllBookCard()方法
//将结果保存到List集合里
List<BookCard> myBookCardList = is.getAllBookCard(); //将查询出来的结构集打印到控制台
System.out.println("结果集:"+myBookCardList.size()); //获取Context上下文对象
ActionContext ac = ActionContext.getContext(); //将myBookCardList集合添加到上下文对象里
ac.put("myBookCardList", myBookCardList); //返回一个字符串
return "success";
} //金额格式转换
public String formatDouble(double s){
DecimalFormat fmat=new DecimalFormat("\u00A4##.0");
return fmat.format(s);
}
}

(6)在/src/目录下新建配置文件struts.xml、applicationContext.xml、hibernate.cfg.xml

struts.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"> <!-- 上面的头,注意版本,从样例里复制过来 showcase.war\WEB-INF\src\java\struts.xml --> <struts>
<!-- 告知Struts2运行时使用Spring来创建对象 -->
<constant name="struts.objectFactory" value="spring" /> <package name="default" namespace="/" extends="struts-default">
<action name="Index" class="myIndexAction">
<result name="success">/jsp/index.jsp</result>
</action>
</package>
</struts>

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
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/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="mappingLocations" value="classpath:ssh/entity/BookCard.hbm.xml"></property>
</bean> <bean id="myIndexDao" class="ssh.dao.BookCardDaoImpl" scope="prototype">
<!-- 把sessionFactory 注入给IndexDao -->
<property name="sessionFactory" ref="sessionFactory" />
</bean> <!-- myIndexService = new ssh_01.service.IndexServiceImpl() -->
<bean id="myIndexService" class="ssh.service.BookCardServiceImpl" scope="prototype">
<property name="id" ref="myIndexDao"/>
</bean> <!-- 类似于财务部门一样,类就是钱,所有需要类的实例都由spring去管理 -->
<bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype">
<!-- setIs(myIndexService) -->
<property name="is" ref="myIndexService"/>
</bean> </beans>

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 第一部分:配置数据库信息,必须的 -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/book
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 配置当前session上下文 -->
<property name="current_session_context_class">thread</property>
<!-- 第二部分:配置hibernate的信息,可选的 -->
<!-- 输出底层sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 输出底层sql语句格式 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate帮创建表,需要配置之后
update:如果表已经存在,更新;如果不存在,就创建
-->
<property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property> <!-- 第三部分:把映射文件放在核心配置文件中 必须的 -->
<mapping resource="ssh/entity/BookCard.hbm.xml" /> </session-factory>
</hibernate-configuration>

(6)最后还有一个页面文件,页面文件根据习惯放哪里都行。 

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body> <table border="1">
<tr>
<td>卡号</td>
<td>姓名</td>
<td>性别</td>
<td>办卡日期</td>
<td>押金</td>
</tr>
<s:iterator value="#myBookCardList" status="bcs">
<tr>
<td><s:property value="cid"></s:property></td>
<td><s:property value="name"></s:property></td>
<td><s:property value="sex"></s:property></td>
<td><s:date name="cardDate" format="yyyy年MM月dd日"></s:date></td>
<%-- <td><s:property value="deposit"></s:property></td> --%>
<td><s:property value="%{formatDouble(deposit)}"></s:property></td>
</tr>
</s:iterator> <!-- 如果查询出来没有数据 -->
<s:if test="myBookCardList.size()==0">
<tr>
<td colspan="7">没有查询到数据</td>
</tr>
</s:if>
</table> </body>
</html>

大功告成效果图

此案例根据简书上(地址如下)修改而成非常感谢。

链接:https://www.jianshu.com/p/69030f8f5437

最后编辑时间:2018.12.20 21:04:10

作者:周老一员

至于为什么修改,原因是按照他的我没跑出来。错误如下:

替换jar以及修改部分东西运行成功。现在看来应该是jar问题。

Java-手动搭建SSH的更多相关文章

  1. Java之基于Eclipse搭建SSH框架(下)

    在上篇博客里,我简介了Tomcat滴配置与Struts2滴搭建,假设对这个还不会滴童鞋去看一下我滴上篇博客<Java之基于Eclipse搭建SSH框架(上)>.今天我们接着上篇博客滴内容. ...

  2. 搭建SSH

    搭建SSH详细步骤及相关说明   因为手里已有相关jar,为方便我搭建的是:Struts2.0+Hibernate3.3+Spring3.0,数据库:MySQL 如果想搭建最新的,在官网上下载最新ja ...

  3. Maven环境下搭建SSH框架之Spring整合Hibernate

    © 版权声明:本文为博主原创文章,转载请注明出处 1.搭建环境 Spring:4.3.8.RELEASE Hibernate:5.1.7.Final MySQL:5.7.17 注意:其他版本在某些特性 ...

  4. Mac下maven工程的创建,并搭建SSH环境

    最近项目有用到maven,就特地学了一下.maven的一句话攻略就是,项目托管.帮你解决各种项目琐事:清理,导包....等等. 首先先到apach官网去下载一个maven的包,http://maven ...

  5. Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SS ...

  6. 用eclipse搭建SSH(struts+spring+hibernate)框架

    声明: 本文是个人对ssh框架的学习.理解而编辑出来的,可能有不足之处,请大家谅解,但希望能帮助到大家,一起探讨,一起学习! Struts + Spring + Hibernate三者各自的特点都是什 ...

  7. java开发--配置ssh

    下面,我查阅了大量资料,走了不少错路,最后总结了经验后搭建出来的SSH框架. 希望第一次搭建SSH框架的会从中得到启发. 开发环境: eclipse-jee-kepler-SR1-win32 4.3. ...

  8. [JavaEE] SSH框架笔记_eclipse搭建SSH框架详解

    SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题.下面我介绍一下SSH框架搭建的全过程. 第一步:准备工作. 下载好eclipse,Struts2,Spring,Hibe ...

  9. 搭建SSH环境之添加所需jar包

    一.首先介绍要添加框架环境: JUnit Struts2 Hibernate Spring (1)配置JUnit /**-------------------------添加JUnit-------- ...

  10. 工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

    上文中我们介绍<工作笔记2.软件开发经常使用工具> 从今天開始本文将教大家怎样进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个 ...

随机推荐

  1. access,trunk,hybrid端口分析

    1.access 接收:当数据没有tag时打上pvidtag进入,若有则看是否与pvid相等,相等则接收,不想等则丢弃. 转发:看tag是否等于pvid,若等则去tag发送,否则不处理. 2.trun ...

  2. Webpack 4 Tree Shaking 终极优化指南

    几个月前,我的任务是将我们组的 Vue.js 项目构建配置升级到 Webpack 4.我们的主要目标之一是利用 tree-shaking 的优势,即 Webpack 去掉了实际上并没有使用的代码来减少 ...

  3. 在小程序中使用md5

    使用md5.js的首先你要有md5.js这个文件https://github.com/emn178/js-md5 您也可以使用Bower安装js-md5. bower install md5 对于no ...

  4. 第一篇:jdk8下载和idea导入,java源码结构

    一.下载和导入 下载和导入到idea,完全参考文章:https://blog.csdn.net/zhanglong_4444/article/details/88967300 照做即可,详解简单到位. ...

  5. Python第五天 列表练习 元组类型 字典类型 小购物车练习

    # 反转 reverse# l=['lili','asdf','qwer','80000']# l.reverse()# print(l) # ['80000', 'qwer', 'asdf', 'l ...

  6. SpringBoot Application深入学习

    本节主要介绍SpringBoot Application类相关源码的深入学习. 主要包括: SpringBoot应用自定义启动配置 SpringBoot应用生命周期,以及在生命周期各个阶段自定义配置. ...

  7. Lombok 使用详解,简化Java编程

    前言 在 Java 应用程序中存在许多重复相似的.生成之后几乎不对其做更改的代码,但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求 比如,在 Java 应用程序开发中,我们几乎要为所有 ...

  8. HashMap的源码学习以及性能分析

    HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...

  9. Acquistion Location Confidence for accurate object detection

    Acquistion Location Confidence for accurate object detection 本论文主要是解决一下两个问题: 1.分类得分高的预测框与IOU不匹配,(我猜应 ...

  10. 2019-9-27:渗透测试,metasploit-framework初接触

    初次利用metasploit漏洞利用框架,入侵获取win7获取权限 目标机系统:windows7,无修复补丁 目标ip地址:192.168.20.131 任务:利用ms17-010,永恒之蓝漏洞,获取 ...