1、第六章 Struts2深入学习一 上机第6章Struts2深入学习(一) 上机内容:1 struts.xml常量配置2 解耦访问Servlet API3 动态方法调用4 实现Action接口5 实现ActionSupport类6 自定义处理结果7 模型驱动8 国际化上机目标:1. 掌握Struts2解耦访问Servlet API的方法2. 掌握动态方法调用3理解自定义处理结果4掌握使用模型驱动来封装用户请求参数5掌握Struts2国际化阶段1:指导训练内容1 使用struts.xml常量配置,避免乱码2 解耦访问Servlet API3 实现Action接口4 模型驱动需求说明员工薪资管理系统
2、主要实现以下功能(1) 显示所有员工信息(2) 根据部门、拼音码查询员工(3) 为某个员工执行加班操作(4) 为某个员工执行请假操作(5) 为某个员工执行旷工操作(6) 核算所有员工当月工资实现思路 创建系统所需的sql语句,代码如下:create sequence seq_emp -创建序列start with 1increment by 1;create table tb_dept -创建部门表( Id number primary key,-自动编号,主键 dname varchar2(10) not null,-部门名称 dmaster varchar2(10) not null-负责
3、人);insert into tb_dept values(seq_emp.nextval,研发部,张三);insert into tb_dept values(seq_emp.nextval,市场部,李四);insert into tb_dept values(seq_emp.nextval,人事部,王五);create table tb_emp -创建职工表( Id number primary key,-自动编号,主键 empId varchar2(10) not null,-员工编号 ename varchar2(10) not null,-员工姓名 esex varchar2(2)
4、not null,-员工性别 post varchar2(10) not null,-职位 basepay number(6,2) not null,-基本工资 deptId number not null,-部门编号 pym varchar2(10) not null,-拼音码 constraint fk_deptId foreign key(deptId) references tb_dept(id);insert into tb_emp values(seq_emp.nextval,4201,胡小军,男,教员,1200.0,1, HXJ);insert into tb_emp value
5、s(seq_emp.nextval,4202,张天朋,男,教员,1200.0,1, ZTP);insert into tb_emp values(seq_emp.nextval,4203,孙小杰,女,人事专员,1300.0,3, SXJ);insert into tb_emp values(seq_emp.nextval,4204,孙悟空,男,人事专员,1300.0,3, SWK);insert into tb_emp values(seq_emp.nextval,4205,孙科人,女,市场专员,1400.0,2, SKR);insert into tb_emp values(seq_emp.
6、nextval,4207,刘月芬,女,市场专员,1400.0,2, LYF);create table tb_overtime -创建加班表( Id number primary key,-自动编号,主键 emptId number not null,-加班员工编号 hours number(2) not null,-加班时长 reason varchar2(50) not null,-加班原因 overtimeDtm date default sysdate,-加班日期 constraint fk_overtime_emptId foreign key(emptId) references
7、tb_emp(Id); create table tb_PersonalLeave -创建请假表( Id number primary key,-自动编号,主键 emptId number not null,-请假员工编号 days number(2) not null,-请假天数 reason varchar2(50) not null,-请假原因 PersonalLeaveType number(1) not null,-请假类型 0:事假 1:病假 PersonalLeaveDtm date default sysdate,-请假日期 constraint fk_PersonalLeav
8、e_emptId foreign key(emptId) references tb_emp(Id);create table tb_Absence -创建旷工表( Id number primary key,-自动编号,主键 emptId number not null,-旷工员工编号 days number(1) not null,- 旷工天数 memo varchar2(50) not null,-备注 absenceDtm date default sysdate,-旷工日期 constraint fk_Absence_emptId foreign key(emptId) refere
9、nces tb_emp(Id) 创建用于访问数据库的JavaBean,命名为BaseDAO,代码如下:public class BaseDAO /定义数据源驱动 private static final String DRIVER=oracle.jdbc.driver.OracleDriver; /定义连接字符串 private static final String URL=jdbc:oracle:thin:localhost:1521:soft; /定义用户名 private static final String UID=ht; /定义密码 private static final St
10、ring PWD=ht; /得到连接 public static Connection getConnection() Connection con=null; try Class.forName(DRIVER);/加载驱动 con=DriverManager.getConnection(URL,UID,PWD);/获得连接 catch(Exception e) e.printStackTrace(); return con; /有结果,有参数的sql语句 public static Result runSelectSql(String sql,Object params) Connectio
11、n con=null; PreparedStatement ps=null; ResultSet res=null; Result result=null; try con=getConnection();/得到连接 ps=con.prepareStatement(sql);/获取PreparedStatement对象 /设置参数 for(int i=0;iparams.length;i+) ps.setObject(i+1,paramsi); res=ps.executeQuery();/执行sql语句,获得ResultSet对象 result=ResultSupport.toResult(
12、res); catch(Exception e) e.printStackTrace(); finally try res.close();/关闭对象,释放资源 ps.close(); con.close(); catch(Exception e) e.printStackTrace(); return result; /执行没结果,有参数的sql语句 public static boolean runUpdateSql(String sql,Object params) Connection con=null; PreparedStatement ps=null; try con=getCo
13、nnection();/得到连接 ps=con.prepareStatement(sql);/获取PreparedStatement对象 /设置参数 for(int i=0;iparams.length;i+) ps.setObject(i+1,paramsi); ps.executeUpdate();/执行sql语句 return true; catch(Exception e) e.printStackTrace(); return false; finally try ps.close();/关闭连接,释放资源 con.close(); catch(Exception e) e.prin
14、tStackTrace(); /执行有结果,没参数的sql语句 public static Result runSelectSql(String sql) Connection con=null; PreparedStatement ps=null; ResultSet res=null; Result result=null; try con=getConnection();/得到连接 ps=con.prepareStatement(sql);/获取PreparedStatement对象 res=ps.executeQuery(); result=ResultSupport.toResult
15、(res);/把ResultSet对象转换成Result对象 catch(Exception e) e.printStackTrace(); finally try res.close();/关闭对象,释放资源 ps.close(); con.close(); catch(Exception e) e.printStackTrace(); return result; 创建用于处理”职工薪资管理系统”业务的JavaBean,命名为EmpService.java,代码如下:public class EmpService /得到所有职工 public static Map getAllEmp()
16、/构造sql语句String sql=select emp.id,emp.empid,emp.ename,emp.esex,dept.dname,emp.post,emp.basepay from tb_emp emp,tb_dept dept where emp.deptid=dept.id; /执行sql语句 return BaseDAO.runSelectSql(sql).getRows(); /得到所有的部门 public static Map getAllDept() /构造sql语句 String sql=select * from tb_dept; /执行sql语句 return
17、 BaseDAO.runSelectSql(sql).getRows(); 创建用于处理职工薪资管理系统业务逻辑的父类控制器Action,命名为,BaseAction .java 代码如下:public class BaseAction extends ActionSupport /获取request对象 public Map getRequest() /通过ActionContext得到request对象 return (Map) ActionContext.getContext().get(request); /获取session对象 public Map getSession() ret
18、urn ActionContext.getContext().getSession(); /获取application对象 public Map getApplication() return (Map)ActionContext.getContext().getApplication(); /获取response对象 public HttpServletResponse getResponse() /通过ServletActionContext类获取HttpServletResponse对象。 HttpServletResponse response = ServletActionConte
19、xt.getResponse(); /设置响应头与字符编码 response.setContentType(text/html;charset=gbk); response.setCharacterEncoding(gbk); return response; 创建用于处理职工薪资管理系统业务逻辑的控制器Action,命名为,EmpAction .java 代码如下:public class EmpAction extends BaseAction implements Action /默认执行显示所有职工信息 public String execute() /调用业务层,获取所有职工信息 M
20、ap emps=EmpService.getAllEmp(); /调用业务层,获取所有部门信息 Map depts=EmpService.getAllDept(); /存储到request范围内 this.getRequest().put(emps, emps); /存储到session范围内 this.getSession().put(depts, depts); /转发到index.jsp页面 return this.SUCCESS; 创建用于提供显示界面的JSP页面,命名为index.jsp,代码如下: 人事管理系统员工薪资管理 部门: 全部 全部 $dept.dname 拼音码: td
21、编号姓名性别 所属部门职位基本工资 操作 $emp.empid $emp.ename $emp.esex $emp.dname $emp.post $emp.basepay 加班 请假 旷工 当月薪资明细 创建起始的JSP页面,命名为start.jsp,代码如下: 配置struts.xml文件,代码如下: /index.jsp 配置web.xml文件,代码如下: struts2 org.apache.struts2.dispatcher.FilterDispatcher config struts-default.xml,struts-plugin.xml,./struts.xml struts2 /* REQUEST FORWARD 运行start.jsp页面,效果如图2.6.1:图2.6.1 运行start.jsp页面 练习需求说明 完成员工薪资管理系统查询显示功能,可根据部门和拼音码进行组合查询。实现思路 在处理
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1