Java企业级开发(J2EE)实验报告
指导教师:王磊
软件学院综合性实验报告
专业:JAVA 年级/班级: 09计算机2班 20##—20##学年第一学期
一、实验目的
熟练掌握接啊java编程思想和三大框架的应用,了解使用三大框架的开发流程和xml配置文件配置。
二、实验仪器或设备
计算机
三、总体设计(设计原理、设计方案及流程等)
创建一个Web项目,命名为“xscjManage”。该项目要实现学生、课程及成绩的增加、删除、修改、查找功能,需要三个表,即XSB表、KCB表、CJB表。其中XSB表中含有该学生所属专业的ID,且作为外键,故还应该有一个ZYB表。在登录学生成绩管理系统时,如果没有登录成功,就回到登录界面,登录成功后方可进行各种操作,用Hibernate来完成数据的持久层应用,用Spring的Bean来管理组件(主要是DAO、业务逻辑和Struts的Action),而用Struts来完成页面的控制跳转。
四、实验步骤(包括主要步骤、代码分析等)
登录界面login.jsp的实现:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>学生成绩管理系统</title>
</head>
<body bgcolor="#D9DFAA">
<table width="700" align="center">
<tr>
<td>
<s:form action="login.action" method="post">
<s:textfield name="dl.xh" label="学号" size="20"/>
<s:password name="dl.kl" label="口令" size="21"/>
<s:submit value="登录"/>
</s:form>
</td>
</tr>
</table>
</body>
</html>
登陆成功后返回页面oneXscj.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body bgcolor="#D9DFAA">
<h3>该学生成绩如下:</h3>
<hr width="700" align="left">
<table border="1" cellspacing="1" cellpadding="8" width="700">
<tr>
<th>课程名</th><th>成绩</th><th>学分</th>
</tr>
<s:iterator value="#request.list" id="xscj">
<tr>
<td><s:property value="#xscj[2]"/> </td>
<td><s:property value="#xscj[3]"/> </td>
<td><s:property value="#xscj[4]"/> </td>
</tr>
</s:iterator>
</table>
<input type="button" value="返回" onClick="javaScript:history.back()"/>
</body>
</html>
如果失败,会跳转到noXscj.jsp页面:
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<body bgcolor="#D9DFAA">
对不起,登陆失败!
</body>
</html>
操作成功后会跳转到成功界面success.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body bgcolor="#D9DFAA">
恭喜你,操作成功!
</body>
</html>
添加Spring框架,用Hibernate建立与数据库的连接。
Dlb.java代码如下:
package org.model;
public class Dlb implements java.io.Serializable {
private Integer id;
private String xh;
private String kl;
public Dlb() {}
public Dlb(String xh, String kl) {
this.xh = xh;
this.kl = kl;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getXh() {
return this.xh;
}
public void setXh(String xh) {
this.xh = xh;
}
public String getKl() {
return this.kl;
}
public void setKl(String kl) {
this.kl = kl;
}
}
Xsb.java代码如下:
package org.model;
import java.util.Date;
public class Xsb implements java.io.Serializable {
private String xh;
private Zyb zyb;
private String xm;
private Byte xb;
private Date cssj;
private Integer zxf;
private String bz;
private byte[] zp;
public Xsb() {
}
public Xsb(Zyb zyb, String xm, Byte xb, Date cssj, Integer zxf, String bz,byte[] zp) {
this.zyb = zyb;
this.xm = xm;
this.xb = xb;
this.cssj = cssj;
this.zxf = zxf;
this.bz = bz;
this.zp = zp;
}
}
Kcb.java代码如下:
package org.model;
public class Kcb implements java.io.Serializable {
private String kch;
private String kcm;
private Short kxxq;
private Short xs;
private int xf;
public Kcb() {
}
public Kcb(String kcm, Short kxxq, Short xs, int xf) {
this.kcm = kcm;
this.kxxq = kxxq;
this.xs = xs;
this.xf = xf;
}
}
对应文件完成后,还要在Spring配置文件中注册,Spring配置文件application Context.xml。
登录类对应DAO层实现,DlDao.java接口:
package org.dao;
import java.util.List;
import org.model.Dlb;
public interface DlDao {
public void save(Dlb user);
public Dlb find(String xh,String kl);
public boolean existXh(String xh);
}
学生类对应DAO层实现,XsDao.java接口:
package org.dao;
import java.util.List;
import org.model.Xsb;
public interface XsDao {
public void save(Xsb xs);
public void delete(String xh);
public void update(Xsb xs);
public Xsb find(String xh);
public List findAll(int pageNow,int pageSize);
public int findXsSize();
}
下面实现业务逻辑层及接口
DlService.java接口:
package org.service;
import org.model.Dlb;
public interface DlService {
public void save(Dlb user);
public Dlb find(String xh,String kl);
public boolean existXh(String xh);
}
对应实现类DlServiceManage.java:
package org.service.imp;
import org.dao.DlDao;
import org.model.Dlb;
import org.service.DlService;
public class DlServiceManage implements DlService{
private DlDao dlDao;
public void setDlDao(DlDao dlDao) {
this.dlDao = dlDao;
}
public boolean existXh(String xh) {
return dlDao.existXh(xh);
}
public Dlb find(String xh, String kl) {
return dlDao.find(xh, kl);
}
public void save(Dlb user) {
dlDao.save(user);
}
}
XsService.java接口:
package org.service;
import java.util.List;
import org.model.Xsb;
public interface XsService {
public void save(Xsb xs);
public void delete(String xh);
public void update(Xsb xs);
public Xsb find(String xh);
public List findAll(int pageNow,int pageSize);
public int findXsSize();
}
ZyService.java接口:
package org.service;
import java.util.List;
import org.model.Zyb;
public interface ZyService {
public void save(Zyb zy);
public Zyb getOneZy(Integer zyId);
public List getAll();
}
把业务逻辑交由Spring容器的Bean管理,在Spring配置文件中加入以下代码:
<bean id="dlService" class="org.service.imp.DlServiceManage">
<property name="dlDao">
<ref bean="dlDao"/>
</property>
</bean>
<bean id="xsService" class="org.service.imp.XsServiceManage">
<property name="xsDao">
<ref bean="xsDao"/>
</property>
<property name="cjDao">
<ref bean="cjDao"/>
</property>
</bean>
<bean id="zyService" class="org.service.imp.ZyServiceManage">
<property name="zyDao">
<ref bean="zyDao"/>
</property>
</bean>
<bean id="kcService" class="org.service.imp.KcServiceManage">
<property name="kcDao">
<ref bean="kcDao"/>
</property>
</bean>
<bean id="cjService" class="org.service.imp.CjServiceManage">
<property name="cjDao">
<ref bean="cjDao"/>
</property>
</bean>
在我们的操作中,必须要用到事务管理,所以这里要用到Spring的事务,在Spring配置文件中加入以下代码来对业务逻辑进行事务管理:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor"
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"
<property name="beanNames">
<list>
<value>xsService</value>
<value>kcService</value>
<value>cjService</value>
<value>zyService</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>main.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
</web-app>
还要配置Struts 2与Spring整合用到的struts.properties文件,其代码如下:
struts.objectFactory=spring
运行后出现如下效果:
五、结果分析与总结
数据经过三层,第一层:实体类层, 第二层:业务逻辑层 ,第三层:表示层(显示层),且层与层之间通过接口的调用实现数据的层间的传输,特别是接口和struts和spring的配置文件的应用实现了类与类之间的松耦合。
JavaEE基础实验报告2实验名称Servlet的开发应用实验目的1掌握Servlet的一般开发过程2掌握servlet的配置3掌…
Javaee开发技术实验报告辅导员意见:实验名称:STRUTS框架技术及应用计算机科学与工程系计算机科学与技术专业班第实验小组作者…
JavaEE学院软件学院班级学号姓名指导教师时间20xx年5月实验报告课程名称实验项目实验地点专业班级学生姓名指导教师本科实验报告…
延安大学计算机学院实验报告附页延安大学计算机学院实验报告附页延安大学计算机学院实验报告附页延安大学计算机学院实验报告附页延安大学计…
院系计算机科学学院专业计算机科学与技术专业年级09级课程名称JavaEE编程技术学号09061059姓名蓝潇莹指导教师徐胜舟20x…
软件学院设计性实验报告一实验目的1熟练掌握SSH3个框架的加载2熟练掌握各框架配置文件的结构和标记3掌握框架集成的方法和步骤二实验…
中南民族大学计算机科学学院JavaEE实验报告20xx20xx第一学期课程名称J2EE及其应用院系年级20xx专业计算机科学与技术…
JAVAEE开发技术实验报告第四次实验实验题目JavaEE开发环境安装和配置桂林电子科技大学计算机科学与工程学院1实验目的掌握Ja…
JavaEE基础实验报告2实验名称Servlet的开发应用实验目的1掌握Servlet的一般开发过程2掌握servlet的配置3掌…