logo资料库

《软件设计与体系结构》实验指导书.doc

第1页 / 共60页
第2页 / 共60页
第3页 / 共60页
第4页 / 共60页
第5页 / 共60页
第6页 / 共60页
第7页 / 共60页
第8页 / 共60页
资料共60页,剩余部分请下载后查看
实验一 Servlet
实验二 JSP
实验三 Struts2(一)
实验四 Struts2(二)
实验五 Ajax
实验六 Hibernate
实验七 企业级软件分层模型
实验八 SSH整合
软件设计与体系结构 实验指导书 Ver. 0.9 1.0 1.2 1.2.1 1.2.2 Fix Log Release 2013-08-11 2014-10-06 2017-05-08 2017-11-04 修复:机器不能上网时,实验六XML 文件解析错误 2017-11-28 增加:实验八的实验步骤 胡平 @ 计算机与信息学院
目 录 实验一 Servlet.........................................................................................................................1 实验二 JSP.................................................................................................................................5 实验三 Struts2(一).......................................................................................................10 实验四 Struts2(二).......................................................................................................17 实验五 Ajax............................................................................................................................25 实验六 Hibernate................................................................................................................39 实验七 企业级软件分层模型.........................................................................................49 实验八 SSH 整合..................................................................................................................57 说明 ① 请于每次实验前阅读本讲义,上机时应尽量脱离讲义独立完成 ② 每个实验的【实验步骤】部分仅作参考....,最好按照自己的理解实现 ③ 上机时间有限,编程时只关注架构和功能 .........。 ........相应的实验内容。 ........即可,不要过于关注 UI 和用户体验。 ④ 因每次实验涉及代码较多,实验报告只写重要的代码及注释,但应标明代码所属结 ........ 构及文件名 .....。 ⑤ IDE 使用 MyEclipse 2014,新建 Web 工程时,对话框内的 Java....EE..和 Java....版本分别 选择 5.和 1.6...。
实验一 Servlet 实验一 Servlet 【实验学时】2 【实验目的】 1、 理解 Servlet 的工作流程。 2、 掌握 Servlet 的相关接口及 API。 3、 掌握 Servlet 的配置。 【实验内容】 1、 编写 Servlet 实现登录验证功能,包括: 1) 登录页 login.html 中含用户名、密码、验证码 3 个表单项。 2) ValidateCodeServlet 用于产生随机验证码图片,并显示于 login.html 中。 3) LoginServlet 检查登录页提交的各表单项是否合法(合法用户名/密码用硬编码模拟)。 4) 若合法,在页面中呈现“<用户名>使用于<2014-09-25 10:23:07>登录”的信息。 5) 若非法,在页面中呈现相应提示信息。 【参考运行结果】 (1)点击验证码图片 (2)验证码输入错误 (4)使用浏览器的极速模式(Chrome 核心) (3)用户名/密码错误 (5)使用浏览器的 IE 模式 【参考实验步骤】 1、 在 MyEclipse 中创建名为“servlet”的 Web Project。 2、 在包“ahpu.ssh.servlet”下建立用于产生验证码的类“ValidateCodeServlet”。 package ahpu.ssh.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; ~ 1 ~
实验一 Servlet import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ValidateCodeServlet extends HttpServlet { // 构造Random对象(用于产生验证码文字和颜色) private Random random = new Random(); protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置浏览器不缓存页面 resp.setHeader("Pragma", "No-cache"); resp.setHeader("Cache-Control", "no-cache"); resp.setDateHeader("Expires", 0); // 生成4位随机验证码 String code = ""; for (int i = 0; i < 4; i++) { code += String.valueOf(random.nextInt(10)); // 将验证码存入session req.getSession().setAttribute("VALIDATE_CODE", code); int w = 100; // 图片宽度和高度 int h = 40; // 在内存中创建图片对象 BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); // 获取并设置图形上下文 Graphics g = image.getGraphics(); g.setColor(getRandomColor(50, 250));// 设置背景颜色 g.fillRect(0, 0, w, h); // 绘制矩形区域 // 绘制100条随机干扰线 for (int i = 0; i < 100; i++) { g.setColor(getRandomColor(200, 250)); int x1 = random.nextInt(w); int y1 = random.nextInt(h); int x2 = random.nextInt(16); // 干扰线宽高 int y2 = random.nextInt(16); g.drawLine(x1, y1, x1 + x2, y1 + y2); } } } g.setFont(new Font("serif", Font.CENTER_BASELINE, 32));// 设置字体 for (int i = 0; i < 4; i++) { String s = code.substring(i, i + 1); // 得到当前字符 g.setColor(getRandomColor(200, 250));// 设置当前字符颜色 g.drawString(s, 24 * i + 6, 30); // 绘制当前字符 g.dispose(); // 销毁图形上下文 // 将图片写到页面 try { } catch (Exception e) { } ImageIO.write(image, "JPEG", resp.getOutputStream()); } private Color getRandomColor(int begin, int end) {// 得到范围内的随机颜色 int range = end - begin; int r = begin + random.nextInt(range); int g = begin + random.nextInt(range); int b = begin + random.nextInt(range); return new Color(r, g, b); } } ~ 2 ~
实验一 Servlet 3、 在包“ahpu.ssh.servlet”下建立 Servlet 类“LoginServlet”。 package ahpu.ssh.servlet; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setHeader("Content-type", "text/html; charset=UTF-8"); // 设置浏览器字符集编码 resp.setCharacterEncoding("UTF-8"); // 设置输出字符集编码 PrintWriter out = resp.getWriter();// 得到输出流 // 获得各查询参数 String name = req.getParameter("name"); String password = req.getParameter("password"); String codeInRequest = req.getParameter("validateCode"); // 获得 session 中的验证码 Object codeInSession = req.getSession().getAttribute("VALIDATE_CODE"); // 比对验证码 if (codeInSession == null || !codeInSession.toString().equals(codeInRequest)) { out.print("

验证码错误!

"); } // 检查用户(此处为硬编码模拟) else if (!"admin".equalsIgnoreCase(name) || !"123".equals(password)) { out.print("

非法用户!

"); } else { // 合法用户 // 获得请求头中的user-agent信息 String userAgentHeader = req.getHeader("user-agent").toUpperCase(); String browser = "其他"; if (userAgentHeader.contains("MSIE")) { // 判断浏览器核心 } else if (userAgentHeader.contains("CHROME")) { } else if (userAgentHeader.contains("FIREFOX")) { } else if (userAgentHeader.contains("SAFARI")) { browser = "IE"; browser = "Chrome"; browser = "Firefox"; browser = "Safari"; } String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new Date()); // 当前时间 out.print("

<" + name + ">使用<" + browser + ">浏览器于<" + now + ">登录!

"); } } } 4、 修改“工程根目录/WebRoot/WEB-INF”下的 web.xml。 ValidateCodeServlet ahpu.ssh.servlet.ValidateCodeServlet ~ 3 ~
实验一 Servlet ValidateCodeServlet /ValidateCodeServlet LoginServlet ahpu.ssh.servlet.LoginServlet LoginServlet /LoginServlet 5、 在“工程根目录/WebRoot”下新建“login.html”。 login.html
用户名:

密 码:

验证码:

6、 访问 http://localhost:8080/servlet/login.html,测试各项功能。 ~ 4 ~
实验二 JSP 实验二 JSP 【实验学时】2 【实验目的】 1、 理解 JSP 的工作原理和基本语法。 2、 掌握 JSP 隐含对象的作用及常用 API。 3、 掌握中文表单和请求参数的处理方法。 【实验内容】 1、 编写 JSP 实现投票功能,包括: 1) 新建投票主题页 topicAdd.jsp 中含投票主题和四个投票选项等表单项,允许用户新增投票主 题。 2) 设计合适的数据结构存放投票主题、该主题下的若干选项、每个选项对应的票数。所有投 票主题存放在 application 隐含对象中。 3) 投票主题页 topic.jsp 用于呈现所有主题,供用户选择。 4) 点击某主题后,进入投票页 vote.jsp,该页面呈现该主题下的所有选项(单选)。 5) 选择投票选项并提交,在结果页 result.jsp 中以柱状图呈现该主题下各选项对应的票数。 【参考运行结果】 (1)初始页面 (2)编辑投票主题 (3)提交投票主题 (4)投票主题选择页面 ~ 5 ~
实验二 JSP (5)选择投票选项 (6)查看投票结果 【参考实验步骤】 1、 在 MyEclipse 中创建名为“jsp”的 Web Project。 2、 在“工程根目录/WebRoot”下新建“topicAdd.jsp”。 <%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%> 新建投票主题 <%! // 判断字符串是否为空 boolean isEmpty(String s){ if(s!=null){ s=s.trim(); } return s==null || s.length()==0; } %>
主题:
选项1:

选项2:

选项3:

选项4:

<% // 处理中文(适合post方式提交) request.setCharacterEncoding("UTF-8"); String topic = request.getParameter("topic"); String option1 = request.getParameter("option1"); String option2 = request.getParameter("option2"); String option3 = request.getParameter("option3"); String option4 = request.getParameter("option4"); ~ 6 ~
分享到:
收藏