大理大学数学与计算机学院综合性实验报告学年学期:2016-2017第三学期课程名称:J2EE开发技术专业:计算机科学与技术班级:2014级学号:LX14115150姓名:申畅恒成绩评定:一、项目名称基于MVC模式的酒店预订系统二、功能性需求1、用户在浏览器里输入网址,系统响应后显示酒店房间列表信息,其中房间列表中显示房间的编号、名称、价格属性,用户可以选择预定房间,可以选择多个房间,在房间后面的选择框内打钩选择确认即可。2、用户确认房间后,点击酒店房间列表中的“提交订单”后,系统会响应下一个界面,如果用户未登录则进入用户登录页面,用户在用户登录页面填写用户名和密码后登录进入订单填写界面;若用户已进行了登录则直接进入订单填写页面;3、用户进入订单填写页面后,用户在订单填写页面中输入房间数量、联系人姓名、联系电话、到店时间、离店时间、房间编号等信息,作校验后将订单提交服务器进行处理;4、用户将订单提交,系统将订单信息写入数据库,如果订单信息写入数据库成功则跳转到订单预订成功页面,提示用户预订信息,否则进行预订失败页面。三、系统总体设计1)流程图(UML顺序图)MVC模式是指模型-视图-控制器模型层为JavaBeen实现数据的表示和业务逻辑User.java——用户实体类,包括姓名、性别、电话、密码等属性Room.java——房间实体类,包括编号、名称、面积、楼层、价格等属性JdbcBean.java——数据库操纵通用类RoomDao.java——操纵Room类的读取操纵视图层为JSP页面,负责显示功能roomlist.jsp——房间列表页面order.jsp——订单填写页面login.jsp——登录页面signup.jsp——注册页面success.jsp——预订成功提示页面控制器为Servlet,负责接收用户的请求LoginProcess.java——处理用户登录LogoutProcess.java——处理注销事物OrderServlet.java——订单信息控制器2)页面的设计使用div布局进行控制页面。使用css样式对页面控制布局的位置、颜色、背景颜色(或者图片)等。整个页面分成三个部分:头部、尾部、和中间的主体内容。三个部分都放在一个div里面。头部放入一个商标和图片,头部的最下面放入导览行。主体内容主要有:一个大标题、介绍和整体内容。尾部有版权说明和一些社交网络标志。3)类设计4)数据库设计使用Oracle11GR2数据库。用户表User1:User_id:用户编号,主键,数字型number(11)User_name:用户名,唯一,varchar2(10)Password:用户密码,32位的字符(用MD5加密过的字符)房间表Roomlist:Roomnumber:房间号,主键roomtype:房间类型price:价格amount:房间剩余量四、系统实现系统界面截图及关键代码,并作详细描述。1.系统界面房间列表在页面上引入dao.RoomDao和bean.Room。实例化一个RoomDao对象然后调用getRoomList()方法。获取到list之后使用jstl标准标签库和EL表达式语言进行遍历list并显示(表格形式)。jsp:useBeanid=beanclass=dao.RoomDaoscope=page/jsp:useBeandivclass=containersectionformaction=login.ordermethod=postonSubmit=returncheck()%ListRoomlist=bean.getRoomList();pageContext.setAttribute(list,list);%tablewidth='600'border='1'trth房间号/thth房间类型/thth价格/thth房间剩余量/thth预定/th/trc:forEachvar=roomitems=${list}trtd${room.roomNumber}/tdtd${room.roomName}/tdtd${room.price}/tdtd${room.roomAmount}/tdtdinputname='isSelected'type='checkbox'value='${room.roomNumber}'/td/tr/c:forEachtrtdcolspan='5'align='center'inputclass='largebluebutton'id='submit-button'type='submit'value='提交'/td/tr/table/form/div登录利用表单控件的required属性进行控制控件是否填写,若未填写则提示。formmethod=postaction=LoginProccesinputtype=textrequired=requiredplaceholder=用户名name=name/inputinputtype=passwordrequired=requiredplaceholder=密码name=password/inputbuttonclass=buttype=submit登录/buttonahref=signup.html注册..../a/form订单信息使用jstl标准标签库和EL表达式语言进行遍历已经选定的房间列表(房间列表从session获取)。利用HTML5控件的date,number,text作为日期、电话和姓名的输入框。divclass=containersectionh4你已经选择的房间类型:/h4tabletrth房间类型/thth房间价格/th/trc:forEachvar=roomitems=${sessionScope.selectedRoom}trtd${room.roomName}/tdtd${room.price}/td/tr/c:forEach/tablehrformaction=success.ordermethod=postonSubmit=returncheck(this)预计到店日期:inputtype=datename=date姓名:inputtype=textname=name电话号码:inputtype=numbername=telinputclass='smallbluebutton'id='submit-button'type='submit'value='提交'/form/div订单成功使用jstl标准标签库和EL表达式语言进行遍历已经选定的房间列表(房间列表从session获取)及订单信息。divclass=containersectionh4你已经选择的房间类型:/h4tabletrth房间类型/thth房间价格/th/trc:forEachvar=roomitems=${sessionScope.selectedRoom}trtd${room.roomName}/tdtd${room.price}/td/tr/c:forEach/tablehr到店日期:${param.date}br用户名:${sessionScope.username}br姓名:${param.name}br电话:${param.tel}hr/div2.控制器订单处理OrderServlet.java-----------------------------------------------OrderServlet.java处理两个请求:1,房间列表页面请求login.order首先获取session然后查看用户是否已经登录,如果已经登录则跳转到订单页面(order.jsp)否则跳转到登录页面。2,订单页面请求success.order跳转到订单成功页面。------------------------------------------------publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringurl=request.getServletPath();if(url.equals(/login.order)){//处理跳转到登录页面之前的事物HttpSessionsession=request.getSession();String[]roomNumberList=request.getParameterValues(isSelected);ListRoomlist=newArrayListRoom();Roomroom=null;RoomDaodao=newRoomDao();for(StringroomNumber:roomNumberList){room=dao.getRoomById(Integer.parseInt(roomNumber));list.add(room);}session.setAttribute(selectedRoom,list);if(session.getAttribute(username)==null){response.sendRedirect(login.html);}else{RequestDispatcherrd=request.getRequestDispatcher(order.jsp);rd.forward(request,response);}}else{//处理订单事物//System.out.print(request.getParameter(date));request.setCharacterEncoding(UTF-8);response.setCharacterEncoding(UTF-8);request.getRequestDispatcher(success.jsp).forward(request,response);}}登录处理LoginProcess.java------------------------------------------------获取表单提交的用户名和密码,然后对密码进行MD5加密然后提交给user对象进行数据库验证。如果验证正确则保存session然后判断用户是否已经选定房间,如果已经选定则跳转到订单页面,否则跳转到房间列表页面。如果验证错误则跳转回去到登录页面。-------------------------------------------------publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringname=request.getParameter(name);Stringpass=request.getParameter(password);try{Stringpassword=Encode.Md5(pass);Useruser=newUser();user.setName(name);user.setPassword(password);Booleanb=user.isUser();if(!b){response.sendRedirect(login.html);}else{HttpSessionsession=reque