`
瘋叻ハ.兩
  • 浏览: 81953 次
  • 性别: Icon_minigender_1
  • 来自: 宁德
社区版块
存档分类
最新评论

SSI的整合七部曲 -- 1、Struts2实现通过JDBC的CURD

 
阅读更多

      本人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
4
0
分享到:
评论
1 楼 wizard945 2016-01-19  
350850895@qq.com  感谢楼主

相关推荐

    ssi整合 jar包

    2. **Java中的SSI实现**:由于Java标准库不直接支持SSI,所以需要第三方库,例如`JSSIServlet`或者`SSIProcessor`等。这些库通常会提供一个Servlet,可以在HTTP请求处理链中拦截并处理包含SSI指令的页面。 3. **...

    SSI.rar_Cortex-M0 SSI_SSI_SSI驱动_TI cortex-M4

    【标题】"SSI.rar_Cortex-M0 SSI_SSI_SSI驱动_TI cortex-M4" 提供的是关于在基于TI Cortex-M4处理器上的SSI(Synchronous Serial Interface)驱动程序,用于控制8位数码管显示。 【描述】"TI CORTEX M3 SSI驱动8...

    SSI整合jar包

    SSI整合的关键在于Spring作为“胶水”来协调Struts2和Mybatis。首先,Spring会管理Struts2的Action,通过Spring的IOC容器实例化Action。接着,Struts2的配置文件(struts.xml)会引用Spring的Action beans。对于...

    Struts2+Spring+IBatis实现CURD

    在Java Web开发中,"Struts2+Spring+IBatis"是一个常见的企业级应用框架组合,也被称为SSI(Struts2、Spring、iBatis)框架。这种组合提供了模型-视图-控制器(MVC)架构,事务管理,以及灵活的数据访问机制。以下是...

    Ssi的整合(Struts2+Spring+Ibatis)

    **SSI整合:Struts2+Spring+Ibatis详解** 在Java Web开发中,Struts2、Spring和Ibatis是常见的三大框架,它们各自负责不同的职责,共同构建出强大的后端应用架构。Struts2作为MVC框架处理请求和视图展示,Spring...

    eclipse开发的ssi整合struts2+ibatis2.x+spring2.5

    下面将详细介绍如何在Eclipse中进行这个整合,并提供一个适合新手学习的SSSI(Struts2、Spring、iBatis、SSI)整合的Demo。 1. **Struts2框架**: Struts2是一个基于MVC设计模式的Web应用框架,用于简化Java Web...

    MyEclispse下SSI整合JAR包(Struts1+Spring3+ibatis2)

    本主题将详细探讨如何在MyEclipse环境下整合Struts1、Spring3和iBATIS2(或MyBatis)这三大框架,构建一个强大的企业级应用。 首先,Struts1是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它负责...

    ssi(struts+spring+maven+mybatis)整合

    **SSI(Struts + Spring + Maven + MyBatis)整合详解** 在现代Java Web开发中,集成多种框架来实现高效、灵活的应用程序架构是常见的做法。`SSI`整合,即Struts、Spring、Maven和MyBatis的组合,旨在提供一个强大...

    SSI整合

    **SSI整合:Struts2、Spring与iBATIS的集成详解** 在Web应用程序开发中,Struts2、Spring和iBATIS是三个非常重要的开源框架。它们分别在表现层、控制层和数据访问层提供了强大的支持。"SSI整合"即为这三者的集成,...

    ssi2(struts2+spring+ibatis)整合加用户增加改查操作

    "ssi2(struts2+spring+ibatis)整合加用户增加改查操作"这个主题涵盖了这三个框架的集成以及基本的用户管理功能,包括用户数据的增删改查。下面将详细讲解这些知识点。 **1. Struts2框架** Struts2是一个基于MVC设计...

    SSI整合示例-权限管理

    在本示例中,“SSI整合示例-权限管理”是一个利用SSI技术实现的权限管理系统,它涉及到如何将SSI与应用程序逻辑相结合,以实现对用户访问权限的有效控制。 在权限管理领域,通常会涉及以下几个关键知识点: 1. **...

    ssi整合基本jar

    7. **与Java框架集成**:如果你正在使用Spring、Struts或其他Java Web框架,了解如何将SSI整合进这些框架的视图层。 8. **测试**:创建测试用例以确保SSI在不同场景下的正确性,包括静态和动态内容的组合、不同类型...

    ssi项目整合

    "SSI项目整合"指的是在Java Web开发中,将Struts2、Spring和iBatis三个框架集成在一起,形成一个高效、灵活的Web应用程序开发模型。这个整合项目提供了一个完整的开发模板,包括数据库设计,适用于初学者进行项目...

    ssi.rar_ibatis_ibatis struts2_java ssi_myeclipse ssi_struts2

    ibatis_ibatis_struts2_java ssi_myeclipse ssi_struts2"揭示了这个压缩包文件包含的内容,主要涉及到SSI(Server Side Include)技术、MyEclipse开发环境、以及三大框架——Struts2、Spring和iBatis的整合应用。...

    SSI框架整合实战成果(zip)

    本压缩包包含的是一份关于SSI框架(Struts2、Spring、Ibatis)整合的实战项目成果。这三大框架是Java Web开发中常用的技术栈,它们各自承担着不同的职责,共同构建了一个高效、灵活的应用架构。 **1. Struts2** ...

    SSI--struts2+spring2.5+ibatis项目实例

    **SSI(Struts2 + Spring2.5 + iBatis)项目实例详解** SSI,即Struts2、Spring和iBatis的组合,是Java Web开发中常见的技术栈,用于构建高效、灵活的企业级应用程序。这个项目实例展示了如何将这三个框架集成到...

    ssi框架整合 struts+spring+mybaits 简单示例

    **SSI框架整合:Struts、Spring与MyBatis** 在Web开发中,SSI(Struts、Spring、MyBatis)框架的整合是常见的技术栈,它结合了三个强大的开源组件来构建灵活、可维护的Java应用程序。Struts提供了MVC(Model-View-...

    ssi项目实例 采用struts2、spring2.5、ibatis2.3实现

    综上所述,这个SSI项目实例展示了如何整合Struts2、Spring和iBatis三大框架,构建一个高效、可扩展的企业级应用。通过深入理解这三个组件的功能和它们之间的协作,开发者能够更好地掌握Web应用开发的技术栈,提升...

    ssi整合开发包括分页

    在IT行业中,SSI(Struts2、Spring、iBatis)整合开发是一种常见的Web应用程序架构模式,它将三个强大的框架结合在一起,以实现高效的MVC(Model-View-Controller)设计模式。本教程将以"ssi整合开发包括分页"为例,...

Global site tag (gtag.js) - Google Analytics