软件架构小组实验报告13

上传人:仙*** 文档编号:29017620 上传时间:2021-09-23 格式:DOC 页数:29 大小:5.17MB
收藏 版权申诉 举报 下载
软件架构小组实验报告13_第1页
第1页 / 共29页
软件架构小组实验报告13_第2页
第2页 / 共29页
软件架构小组实验报告13_第3页
第3页 / 共29页
资源描述:

《软件架构小组实验报告13》由会员分享,可在线阅读,更多相关《软件架构小组实验报告13(29页珍藏版)》请在装配图网上搜索。

1、中南大学软件开发架构平台技术实验报告姓 名:学 号:班 级:指导老师:完成时间:2014-05 实验一 基于MVC的JPetStore开发一、完成项目的过程和时间安排完成过程:实验由我们小组三人合作完成,考虑到我们对这个实验相关的知识都还比较陌生,我们商量后决定每个人做自己的,遇到问题互相讨论,最终我们小组成员也都先后完成实验,达到实验预期的目标,完成了基于MVC的JPetStore的开发。时间安排:我们小组利用三天时间完成实验,事先对相关知识的熟悉大概花费了1天的时间,大部分的时间都用来编码和调试。二、遇到的问题和解决方法 简单的说一下做的过程中遇到的几个问题,有些问题虽然看着很简单,但是在

2、实验过程中确实经常因为一些很简单的问题卡很久。问题1. 商品展示部分product只能显示一条内容解决方法:一开始是以为jsp页面显示出了问题,但是没有检查出结果,后来发现页面显示出的全都是每一个类型的第一条内容,后来我开始在servlet方面查错,通过一层层的调用system.out.println();方法,最终发现我在DAO层的Impl实现类中把while写成了if,问题的原因也就显而易见了。问题2. 在商品展示模块,所有的图片都无法正常显示解决方法:经过检查jsp页面内容都没有出错,后来发现由于组织工程的文件夹内容不同,在数据库中的路径写的不一致,他用的是绝对路径,我改成了相对路径后问

3、题解决。问题3. 在编写OrderDAOImpl的过程中出现了时间类型不匹配的情况解决方法:一直报类型转换错误的异常,我很奇怪异常中写道必须为Date类,可是确实用的Date类的对象。后来通过上网查找问题发现这是由于pStatement.setDate 需要一个java.sql.Date类的对象。而我传给它的参数是一个java.util.Date类的对象,于是我用这个的语句解决了这个问题:pStatement.setDate(3,new java.sql.Date(order.getOrderDate().getTime();问题4. 如何读取checkbox中是否勾选信息解决方法:一开始我认

4、为checkbox返回的是boolean类型的值,后来通过上网查资料发现,如果不勾选时checkbox所对应属性的值为null,于是我用了这样的语句判断是否勾选。Boolean ship = request.getParameter(shippingAddressRequired)=null;account.setListOption(request.getParameter(account.listOption).equals(true) ? true : false);问题5. 没有找到例子中的合适的检测是否登录的方法解决方法:由于给的例子用了框架等方法,没有找到可以用的检测是否在登录状态

5、的类,于是我自己写了一个方法。public Boolean getAccountByUsernameAndPasswordOnly(Account account) boolean selectResult = false;Connection connection = DBUtil.getConnection();try PreparedStatement pStatement = connection.prepareStatement(getAccountByUsernameAndPasswordOnlySql);pStatement.setString(1, account.getUse

6、rname();pStatement.setString(2, account.getPassword();ResultSet resultSet = pStatement.executeQuery();if (resultSet.next() selectResult = true;DBUtil.closeResultSet(resultSet);DBUtil.closePreparedStatement(pStatement);DBUtil.closeConnection(connection); catch (Exception e) e.printStackTrace();return

7、 selectResult;三、小组成员分工组长:张先凯小组三人均独立完成实验要求内容实验二 用AJAX改进用户体验一、 项目应用了AJAX技术的功能模块以及有无使用框架。运用了Ajax技术的功能模块:1. 账号管理模块。在新建账号和修改账号信息页面上用AJAX技术进行表单验证。包括密码与二次输入密码是否一致,用户名是否重复等等。2.商品查询模块。在首页右上角的查询商品中增加了自动补全功能,并可以用鼠标和键盘上线移动选中高亮部分,输入框的内容也会随着鼠标键盘的移动而移动。3. 主页商品展示模块。在首页展示商品的图片上添加了AJAX效果,即当鼠标移到某个商品图片上时,用悬浮窗动态加载该类型商品的

8、信息。三个模块中均未使用框架技术。二、 说明应用AJAX技术的理由、具体实现方法和核心源代码。理由:将整个页面刷新转化为局部刷新功能,改进响应效果,增强用户体验。具体实现方法:1. 点击按钮或者鼠标失焦等操作触发ajax操作。2. 在js接收传来的值,并利用Json对象与服务器异步交互。在没有接收到服务器的响应之前,Jsp页面做出响应的等待的响应的反应。3. 得到响应后刷新相应的div或者控件或者显示加载失败。核心源代码:模块一:账号管理模块NewAccount.jspJS代码:var xmlHttpRequest;function createXMLHttpRequest()if (wind

9、ow.XMLHttpRequest) /非IE浏览器xmlHttpRequest = new XMLHttpRequest();else if (window.ActiveObject)/IE6以上版本的IE浏览器xmlHttpRequest = new ActiveObject(Msxml2.XMLHTTP);else /IE6及以下版本IE浏览器xmlHttpRequest = new ActiveObject(Microsoft.XMLHTTP);function usernameIsExist() var username = document.registerForm.usernam

10、e.value;sendRequest(usernameIsExist?username= + username);function sendRequest(url) createXMLHttpRequest();xmlHttpRequest.open(GET, url, true);xmlHttpRequest.onreadystatechange = processResponse;xmlHttpRequest.send(null);function processResponse() if (xmlHttpRequest.readyState = 4) if (xmlHttpReques

11、t.status = 200) var responseInfo = xmlHttpRequest.responseXML.getElementsByTagName(msg)0.firstChild.data;var div1 = document.getElementById(usernameMsg);if (responseInfo = Exist) div1.innerHTML = Username is unavailable.; else div1.innerHTML = available username;/以下是我自己写的function passwordIsCorrect()

12、 var password = document.registerForm.password.value;var repeatedpassword = document.registerForm.repeatedPassword.value;createXMLHttpRequest();xmlHttpRequest.open(GET, SamePassword?password= + password + &repeatedpassword= + repeatedpassword, true);xmlHttpRequest.onreadystatechange = processRespons

13、e1;xmlHttpRequest.send(null);function processResponse1() if (xmlHttpRequest.readyState = 4) if (xmlHttpRequest.status = 200) var responseInfo = xmlHttpRequest.responseXML.getElementsByTagName(msg)0.firstChild.data;var div2 = document.getElementById(passwordMsg);if (responseInfo = Yes) div2.innerHTML

14、 = The two passwords are same.; else div2.innerHTML = The two passwords are not the same.;原JSP页面修改:User ID:$sessionScope.account.usernameNew password:Repeat password:Servlet:UsernameIsExistServlet.javapackage org.csu.myjpetstore.web;import java.io.IOException;import java.io.PrintWriter;import javax.

15、servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.csu.myjpetstore.domain.Account;import org.csu.myjpetstore.service.AccountService;public class UsernameIsExistServlet extends HttpServle

16、t public UsernameIsExistServlet() super();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request,response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String u

17、sername = request.getParameter(username);Account account = new Account();account.setUsername(username);AccountService service = new AccountService();response.setContentType(text/xml;charset=utf-8);PrintWriter out = response.getWriter();if(service.usernameIsExist(account)out.println(Exist);else out.p

18、rintln(NotExist);out.flush();out.close();public void init() throws ServletException public void destroy() super.destroy();SamePasswordServlet.javapackage org.csu.myjpetstore.web.Ajax;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http

19、.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SamePasswordServlet extends HttpServlet public SamePasswordServlet() super();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOExce

20、ption doPost(request,response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String password = request.getParameter(password);String repeatedpassword = request.getParameter(repeatedpassword);System.out.println(password+repeatedpasswo

21、rd);response.setContentType(text/xml;charset=utf-8);PrintWriter out = response.getWriter();if(repeatedpassword.equals(password)out.println(Yes);else out.println(No);out.flush();out.close();public void init() throws ServletException public void destroy() super.destroy(); 效果截图:模块二:商品查询模块核心代码:原JSP页面修改

22、IncludeTop.jsp:页面中的JS代码:声明全局变量和XRL这里是响应事件的function 其中包括获取页面Search模块中所有的标签并进行了筛选,其中通过key的值屏蔽了除了字母之外其余输入内容的合法性,而且对于方向键的向上和向下进行了处理,使得使用键盘时也可以获取提示框中的内容,对重复的代码也进行了封装,封装代码在下面。上面的函数是对键盘处理功能中重复代码的封装处理,下面则是在搜选出应修改内容后对标签样式的修改。这里是鼠标处理,使用了和键盘处理相同的全局变量使得使用中视觉效果的同步。实验效果图:只输入a:鼠标或者键盘移动下去:模块三:主页商品展示模块核心代码:原jsp页面修改

23、Main.jsp JS代码:* .b margin:0px; padding:0px; overflow:auto; .line0 line-height:20px; background-color:orange; padding:0px 15px; .line1 line-height:18px; background-color:orange; padding:0px 10px; .w display:none;position:absolute; right:10px; bottom:10px; width:160px; height:240px; overflow:hidden; b

24、order:2px groove #281; cursor:default; -moz-user-select:none; .t line-height:20px; height:20px; width:160px; overflow:hidden; background-color:orange; color:white; font-weight:bold; border-bottom:1px outset blue; text-align:center; .winBody height:218px; width:160px; overflow-x:hidden; overflow-y:au

25、to; border-top:1px inset blue; padding:10px; text-indent:10px; background-color:white; .seletcted background-color:gray;/以下为鼠标事件function birdshow()var str11 = ;str11 += AboutBirds;str11 += AV-CB-01:Amazon Parrot AV-SB-02: Finch;document.getElementById(div2).innerHTML = str11;document.getElementById(

26、div2).style.display = block;function birdshowoff() var str12 = ; document.getElementById(div2).innerHTML = str12;document.getElementById(div2).style.display = none;function fishshow()var str21 = ;str21 += AboutFish;str21 += FI-FW-01:Koi FI-FW-02:Goldfish FI-SW-01:Angelfish FI-SW-02:Tiger Shark;docum

27、ent.getElementById(div2).innerHTML = str21;document.getElementById(div2).style.display = block;function dogshow()var str31 = ;str31 += AboutDogs;str31 += K9-BD-01:Bulldog K9-CW-01:Chihuahua K9-DL-01:Dalmation K9-PO-02:Poodle K9-RT-01:Golden Retriever K9-RT-02:Labrador Retriever;document.getElementBy

28、Id(div2).innerHTML = str31;document.getElementById(div2).style.display = block;function reptileshow()var str41 = ;str41 += AboutReptiles;str41 += RP-LI-02:Iguana RP-SN-01:Rattlesnake;document.getElementById(div2).innerHTML = str41;document.getElementById(div2).style.display = block;function catshow(

29、)var str51 = ;str51 += AboutCats;str51 += FL-DLH-02:Persian FL-DSH-01:Manx;document.getElementById(div2).innerHTML = str51;document.getElementById(div2).style.display = block;效果图:上图为鼠标放在空白处时初始的界面。上图为鼠标放在鸟图案时右下角出现的关于鸟的一些信息。其余图案也有相同的效果。3、 小组成员分工及实验体会小组成员分工:这次试验中,第一个用户登录相关模块由于比较简单,三个人都做出一份结果。第二个搜索模块由张先

30、凯独立完成,第三个用户商品展示模块由胡涛和李静涛合作完成。心得体会:通过实验,我们了解到前端的内容比较琐碎,需要更加认真仔细,由于我们基本不开设前端课程内容,而它又是web开发中重要的一部分,需要我们在平时自学完成。实验三 用Struts 2重构JPetStore1、 实验结果(1) 在用struts 2重构JPetStore之后主要有以下一些变化1.如下图所示,原来的JSP页面中的标签已经被struts2自带的标签所代替,方便以后添加输入验证等功能。2. web.xml文件中改为struts的默认拦截器3. 原来web文件夹中的servlet已经被Action类代替。CatalogActio

31、n.java 4.struts.xml配置文件中内容 /WEB-INF/jsp/catalog/Main.jsp/WEB-INF/jsp/catalog/Category.jsp/WEB-INF/jsp/catalog/Product.jsp/WEB-INF/jsp/catalog/Item.jsp/WEB-INF/jsp/catalog/SearchProducts.jsp/WEB-INF/jsp/account/Signon.jsp/WEB-INF/jsp/catalog/Main.jsp/WEB-INF/jsp/catalog/Main.jsp/WEB-INF/jsp/account/S

32、ignon.jsp/help.html/WEB-INF/jsp/account/EditAccount.jsp/WEB-INF/jsp/catalog/Main.jsp/WEB-INF/jsp/account/NewAccount.jsp/WEB-INF/jsp/catalog/Main.jsp/WEB-INF/jsp/cart/Cart.jsp/WEB-INF/jsp/cart/Cart.jsp/WEB-INF/jsp/cart/Cart.jsp/WEB-INF/jsp/cart/Cart.jsp/WEB-INF/jsp/order/NewOrderForm.jsp/WEB-INF/jsp/

33、account/Signon.jsp/WEB-INF/jsp/order/ConfirmOrder.jsp/WEB-INF/jsp/order/ShippingForm.jsp/WEB-INF/jsp/order/ConfirmOrder.jsp/WEB-INF/jsp/order/OrderView.jsp/WEB-INF/jsp/order/ListOrders.jsp/WEB-INF/jsp/order/OrderView.jspimage/jpegimageStream2048 (二)使用struts 2的优缺点:优点:struts 2 将不可变的部分用框架的方式确定下来,不由程序员编

34、写。这样既约束了程序员遵循MVC架构规范,又提高了Web应用程序表示层的开发效率:同时还能使应用有较好的可维护性和可扩展性。缺点:struts 2将MVC的控制器一分为三,在获得更加清晰的同时,也增加了系统的复杂度,而且使用ActionForm时进行单元测试不方便。在实际使用过程中发现,struts 2 自带的验证框架需要极其仔细才能正确使用,一个单词的错误书写就导致整个模块无法正常显示,而且查错十分困难。(三)实现的三个功能1. 添加了国际化功能2. 增加了登陆时的验证码功能struts.xml文件中SecurityCodeImageAction.j类SecurityCode.java类Se

35、curityImage.java类这里通过调用这几个类在页面中生成一个验证码图片,并把图片所代表的内容放在session中给后面验证环节使用。CheckoutInterceptors.java类这里没有用struts2自带的验证框架,而是手写了一个验证类。效果图当输入验证码不正确时,还会有页面提示。二、实验中遇到的问题及解决方法问题1:在国际化功能中发现不同模块间语言不衔接解决方法:在session中传递一个参数,当从一个模块的页面跳转到另一个模块的页面时,自动将语言信息放在session中,使模块间语言能够衔接。问题2:在jsp页面用struts 2自带标签替换原有的标签时出现和样式表出现冲突解决方法:在struts 2 标签中加上属性theme=”simple”可以解决。问题3:在提交订单前加入拦截器后跳转到登陆界面会出现国际化语言错误的情况解决方法:在页面中加入hidden标签,先提取出页面语言信息,然后在Action对应方法中加入到session里面。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!