本人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
分享到:
相关推荐
SSI整合的Jar包,有需要的就赶紧下载
MyEclispse下SSI整合JAR包(Struts1+Spring3+ibatis2)
Struts2+Spring+ibatis实现怎删改查以及分页的功能。本文档将项目的配置文件、源代码等全部实现。方便初学者学习ssi三大框架的整合,以及一个相对复杂的难题——与ssi框架结合的分页。该文档十分详细,按照代码结构...
TI CORTEX M3 SSI驱动8位数码管源程序
The Model-Driven Semantic Web-SSI-EW-2005-08-16
ssi2整合步骤,框架的整合开发文档,web开发技术,struts2,spring,I
ssi整合基本jar
SSI实例(源码+数据库+部署说明),数据库使用连接池,自己编写的搭建框架的代码,包含登录,增删改查,包含jar包: commons-dbcp.jar ibatis-2.3.0.677.jar mysql-connector-java-5.1.13.jar spring-aop-3.2.1....
这是一个用SSI整合做的权限管理模块,里面有详细的开发步骤和SQL语句
struts2+ibatis2.x+spring2.5整合的一个demo 适合新手学习
ssi整合项目 struts2 spring ibatis进行整合的完整项目包含数据库,可作为初始开发模板或者练习参考
velocity和ssi整合开发
struts2+spring+ibatis整合加用户增加改查操作,包括所有需要的包
SSI框架整合实战成果 struts2+spring2+ibatis
一个基于struts2.18+spring2.5+ibatis2.3的SSI项目示例。需要的jar包自己添加
struts+spring+maven+mybatis的整合,里面的图片是需要整合的oracle数据库,若有什么问题请联系我
ssi 实例整合,只需要你把自己的数据库改下就ok
ssi项目实例,采用struts2.18、spring2.5、ibatis2.3实现
ssi整合完整例子
SSI整合小例子,不会的同学可以参考,以供以后使用