




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Java web应用实验报告Application and Techenology of Multimdia Experiment Report 学生所在学院: 燕山大学里仁学院 学生所在班级: 08计算机5班 _ 学 生 姓 名: 高 湛 学 号: 081304011151 指 导 教 师: 教 务 处2011年 11 月实验一 struts实现拦截器1. 实验目的了解拦截器的原理实现,他的内容,运用的反射机制及配置.2. 实验原理Web项目中,客户须先在视图界面提交一个HTTP请求,在Struts2的ServeletDispatcher接受请求时,Struts2会查找配置文件,入Stru
2、st.xml文件.根据xml文件中定义的拦截器配置,去调用拦截.如果配置了拦截器栈,则根据拦截器在拦截器栈中得前后顺序,意义进行调用.3. 实验步骤1 定义拦截器类和被拦截类内容.2 运用反射机制调用类和类方法.3 设置拦截器处理类,配置拦截器在合适执行以及拦截器类和被拦截类执行的先后顺序.4 测试程序运行结果显示拦截功能正常执行情况.4. 主要代码及说明功能执行类:ackage erceptor;/执行功能类public class ExecuteFunction implements ExecuteFunctionInterface /执行功能类
3、执行方法public void execute() System.out.println("execute something.");功能执行接口:package erceptor;/执行功能接口public interface ExecuteFunctionInterface public void execute();拦截器类:package erceptor;/拦截器类public class Interceptor /拦截执行功能类之前执行方法public void before
4、Doing()System.out.println("before doing Something.");/拦截执行功能类之后执行方法public void afterDoing()System.out.println("after doing Something.");拦截器处理类:package erceptor;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/拦截器处理类public class Int
5、erceptorHandler implements InvocationHandler private Object object;private Interceptor inter = new Interceptor();/设置需要拦截的执行功能类public void setObject(Object object) this.object = object;/接口invoke方法,proxy是代理实例,method是实例方法,args是代理类传入的方法参数。public Object invoke(Object proxy, Method method, Object args) th
6、rows Throwable inter.beforeDoing();/object提供该方法的类实例,args是调用方法所需的参数值的数组Object returnObject = method.invoke(object, args);inter.afterDoing();return returnObject;代理对象类:package erceptor;import java.lang.reflect.Proxy;public class ProxyObject private InterceptorHandler handler = new
7、 InterceptorHandler();/得到执行类的代理对象实例public Object getProxy(Object object) handler.setObject(object);/创建对象实例return Proxy.newProxyInstance(ExecuteFunction.class.getClassLoader(), object.getClass().getInterfaces(), handler);测试程序:package erceptor;/测试执行类和拦截器类是否执行public class TestInte
8、rceptor public static void main(String args) ExecuteFunctionInterface test = new ExecuteFunction();/得到执行类的一个代理对象实例ExecuteFunctionInterface resultObject = (ExecuteFunctionInterface) new ProxyObject().getProxy(test);/代理对象执行resultObject.execute();5. 实验结果在TestInterceptor.java文件上单击鼠标右键,然后单击Run As| JavaAp
9、lication命令.在MyEclipse控制台得到运行结果,如图实验二 struts实现上传及下载1. 实验目的:struts实现上传及下载,并学习如何使用structs框架2. 实验步骤:第一步:编写页面文件第二步:struts-config.xml文件,包含form-bean 和action的配置第三步:FileUploadForm.java第四步:FileUploadAction.java3.主要代码及说明第一步:编写页面文件<% page language=”java" pageEncoding="UTF-8"%><!DOCTYPE H
10、TML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN"><html><head><%#include file="/header.jsp"%><title>struts上传文件</title></head><body><h2>使用struct上传文件</h2><hr/><form. action="<%=basePath%>strutsfileupload.do
11、?method=upload" method="post"enctype="multipart/form-data"><table><tr><td>请选择要上传的文件</td><td><input type="file" name="filePath" size="20"/><br/></td></tr><tr><td><input type=
12、"submit" value="上传"/></td><td><a href="<%=basePath%>strutsfileupload.do?method=download&path=fileload/xxxx.txt">我要下载</a></td></tr></table></form></body></html>第二步:struts-config.xml文件,包含form-bean 和a
13、ction的配置<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-/Apache Software Foundation/DTD Struts Configuration 1.2/EN" "/dtds/struts-config_1_2.dtd"><data-sources /><form-beans ><form-bean
14、name="fileUploadForm"type="com.xinglongjian.struts.fileupload.FileUploadForm" /></form-beans><global-exceptions /><global-forwards><forward name="error" path="/error/sysError.jsp"></forward></global-forwards><action-ma
15、ppings><action path="/strutsfileupload" parameter="method" name="fileUploadForm"type="com.xinglongjian.struts.fileupload.FileUploadAction" ><forward name="success" path="/struts/success.jsp"></forward></action><
16、;/action-mappings></struts-config>第三步:FileUploadForm.javapublic class FileUploadForm. extends ActionFormprivate FormFile filePath; /类型为FormFile,变量filePath与页面的file名称一致。public FormFile getFilePath()return filePath;public void setFilePath(FormFile filePath)this.filePath = filePath;第四步:FileUplo
17、adAction.javapublic class FileUploadAction extends DispatchAction/* 上传文件* param mapping* param form* param request* param response* return* throws Exception*/public ActionForward upload(ActionMapping mapping, ActionForm. form, HttpServletRequest request, HttpServletResponse response)throws Exception
18、FileUploadForm. fileForm=(FileUploadForm)form;FormFile file=fileForm.getFilePath();String realPath=this.getServlet().getServletContext().getRealPath("/fileload");if(file=null)return mapping.findForward("error");String filename=file.getFileName();int size=file.getFileSize();if(siz
19、e>1024*1024)return mapping.findForward("error");InputStream is=null;BufferedOutputStream bs=null;try/get a inputstream object form. uploadFileis=file.getInputStream();bs=new BufferedOutputStream(new FileOutputStream(realPath+"/"+filename);byte buffer=new byte20480;int count=0;
20、while(count=is.read()!=-1)bs.write(buffer, 0, count);catch (Exception e)e.printStackTrace();finallybs.flush();bs.close();is.close();return mapping.findForward("success");/* 下载文件* param mapping* param form* param request* param response* return* throws Exception*/public ActionForward downlo
21、ad(ActionMapping mapping, ActionForm. form, HttpServletRequest request, HttpServletResponse response)throws ExceptionString path=request.getParameter("path");String realPath=this.getServlet().getServletContext().getRealPath("/"+path);File uploadFile=new File(realPath);InputStream
22、 is=new FileInputStream(uploadFile);OutputStream s=response.getOutputStream();BufferedInputStream bis=new BufferedInputStream(is);BufferedOutputStream bos=new BufferedOutputStream(os);/弹出下载对话框的代码response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(pa
23、th,"utf-8");int bytesRead=0;byte buffer=new byte8192;while(bytesRead=bis.read(buffer, 0, 8192)!=-1)bos.write(buffer, 0, bytesRead);bos.close();is.close();bis.close();os.close();return null;4.实验结果上传文件保存到T_FILE表中。文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),
24、由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的差别,从而撤除程序在多数据库移植上的樊篱。 1首先数据表中的Blob字段在Java领域对象中声明为byte类型,而非java.sql.Blob类型。2数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即Spring所提供的用户自定义的类型,而非java.sql.Blob。 通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。以上是Spr
25、ingHibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。综上所述,我们可以通过图 2,描绘出SSH处理文件上传的方案:图 2 SSH处理文件上传技术方案文件上传的页面如图 3所示:图 3 文件上传页面文件下载的页面如图 4所示:图 4 文件下载页面工程的类按SSH的层次结构划分为数据持久层、业务层和Web层;WEB-INF下的applicationContext.xml为Spring的配置文件,struts-
26、config.xml为Struts的配置文件,file-upload.jsp为文件上传页面,file-list.jsp为文件列表页面。实验三 hibernate实现一对一或一对多映射1. 实验目的 通过hibernate的一对一以及一对多的实验的练习,来熟悉hibernate的知识点的掌握2. 实验原理1.配置好hibernate的配置文件和与类对应的配置文件后,启动服务器2.服务器通过实例化Configeration对象,读取hibernate.cfg.xml文件的配内容,并根据相关的需求建好表或者和表建立好映射关系3.通过实例化的Configeration对象就可以建立sessionFac
27、tory实例,进一步,通过sessionFactory实例可以创建session对象4.得到session之后,便可以对数据库进行增删改查操作了,除了比较复杂的全文搜索外,简单的操作都可以通过hibernate封装好的session内置方法来实现5.此外,还可以通过事物管理,表的关联来实现较为复杂的数据库设计6.优点:hibernate相当于java类和数据库表之间沟通的桥梁,通过这座桥我们就可以做很多事情了 3. 实验步骤 先测试一对一的关系,然后再测试一对多的关系。一对多的例子,我们举一个用户有多个订单的例子,然后来进行测试,一对一我们想的是一个人只能对应一个身份证号码,4. 主要代码及说
28、明 一对多的例子的代码是:Ts019usertable.hbm.xml 和 Ts019ordertable.hbm.xmlTs019usertable.hbm.xml在class里面多了下面的东西: <!- 我们可以在Ts019usertable.java中看到这个属性 private Set ts019odertables = new HashSet(0); &
29、#160; 那么这个就是set name 的值 inverse这个等于true表示的意思是让对方来记录,默认的是false 我们可以看见key里面有一个name这个属性的值,这个表示的是这个表的那一列有对方来记录 one-to-many 里面有一个是class是表示的去查找哪一个类 这里是以对多的情况
30、; -> <set name="ts019odertables" inverse="true"> <key> &
31、#160; <column name="USERID" length="32" /> </key> <one-to-many class="com.lore.gb.entity.Ts019odertable&
32、quot; /> </set>Ts019ordertable.hbm.xml的class里面多个下面这些东西 <!- 同样地道理 many-to-one 里面的name表示的是我的类里面的属性有一个ts019usertable class表示他是哪一个类里面的。
33、 column 里面的name的uerid表示的是这个class类面的userid是外键 如果inverse是true的话,那么他就要记录这个东西 这个是多对一 -> <many-to-one name="ts019u
34、sertable" class="com.lore.gb.entity.Ts019usertable" fetch="select"> <column name="USERID" length="32" /></many-to-one>现在我们知道这个是一对多以及多对一的关系了吧!下面我们用具体的演示来测试一下一对多,以及多对一的单双向关系:+【
35、你可以建一个TestManyToOne.java,在主函数里面写】/我们来测试多对一地情况,那么,我们先注释掉Ts019usertable.hbm.xml里面的set的所有的东西和Ts019usertable里面的ts019odertable这个属性,以及关于它的所有的方法。 Session session = HibernateSessionFactory.getSession(); Transaction trans = session.beginTransaction();/涉及到事务的时候用它 /现在是多对一,表示多个订
36、单对应一个用户 Ts019usertable user = new Ts019usertable();/我们创建一个用户 user.setUsername("佘占君1");/设置属性,由于在这里我们设计不到年龄,如果有年龄的话那么设置年龄的时候就是BigDecimal这个属性类了 /BigDecimal big = new BigDecimal(23); /user.setAge(big); /上面的这一大串的过程就是创建了一个人,下面我们创建一个订单 &
37、#160;Ts019odertable order = new Ts019odertable(); order.setOrdername("手机1"); Ts019odertable order1 = new Ts019odertable(); order1.setOrdername("笔记本1");order1.setTs019usertable(user); order.setTs019usertable(user);/这里就涉及到效率的问题了。
38、60;/* session.save(order); session.save(order1); session.save(user); /显示的它执行的语句有:这种情况必须设置为外键应许为空,不然插入要报错的。 * Hibernate: insert into SYSTEM.TS019ODERTABLE (USERID, ORDERNAME, ORDERID) values (?, ?, ?) Hibernat
39、e: insert into SYSTEM.TS019ODERTABLE (USERID, ORDERNAME, ORDERID) values (?, ?, ?) Hibernate: insert into SYSTEM.TS019USERTABLE (USERNAME, USERID) values (?, ?) Hibernate: update SYSTEM.TS019ODERTABLE set USERID=?, O
40、RDERNAME=? where ORDERID=? Hibernate: update SYSTEM.TS019ODERTABLE set USERID=?, ORDERNAME=? where ORDERID=? */ session.save(user); session.save(order); session.save(order1); /明显用第二只种方
41、式执行的效率要比第一种快,因为sql语句少; /* * Hibernate: insert into SYSTEM.TS019USERTABLE (USERNAME, USERID) values (?, ?) * Hibernate: insert into SYSTEM.TS019ODERTABLE (USERID, ORDERNAME, ORDERID) values (?, ?, ?) * Hibernate: insert into SYSTEM.TS019ODERTABLE (USERID
42、, ORDERNAME, ORDERID) values (?, ?, ?) */也就是说我们可以动态去改变程序的执行的效率。 mit(); session.close();【你可以建一个TestOnToMany.java,在主函数里面写】/现在我们测试的是one-to-many的单向,那么我们首先要把原来注释掉得内容还原回来,然后再把Ts019odertable.hbm.xml里面的many-to-one注释掉,把Ts019odertable他的属性private Ts019usertable ts019usertable这
43、个也注释掉 /当然我们先可以把这个set 的inverse这个属性的值删除,或者更改为false这就表示自己记录关系 Session session = HibernateSessionFactory.getSession(); Transaction trans = session.beginTransaction(); /还是我们生成一个用户 Ts019usertable user = new Ts019usertable(); user.setUsernam
44、e("shezhanjun2"); /还是生成两个订单 Ts019odertable order1 = new Ts019odertable(); order1.setOrdername("水杯2"); Ts019odertable order2 = new Ts019odertable(); order2.setOrdername("自行车2"); /现在是自己记录关系,所以有下面的这两条 &
45、#160;user.getTs019odertables().add(order1);/我们向里面添加订单 user.getTs019odertables().add(order2);/这里就是得到订单的集合,向里面添加订单session.save(user); session.save(order1); session.save(order2); mit(); session.close(); /* * 只要我们改动set里面的让对方记录
46、关系 inverse =true这时就记录不进去,因为many-to-one已经被我们注释掉了,它就不知道如何记关系了。 Hibernate: insert into SYSTEM.TS019USERTABLE (USERNAME, USERID) values (?, ?) Hibernate: insert into SYSTEM.TS019ODERTABLE (ORDERNAME, ORDERID) values (?, ?)
47、; Hibernate: insert into SYSTEM.TS019ODERTABLE (ORDERNAME, ORDERID) values (?, ?) 但是我们改为inverse="false"这时自己记录关系,那么还是正常执行更新的操作,执行的语句是: &
48、#160; Hibernate: insert into SYSTEM.TS019USERTABLE (USERNAME, USERID) values (?, ?) Hibernate: insert into SYSTEM.TS019ODERTABLE (ORDERNAME, ORDERID) values (?, ?) Hibernate: insert into SYSTEM.TS019ODERTABLE (
49、ORDERNAME, ORDERID) values (?, ?) Hibernate: update SYSTEM.TS019ODERTABLE set USERID=? where ORDERID=? Hibernate: update SYSTEM.TS019ODERTABLE set USERID=? where ORDERID=? */下面是一对一的例子: Session session = H
50、ibernateSessionFactory.getSession(); Transaction trans = session.beginTransaction(); /* /产生一个身份证号码 Passport port = new Passport();
51、160; port.setPro"123456"); /在产生一个人 Person person = new Person(); person.setPname("陈俊任");
52、 port.setPerson(person); session.save(port);/因为这是port在记录关系呢 session.save(person); &
53、#160; mit(); session.close();/现在我想要更新怎么办呢?也就是这个身份证要换新的一个人来使用的时候怎么办? /* Passport port = (Passport) session.get(Passport.class, "402881e532cba0fb0132cba0fd100001&quo
54、t;); Person person = new Person(); person.setPname("陈"); port.setPerson(person); session.save(person);
55、160; session.update(port); mit(); session.close();下面是一对多的实验代码5. 实验结果一对多的测试的实验效果:Hibernate: insert into SYSTEM.TS019USERTABLE (USERNAME, USERID) values (?, ?) * Hibernate: insert into SYSTEM.TS019ODERTABLE (USERID, ORDERNAME, ORDERID) values (?, ?, ?) * Hibernate: insert into SYSTEM.TS019ODERTABLE (USERI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新一代风机支撑结构研发制造一体化项目可行性研究报告-立项备案
- 《3D眼镜》(教学设计)苏教版劳动三年级下册
- Unit 4 My Family Lesson 1 My Family Photo 教学设计 2024-2025学年冀教版英语七年级上册
- 七年级生物下册 第四单元 第四章 第二节 血流的管道-血管教学设计4 (新版)新人教版
- 7 汤姆·索亚历险记(节选)(教学设计)2023-2024学年统编版语文六年级下册
- 2《学会沟通交流》教学设计-2024-2025学年道德与法治五年级上册统编版
- 5 声音的强与弱 教学设计-2024-2025学年科学四年级上册教科版
- 2025年小学教师资格《综合素质》教育案例反思与课程设计试题试卷
- 2025年消防安全知识培训考试题库:消防宣传教育方法在消防安全培训中的创新应用试题
- 2025年小学英语毕业考试模拟卷:英语写作思路拓展与语法运用试题
- 采油工程 试题及答案
- 西医临床基因组学应用试题及答案
- 内河船客运培训课件
- 2023-2029年中国鸡尾酒行业市场运行态势及投资战略规划报告
- 2024年记者证考试挑战试题及答案
- 2025年刑法模拟检测试卷(罪名认定与刑罚适用)
- 健康厨房-家庭饮食指南
- 初中生物重要识图填空速记54个-2025年中考生物一轮复习知识清单
- T-SCCX A 0010-2024 T-CQXS A 0001-2024 信息技术应用创新项目建设规范
- 合作合同范本 英文
- (二调)武汉市2025届高中毕业生二月调研考试 政治试卷(含标准答案)
评论
0/150
提交评论