本人QQ: 949507869! 实现过程有问题可以添加交流,但必须有附件信息且为项目名,如StrutsJDBC
补充性知识: Web应用分层及Action的执行流程
Web应用的体系结构,主要体现在以下三个逻辑区域:
1. 表示层(Persentation layer),它是控制前段的页面和发送结果,也称视图
2. 控制层(Control layer), 它控制应用流程,也称控制器
3. 应用逻辑层(Application login layer), 它管理应用数据,执行计算和联系后台资源(数据库),也称模型
各层的联系如下图(虚线表示特殊条件产生的联系)
问题分析、解决思路
问题分析: 用Struct2通过JDBC实现emp表的CURD(create、update、read、delete)
解决思路: 结合MVC三层结构及模仿Hibernate的数据持久化技术
操作步骤:
1、启动相应的数据库服务,不清楚的请点此处说明
2、启动MyEclipse,编码
2-1. 新建项目StrutsJDBC, 并在项目的lib包里添加以下jar包
2-2. 在web.xml里配置过滤器
<!-- begin Filter struts2 -->
<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>
<!-- end Filter struts2 -->
问题一:filter-class的获取方式
解决方法:如图! 篇幅受限,看不清楚的自行下载查看
2-3. 把emp表对象映射成Emp.java的JavaBean。代码如下
package entities;
import java.util.Date;
/**
* <dl>
* <dt><b>Description:</b></dt>
* <dd>
* a JavaBean of table employee
* </br>
* </br><em>Copyright© 2011-2014 E.T.Crazy</em>
* </dd>
* </dl>
* @version 2012-4-17
* @author E.T.Crazy
*/
public class Emp {
// Fields of employee
private int empno; // 雇员编号
private String ename; // 登录名
private String job; // 雇员职务
private int mgr; // 雇员经理的编号
private Date hiredate; // 雇佣日期
private float sal; // 雇员工资
private float comm; // 雇员津贴
private int deptno; // 雇员所在的部门编号
// Constructor
/** default constructor */
public Emp(){
}
/** full constructor */
public Emp(int eno, String ena, String job, int mgr, Date hire, float sal, float comm, int deptno){
this.empno = eno;
this.ename = ena;
this.job = job;
this.mgr = mgr;
this.hiredate = hire;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
}
// Property access
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getMgr() {
return mgr;
}
public void setMgr(int mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public float getSal() {
return sal;
}
public void setSal(float sal) {
this.sal = sal;
}
public float getComm() {
return comm;
}
public void setComm(float comm) {
this.comm = comm;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
}
2-4. 封装数据库连接MyUtils.java. 代码如下
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* <dl>
* <dt><b>Description:</b></dt>
* <dd>
* Operator Database's UTILS
* </br>
* </br><em>Copyright© 2011-2014 E.T.Crazy</em>
* </dd>
* </dl>
* @version 2012-4-17
* @author E.T.Crazy
*/
public class MyUtils {
// unlock your account "scott"
private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
private static String user = "scott";
private static String password = "tiger";
private static Connection connection;
/**
* get database connection
*
* @return a connection of Oracle
*/
public static Connection getConnection(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
/**
* release the connection
*
* @param resultSet
* @param statement
* @param connection
*/
public static void free(ResultSet resultSet, Statement statement, Connection connection){
try {
if(resultSet != null){
resultSet.close();
}
} catch (SQLException e) {
System.out.println("ResutSet关闭失败...");
e.printStackTrace();
} finally {
try{
if (statement != null) {
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Statement关闭失败...");
} finally {
try{
if(connection != null){
connection.close();
}
} catch (SQLException e){
e.printStackTrace();
System.out.println("Connection关闭失败...");
}
}
}
}
}
2-5. 仿Hibernate数据持久化EmpDAO.java. 本例只实现查询操作,其它的功能读者理解后自行实现. 代码如下
package dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import controller.DateFormat;
import entities.Emp;
/**
* <dl>
* <dt><b>Description:</b></dt>
* <dd>
* Data Access Objects of EMP
* </br>
* </br><em>Copyright© 2011-2014 E.T.Crazy</em>
* </dd>
* </dl>
* @version 2012-4-18
* @author E.T.Crazy
*/
public class EmpDAO {
private Emp emp;
private List<Emp> list;
private Connection connection;
private Statement statement;
private ResultSet resultSet;
/**
* 查询所有记录
*
* @return
*/
public List<Emp> findAll(){
list = new ArrayList<Emp>();
connection = MyUtils.getConnection();
String sql = "select * from emp";
try {
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
while(resultSet.next()){
emp = new Emp();
emp.setEmpno(resultSet.getInt(1));
emp.setEname(resultSet.getString(2));
emp.setJob(resultSet.getString(3));
emp.setMgr(resultSet.getInt(4));
emp.setHiredate(resultSet.getDate(5));
emp.setSal(resultSet.getFloat(6));
emp.setComm(resultSet.getFloat(7));
emp.setDeptno(resultSet.getInt(8));
list.add(resultSet.getRow() - 1, emp);
}
System.out.println(DateFormat.getFormatDate(new Date()) + ": 查询数据成功");
} catch (SQLException e) {
e.printStackTrace();
System.out.println(DateFormat.getFormatDate(new Date()) + ": 查询数据失败");
} finally{
MyUtils.free(resultSet, statement, connection);
}
return list;
}
}
2-6. 视图层index.html。在此发送“查询员工信息”即emp.action的请求。代码如下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Welcome</title>
<link href="css/default_.css" type="text/css" rel="stylesheet" />
<script src="jquery/jquery-1.5.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#nav").click(function(){
$('#box').slideToggle('normal');
});
});
</script>
</head>
<body>
<center>
<h1 id="nav" title="点我出现菜单">Navigator of Function</h1>
<hr/>
<div id="box">
<span><a href="emp.action">查询员工信息</a></span>
<span><a href="">增加新员工 </a></span>
<span><a href="">更改信息 </a></span>
<span><a href="">删除员工 </a></span>
</div>
</center>
</body>
</html>
2-7. 新建struts.xml. 并编辑内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="Emp" extends="struts-default">
<action name="emp" class="controller.EmpAction">
<result name="list">/infos.jsp</result>
</action>
</package>
</struts>
问题一: <!DOCTYPE>内容一定要手写吗?
解决: 非也!执行配置web.xml第二步骤时, 即展开struts2-core-2.1.8.jar即可,下拉找到
2-8. 创建控制器EmpAction.java。代码如下:
package controller;
import java.util.List;
import dao.EmpDAO;
import entities.Emp;
/**
* <dl>
* <dt><b>Description:</b></dt>
* <dd>
* deal with any action
* </br>
* </br><em>Copyright© 2011-2014 E.T.Crazy</em>
* </dd>
* </dl>
* @version 2012-4-17
* @author E.T.Crazy
*/
public class EmpAction {
private Emp emp;
private int id;
private List<Emp> list;
private EmpDAO empDAO;
public String execute(){
empDAO = new EmpDAO();
list = empDAO.findAll();
return "list";
}
public Emp getEmp() {
return emp;
}
public void setEmp(Emp emp) {
this.emp = emp;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Emp> getList() {
return list;
}
public void setList(List<Emp> list) {
this.list = list;
}
}
至此,所有应编辑的代码已编辑完。如果有注意我的代码的package,那么项目的结构如下图所示:
3、发布项目并访问
迫不及待的话,在url中输入http://localhost:8080/StrutsJDBC/emp.action。页面如下图,则证明成功
经验总结:
emp.action的运行完整过程
第一篇说明性文章总是比较长、写的时候比较累! 支持的话,请“顶”一下。限于jar的大小问题,需要源代码的完整jar包,请留下邮箱吧!
如果在实现过程中遇到问题,可以加QQ交流949507869,必须有附加信息为项目名,如StrutsJDBC。 谢谢合作
- 大小: 29.3 KB
- 大小: 98.1 KB
- 大小: 4.2 KB
- 大小: 39.5 KB
- 大小: 9.7 KB
- 大小: 8.4 KB
- 大小: 100.8 KB
- 大小: 13.2 KB
分享到:
相关推荐
2. **Java中的SSI实现**:由于Java标准库不直接支持SSI,所以需要第三方库,例如`JSSIServlet`或者`SSIProcessor`等。这些库通常会提供一个Servlet,可以在HTTP请求处理链中拦截并处理包含SSI指令的页面。 3. **...
【标题】"SSI.rar_Cortex-M0 SSI_SSI_SSI驱动_TI cortex-M4" 提供的是关于在基于TI Cortex-M4处理器上的SSI(Synchronous Serial Interface)驱动程序,用于控制8位数码管显示。 【描述】"TI CORTEX M3 SSI驱动8...
SSI整合的关键在于Spring作为“胶水”来协调Struts2和Mybatis。首先,Spring会管理Struts2的Action,通过Spring的IOC容器实例化Action。接着,Struts2的配置文件(struts.xml)会引用Spring的Action beans。对于...
在Java Web开发中,"Struts2+Spring+IBatis"是一个常见的企业级应用框架组合,也被称为SSI(Struts2、Spring、iBatis)框架。这种组合提供了模型-视图-控制器(MVC)架构,事务管理,以及灵活的数据访问机制。以下是...
**SSI整合:Struts2+Spring+Ibatis详解** 在Java Web开发中,Struts2、Spring和Ibatis是常见的三大框架,它们各自负责不同的职责,共同构建出强大的后端应用架构。Struts2作为MVC框架处理请求和视图展示,Spring...
下面将详细介绍如何在Eclipse中进行这个整合,并提供一个适合新手学习的SSSI(Struts2、Spring、iBatis、SSI)整合的Demo。 1. **Struts2框架**: Struts2是一个基于MVC设计模式的Web应用框架,用于简化Java Web...
本主题将详细探讨如何在MyEclipse环境下整合Struts1、Spring3和iBATIS2(或MyBatis)这三大框架,构建一个强大的企业级应用。 首先,Struts1是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它负责...
**SSI(Struts + Spring + Maven + MyBatis)整合详解** 在现代Java Web开发中,集成多种框架来实现高效、灵活的应用程序架构是常见的做法。`SSI`整合,即Struts、Spring、Maven和MyBatis的组合,旨在提供一个强大...
**SSI整合:Struts2、Spring与iBATIS的集成详解** 在Web应用程序开发中,Struts2、Spring和iBATIS是三个非常重要的开源框架。它们分别在表现层、控制层和数据访问层提供了强大的支持。"SSI整合"即为这三者的集成,...
"ssi2(struts2+spring+ibatis)整合加用户增加改查操作"这个主题涵盖了这三个框架的集成以及基本的用户管理功能,包括用户数据的增删改查。下面将详细讲解这些知识点。 **1. Struts2框架** Struts2是一个基于MVC设计...
在本示例中,“SSI整合示例-权限管理”是一个利用SSI技术实现的权限管理系统,它涉及到如何将SSI与应用程序逻辑相结合,以实现对用户访问权限的有效控制。 在权限管理领域,通常会涉及以下几个关键知识点: 1. **...
7. **与Java框架集成**:如果你正在使用Spring、Struts或其他Java Web框架,了解如何将SSI整合进这些框架的视图层。 8. **测试**:创建测试用例以确保SSI在不同场景下的正确性,包括静态和动态内容的组合、不同类型...
"SSI项目整合"指的是在Java Web开发中,将Struts2、Spring和iBatis三个框架集成在一起,形成一个高效、灵活的Web应用程序开发模型。这个整合项目提供了一个完整的开发模板,包括数据库设计,适用于初学者进行项目...
ibatis_ibatis_struts2_java ssi_myeclipse ssi_struts2"揭示了这个压缩包文件包含的内容,主要涉及到SSI(Server Side Include)技术、MyEclipse开发环境、以及三大框架——Struts2、Spring和iBatis的整合应用。...
本压缩包包含的是一份关于SSI框架(Struts2、Spring、Ibatis)整合的实战项目成果。这三大框架是Java Web开发中常用的技术栈,它们各自承担着不同的职责,共同构建了一个高效、灵活的应用架构。 **1. Struts2** ...
**SSI(Struts2 + Spring2.5 + iBatis)项目实例详解** SSI,即Struts2、Spring和iBatis的组合,是Java Web开发中常见的技术栈,用于构建高效、灵活的企业级应用程序。这个项目实例展示了如何将这三个框架集成到...
**SSI框架整合:Struts、Spring与MyBatis** 在Web开发中,SSI(Struts、Spring、MyBatis)框架的整合是常见的技术栈,它结合了三个强大的开源组件来构建灵活、可维护的Java应用程序。Struts提供了MVC(Model-View-...
综上所述,这个SSI项目实例展示了如何整合Struts2、Spring和iBatis三大框架,构建一个高效、可扩展的企业级应用。通过深入理解这三个组件的功能和它们之间的协作,开发者能够更好地掌握Web应用开发的技术栈,提升...
在IT行业中,SSI(Struts2、Spring、iBatis)整合开发是一种常见的Web应用程序架构模式,它将三个强大的框架结合在一起,以实现高效的MVC(Model-View-Controller)设计模式。本教程将以"ssi整合开发包括分页"为例,...