理工学院《信息技术工程师实训》实训报告.doc
编 号: B04900056学 号: 实训报告教 学 院计算机课程名称信息技术工程师实训专 业计算机科学与技术班 级姓 名指导教师2014年6月22日目录一实训内容21、数据库实现22、功能的实现33、三大配置文件的主要内容31)Struts.xml文件的配置32)web.xml文件的配置53)applicationContext.xml文件的配置64、用户登陆功能的实现81)登陆页面92)用户登陆的后台代码105、用户查询商品功能的实现101)商品查询页面102)商品查询的后台代码116、商品添加功能的实现121)商品添加页面122)商品添加的后台代码14二.程序调试与测试161、用户登陆162、商品查询163、商品添加17三.结果分析181、用户登陆功能182、商品查询功能183、商品添加功能18四.实训总结19一实训内容 1、数据库实现 1)用户表的创建 2)订单表之详细表的创建 3)产品表的创建 4)用户-订单表的创建 5)订单项表的创建 6)邮递表的创建 2、功能的实现 本网站主要实现的功能如下: 1)登陆功能:未登录的用户可以浏览部分商品,但不能购物,只有登陆的用户可以实现购物和结算等功能。 2)注册功能:当浏览者想要通过该网站进行购物而又没有注册,则可通过该功能实现注册。 3)用户管理功能:该功能普通用户无法使用,只有管理者可以使用,通过该功能添加用户和删除用户以及修改用户的信息等。 4)商品添加功能:管理员可以通过该功能向系统添加商品。 5)商品查询功能:用户可以通过该功能查询自己所需要的商品。6)订单管理功能:管理员通过该功能管理用户提交的订单,并产生货物配送的信息。3、三大配置文件的主要内容1)Struts.xml文件的配置<struts> <package name="struts2" extends="json-default"><action name="usrLoginAction" class="cn.hbpu.Action.UsrLoginAction"><result name="success">/products.jsp</result><result name="error">/products.jsp</result><result name="input">/products.jsp</result></action><action name="clearSession" class="cn.hbpu.Action.ClearSessionAction"><result>/index.jsp</result></action><action name="*ProductManagerAction" class="cn.hbpu.Action.ProductManagerAction" method="1"><interceptor-ref name="fileUpload"><!- 设置上传文件类型 -><param name="allowedTypes">image/bmp,image/png,image/jpg,image/pjpeg,image/gif,application/vnd.ms-excel </param><!- 设置上传文件大小 -><param name="maximumSize">200000</param></interceptor-ref><!- 必须显示配置引用struts默认的拦截器栈:defaultStack -><interceptor-ref name="defaultStack"></interceptor-ref><!- 设置上传路径 -><param name="savePath">/upload</param><result name="searchproductshow">/products_search_show.jsp</result><result name="guestproductsshow">/products_show.jsp</result><result name="adminproductsshow">/admin_products_show.jsp</result><result name="saveOnesuccess">/admin_products_show.jsp</result><result name="input">/upload_error.jsp</result><result name="index">/index.jsp</result><result name="productdetail">/productdetail.jsp</result></action><action name="registCheckAction" class="cn.hbpu.Action.RegistCheckAction"><result type="json"></result></action><action name="registAction" class="cn.hbpu.Action.RegistAction" ><result>/regist_succ.jsp</result><result name="error">/register.jsp</result></action><action name="*CartManagerAction" class="cn.hbpu.Action.CartManagerAction" method="1"><result name="ok" type="json"></result><result name="cartshow">/cartshow.jsp</result></action><action name="*OrdersManagerAction" class="cn.hbpu.Action.OrdersManagerAction" method='1'><result name="checkoutsucc">/checkoutsucc.jsp</result><result name="ordershow">/ordershow.jsp</result></action><action name="*OrderitemManagerAction" class="cn.hbpu.Action.OrderitemManagerAction" method='1'><result name="orderitemshow">/orderitem_show.jsp</result></action></package><constant name="struts.i18n.encoding" value="utf-8"></constant><constant name="struts.devMode" value="true"></constant><constant name="struts.multipart.parser" value="jakarta"></constant><constant name="struts.custom.i18n.resources" value="properties/messageResource"/></struts>通过定义不同的action,可以使JSP页面调用后台程序,是前台程序与后台程序的连接枢纽。2)web.xml文件的配置<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><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>*.action</url-pattern></filter-mapping><filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping><servlet><servlet-name>CheckCodeServlet</servlet-name><servlet-class>cn.hbpu.util.CheckCodeServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>CheckCodeServlet</servlet-name><url-pattern>/authImg</url-pattern> </servlet-mapping></web-app> 该配置文件用来配置控制器,使得JSP页面的action请求都能够通过struts的配置文件找到相应的后台实现程序。其角色是为action提供激活信号。3)applicationContext.xml文件的配置<bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql:/localhost:3306/acesys"></property><property name="username" value="root"></property><property name="password" value="123456"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop></props></property><property name="mappingResources"><list><value>cn/hbpu/po/Usr.hbm.xml</value><value>cn/hbpu/po/Product.hbm.xml</value><value>cn/hbpu/po/Orders.hbm.xml</value><value>cn/hbpu/po/Orderitem.hbm.xml</value></list></property></bean><bean id="usrDao" class="cn.hbpu.DAO.impl.UsrDAOHib"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="usrService" class="cn.hbpu.service.impl.UsrServiceImpl"><property name="usrDao" ref="usrDao"></property></bean><bean class="cn.hbpu.Action.UsrLoginAction"><property name="usrService" ref="usrService"></property></bean><bean id="productDao" class="cn.hbpu.DAO.impl.ProductImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="productService" class="cn.hbpu.service.impl.ProductServiceImpl"><property name="productDAO" ref="productDao"></property></bean><bean id="ordersDao" class="cn.hbpu.DAO.impl.OrdersDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="ordersService" class="cn.hbpu.service.impl.OrdersServiceImpl"><property name="ordersDao" ref="ordersDao"></property></bean><bean id="orderitemService" class="cn.hbpu.service.impl.OrderitemServiceImpl"><property name="orderitemDAO" ref="orderitemDAO"></property></bean><bean id="orderitemDAO" class="cn.hbpu.DAO.impl.OrderitemDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"><property name="transactionManager" ref="transactionManager"></property><property name="transactionAttributes"><props><prop key="find*,get*">PROPAGATION_REQUIRED,readOnly</prop><prop key="save*,update*,delete*">PROPAGATION_REQUIRED</prop></props></property></bean><bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><list><value>usrDao</value><value>productDao</value><value>ordersDao</value><value>orderitemDAO</value></list></property><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean></beans> 该配置文件是配置数据库连接信息以及各个表的持久化配置,是后台操作数据库与数据库之间的连接桥梁,方便系统开发人员操作数据库。4、用户登陆功能的实现 1)登陆页面index.jsp<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>AscentWeb电子商务</title><link href="<%=request.getContextPath()%>/css/index.css" rel="stylesheet" type="text/css" /> <script src="javascript/jquery.js" type="text/javascript"></script><script language="javascript">function denglu()if(form.username.value = "") alert("用户名不能为空"); form.username.focus(); return false; if(form.password.value = "") alert("密码不能为空"); form.password.focus(); return false; form.action="<%=request.getContextPath()%>/usrLoginAction.action"form.submit();</script></head><body><div id="login_2"> <div id="Layer1" style="position:absolute; width:300px; height:37px; z-index:1; left: 550px; top:20px;"> <table width="300" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="132" valign="middle"> <img src="<%=request.getContextPath()%>/images/username.jpg" width="61" height="17" align="bottom" /> <input name="username" type="text" size="6"/> </td> <td width="131"><img src="<%=request.getContextPath()%>/images/password.jpg" width="61" height="17" /> <input name="password" type="password" size="6" /> </td> <td width="37"><input type="image" src="<%=request.getContextPath()%>/images/login_1_7.jpg" onclick="return denglu()" width="44" height="17" border="0" alt="登录"/></td> </tr> </table> </div> </div></body>该页面通过javascript代码实现客户端检验用户信息的填写时候符合要求,当用户信息的填写符合要求时,则调用usrLoginAction.action,实现后台对数据库的操作。2)用户登陆的后台代码login.javapackage cn.hbpu.Action;SuppressWarnings("unchecked")public String execute() throws ExceptionUsr u=usrService.checkUsr(username, password);if(u=null)return ERROR;elseActionContext.getContext().getSession().put("usr", u);return SUCCESS; 该类利用usrService中的checkUsr()方法实现数据库的查询功能,并将查询结果存放到session里面。5、用户查询商品功能的实现 1)商品查询页面Product_Search.jsp:<head><script language="javascript">function check()if(form.searchValue.value = "") alert("请输入查询条件!"); form.searchValue.focus(); return false; return true;</script></head><body><form name="form" method="post" action="searchProductManagerAction.action"><table><tr><td class="table_hui"> <div align="right">请选择:</div></td><td class="table_hui"> <select name="searchName"> <option value="category" selected="selected">类别</option> <option value="productname">名称</option> <option value="cas">CAS</option> <option value="formula">Formula</option> </select></td> <td><input type=text name="searchValue"/></td></tr><tr><td height="30" class="table_hui"> </td><td height="30" class="table_hui"><input type="submit" name="Submit" value="查询" onclick="return check();"/></td><td height="30" class="table_hui"><input type="reset" name="Reset" value="取消" /></td></tr></table></form></body>2)商品查询的后台代码ProductManagerAction.java/根据选择字段查询商品SuppressWarnings("unchecked")public String search()throws ExceptionList search_product_list = productService.findBySearchProperty(this.getSearchName(), this.getSearchValue();ActionContext.getContext().getSession().put("search_product_list",search_product_list);return "searchproductshow"6、商品添加功能的实现 1)商品添加页面add_products_admin.jsp:<form name="form" method="post" action="saveOneProductManagerAction.action" encType=multipart/form-data><table width="580"> <tr> <td width="157" height="20" bgcolor="#B4E4FE" class="table_c">商品信息 <a href="javascript:history.back()"><<< 返回</a></td> <td width="411"></td> </tr> </table><table width="500" border="0" cellspacing="0" bordercolor="#9EA7AB" bgcolor="#DFEFFD"> <tr> <td height="10" colspan="4"><s:property value="tip"/></td> </tr> <tr> <td width="122" height="30" class="table_c"><div align="right">编号:</div></td> <td width="122"><input id="productId" name="productId" type="text" onblur="checkId()"/> <div id="productIdCheckDiv" class="warning"></div> </td> <td width="85" class="table_c"><div align="right">产品名称:</div></td> <td width="163" height="30"><input name="productname" type="text" /></td> </tr> <tr> <td width="122" height="30" class="table_c"><div align="right">CatalogNo:</div></td> <td width="122"><input name="catalogno" type="text" /></td> <td width="85" class="table_c"><div align="right">CAS:</div></td> <td width="163" height="35"><input name="cas" type="text" /></td> </tr> <tr> <td width="122" height="30" class="table_c"><div align="right">MDL Number:</div></td> <td width="122"> <input name="mdlnumber" type="text" /></td> <td width="85" class="table_c"><div align="right">新产品:</div></td> <!- <td width="163" height="35"><input name="newproduct" type="text" /></td> -> <td height="30" class="table_c"> 是: <input type="radio" name="newproduct" value="1" /> 否: <input type="radio" name="newproduct" value="0" checked/> </td> </tr> <tr> <td width="122" height="22" class="table_c"><div align="right">Formula:</div></td> <td width="122"> <input name="formula" type="text" /></td> <td width="85" class="table_c"><div align="right">MW:</div></td> <td width="163" height="35"><input name="mw" type="text" /></td> </tr> <tr> <td width="122" height="22" class="table_c"><div align="right">Category:</div></td> <td width="122"><input name="category" type="text" /></td> <td width="85" class="table_c"><div align="right">备注:</div></td> <td width="163" height="30"><input name="note" type="text" /></td> </tr> <tr> <td width="122" height="22" class="table_c"><div align="right">价格1:</div></td> <td width="122"> <input name="price1" type="text" /></td> <td width="85" class="table_c"><div align="right">Stock:</div></td> <td width="163" height="35"><input name="stock" type="text" /></td> </tr> <tr> <td width="122" height="30" class="table_c"><div align="right">价格2:</div></td> <td width="122"><input name="price2" type="text" /></td> <td width="85" class="table_c"><div align="right">Real Stock:</div></td> <td width="163" height="30"><input name="realstock" type="text" /></td> </tr> <tr> <!- td width="122" height="22" class="table_c"><div align="right">Quantity:</div></td> <td width="122"> <input name="quantity" type="text" /></td-> <td width="85" class="table_c"><div align="right">图片:</div></td> <td width="163" height="35"> <input type="fil