`
瘋叻ハ.兩
  • 浏览: 80403 次
  • 性别: 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  感谢楼主

相关推荐

Global site tag (gtag.js) - Google Analytics