第六章 Struts2深入学习一 上机.docx
- 文档编号:4937798
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:35
- 大小:140.04KB
第六章 Struts2深入学习一 上机.docx
《第六章 Struts2深入学习一 上机.docx》由会员分享,可在线阅读,更多相关《第六章 Struts2深入学习一 上机.docx(35页珍藏版)》请在冰豆网上搜索。
第六章Struts2深入学习一上机
第6章
Struts2深入学习
(一)
上机内容:
1.struts.xml常量配置
2.解耦访问ServletAPI
3.动态方法调用
4.实现Action接口
5.实现ActionSupport类
6.自定义处理结果
7.模型驱动
8.国际化
上机目标:
1.掌握Struts2解耦访问ServletAPI的方法
2.掌握动态方法调用
3.理解自定义处理结果
4.掌握使用模型驱动来封装用户请求参数
5.掌握Struts2国际化
阶段1:
指导
训练内容
1.使用struts.xml常量配置,避免乱码
2.解耦访问ServletAPI
3.实现Action接口
4.模型驱动
需求说明
员工薪资管理系统主要实现以下功能
(1)显示所有员工信息
(2)根据部门、拼音码查询员工
(3)为某个员工执行加班操作
(4)为某个员工执行请假操作
(5)为某个员工执行旷工操作
(6)核算所有员工当月工资
实现思路
Ø创建系统所需的sql语句,代码如下:
createsequenceseq_emp--创建序列
startwith1
incrementby1;
createtabletb_dept--创建部门表
(
Idnumberprimarykey,--自动编号,主键
dnamevarchar2(10)notnull,--部门名称
dmastervarchar2(10)notnull--负责人
);
insertintotb_deptvalues(seq_emp.nextval,'研发部','张三');
insertintotb_deptvalues(seq_emp.nextval,'市场部','李四');
insertintotb_deptvalues(seq_emp.nextval,'人事部','王五');
createtabletb_emp--创建职工表
(
Idnumberprimarykey,--自动编号,主键
empIdvarchar2(10)notnull,--员工编号
enamevarchar2(10)notnull,--员工姓名
esexvarchar2
(2)notnull,--员工性别
postvarchar2(10)notnull,--职位
basepaynumber(6,2)notnull,--基本工资
deptIdnumbernotnull,--部门编号
pymvarchar2(10)notnull,--拼音码
constraintfk_deptIdforeignkey(deptId)referencestb_dept(id)
);
insertintotb_empvalues(seq_emp.nextval,'4201','胡小军','男','教员',1200.0,1,'HXJ');
insertintotb_empvalues(seq_emp.nextval,'4202','张天朋','男','教员',1200.0,1,'ZTP');
insertintotb_empvalues(seq_emp.nextval,'4203','孙小杰','女','人事专员',1300.0,3,'SXJ');
insertintotb_empvalues(seq_emp.nextval,'4204','孙悟空','男','人事专员',1300.0,3,'SWK');
insertintotb_empvalues(seq_emp.nextval,'4205','孙科人','女','市场专员',1400.0,2,'SKR');
insertintotb_empvalues(seq_emp.nextval,'4207','刘月芬','女','市场专员',1400.0,2,'LYF');
createtabletb_overtime--创建加班表
(
Idnumberprimarykey,--自动编号,主键
emptIdnumbernotnull,--加班员工编号
hoursnumber
(2)notnull,--加班时长
reasonvarchar2(50)notnull,--加班原因
overtimeDtmdatedefaultsysdate,--加班日期
constraintfk_overtime_emptIdforeignkey(emptId)referencestb_emp(Id)
);
createtabletb_PersonalLeave--创建请假表
(
Idnumberprimarykey,--自动编号,主键
emptIdnumbernotnull,--请假员工编号
daysnumber
(2)notnull,--请假天数
reasonvarchar2(50)notnull,--请假原因
PersonalLeaveTypenumber
(1)notnull,--请假类型0:
事假1:
病假
PersonalLeaveDtmdatedefaultsysdate,--请假日期
constraintfk_PersonalLeave_emptIdforeignkey(emptId)referencestb_emp(Id)
);
createtabletb_Absence--创建旷工表
(
Idnumberprimarykey,--自动编号,主键
emptIdnumbernotnull,--旷工员工编号
daysnumber
(1)notnull,--旷工天数
memovarchar2(50)notnull,--备注
absenceDtmdatedefaultsysdate,--旷工日期
constraintfk_Absence_emptIdforeignkey(emptId)referencestb_emp(Id)
)
Ø创建用于访问数据库的JavaBean,命名为BaseDAO,代码如下:
publicclassBaseDAO{
//定义数据源驱动
privatestaticfinalStringDRIVER="oracle.jdbc.driver.OracleDriver";
//定义连接字符串
privatestaticfinalStringURL="jdbc:
oracle:
thin:
@localhost:
1521:
soft";
//定义用户名
privatestaticfinalStringUID="ht";//定义密码
privatestaticfinalStringPWD="ht";//得到连接
publicstaticConnectiongetConnection(){
Connectioncon=null;
try{
Class.forName(DRIVER);//加载驱动
con=DriverManager.getConnection(URL,UID,PWD);//获得连接
}catch(Exceptione){
e.printStackTrace();
}
returncon;
}
//有结果,有参数的sql语句
publicstaticResultrunSelectSql(Stringsql,Object[]params){
Connectioncon=null;
PreparedStatementps=null;
ResultSetres=null;
Resultresult=null;
try{
con=getConnection();//得到连接
ps=con.prepareStatement(sql);//获取PreparedStatement对象
//设置参数
for(inti=0;i ps.setObject(i+1,params[i]); } res=ps.executeQuery();//执行sql语句,获得ResultSet对象 result=ResultSupport.toResult(res); }catch(Exceptione){ e.printStackTrace(); }finally{ try{ res.close();//关闭对象,释放资源 ps.close(); con.close(); }catch(Exceptione){ e.printStackTrace(); } } returnresult; } //执行没结果,有参数的sql语句 publicstaticbooleanrunUpdateSql(Stringsql,Object[]params){ Connectioncon=null; PreparedStatementps=null; try{ con=getConnection();//得到连接 ps=con.prepareStatement(sql);//获取PreparedStatement对象 //设置参数 for(inti=0;i ps.setObject(i+1,params[i]); } ps.executeUpdate();//执行sql语句 returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; }finally{ try{ ps.close();//关闭连接,释放资源 con.close(); }catch(Exceptione){ e.printStackTrace(); } } } //执行有结果,没参数的sql语句 publicstaticResultrunSelectSql(Stringsql){ Connectioncon=null; PreparedStatementps=null; ResultSetres=null; Resultresult=null; try{ con=getConnection();//得到连接 ps=con.prepareStatement(sql);//获取PreparedStatement对象 res=ps.executeQuery(); result=ResultSupport.toResult(res);//把ResultSet对象转换成Result对象 }catch(Exceptione){ e.printStackTrace(); }finally{ try{ res.close();//关闭对象,释放资源 ps.close(); con.close(); }catch(Exceptione){ e.printStackTrace(); } } returnresult; } } Ø创建用于处理”职工薪资管理系统”业务的JavaBean,命名为EmpService.java,代码如下: publicclassEmpService { //得到所有职工 publicstaticMap[]getAllEmp() { //构造sql语句 Stringsql="selectemp.id,emp.empid,emp.ename,emp.esex,dept.dname,emp.post,emp.basepayfromtb_empemp,tb_deptdeptwhereemp.deptid=dept.id"; //执行sql语句 returnBaseDAO.runSelectSql(sql).getRows(); } //得到所有的部门 publicstaticMap[]getAllDept() { //构造sql语句 Stringsql="select*fromtb_dept"; //执行sql语句 returnBaseDAO.runSelectSql(sql).getRows(); } } Ø创建用于处理职工薪资管理系统业务逻辑的父类控制器Action,命名为,BaseAction.java代码如下: publicclassBaseActionextendsActionSupport{ //获取request对象 publicMap //通过ActionContext得到request对象 return(Map)ActionContext.getContext().get("request"); } //获取session对象 publicMap returnActionContext.getContext().getSession(); } //获取application对象 publicMap return(Map)ActionContext.getContext().getApplication(); } //获取response对象 publicHttpServletResponsegetResponse(){ //通过ServletActionContext类获取HttpServletResponse对象。 HttpServletResponseresponse=ServletActionContext.getResponse(); //设置响应头与字符编码 response.setContentType("text/html;charset=gbk"); response.setCharacterEncoding("gbk"); returnresponse; } } Ø创建用于处理职工薪资管理系统业务逻辑的控制器Action,命名为,EmpAction.java代码如下: publicclassEmpActionextendsBaseActionimplementsAction { //默认执行显示所有职工信息 publicStringexecute() { //调用业务层,获取所有职工信息 Map[]emps=EmpService.getAllEmp(); //调用业务层,获取所有部门信息 Map[]depts=EmpService.getAllDept(); //存储到request范围内 this.getRequest().put("emps",emps); //存储到session范围内 this.getSession().put("depts",depts); //转发到index.jsp页面 returnthis.SUCCESS; } } Ø创建用于提供显示界面的JSP页面,命名为index.jsp,代码如下: --从数据库中加载所有部门信息--> forEachvar="dept"items="${depts}"> forEach> submitvalue="查询"method="doQueryEmp"/> iftest="${! emptyemps}"> —如果存在记录--> forEachvar="emp"items="${emps}"> id=${emp.id}&empid=${emp.empid}"target="_blank">加班 id=${emp.id}&empid=${emp.empid}"target="_blank">请假 id=${emp.id}&empid=${emp.empid}"target="_blank">旷工 forEach> url(images/nh-bg.gif)"> if>人事管理系统-员工薪资管理 部门: 拼音码: 姓名 性别 所属部门 职位 基本工资 操作
Ø创建起始的JSP页面,命名为start.jsp,代码如下:
--转发到emp控制器-->
forwardpage="emp.action"/> Ø配置struts.xml文件,代码如下: --配置常量解决乱码,与页面布局--> --Struts2的Action都必须配置在package里面--> --继承自默认包--> --定义一个login的Action类,实现类为LoginAction--> --定义结果与视图资源的映射关系--> Ø配置web.xml文件,代码如下: --配置Struts2的核心控制器FilterDispatcher--> --filter名称--> --filter实现类--> --通过init-param配置节重新指定Struts2配置文件的位置--> --指定struts.xml在WEB-INF目录下--> --配置filter的映射部分--> --filter名称--> --所有用户请求,都会被FilterDispatcher拦截--> Ø运行start.jsp页面,效果如图2.6.1: 图2.6.1运行start.jsp页面 练习 需求说明 完成员工薪资管理系统查询显示功能,可根据部门和拼音码进行组合查询。 实现思路 Ø在处理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 Struts2深入学习一 上机 第六 Struts2 深入 学习
![提示](https://static.bdocx.com/images/bang_tan.gif)