高级Java程序设计实验指导书.doc
《高级Java程序设计实验指导书.doc》由会员分享,可在线阅读,更多相关《高级Java程序设计实验指导书.doc(111页珍藏版)》请在咨信网上搜索。
高级Java程序设计实验指导书优质资料 (可以直接使用,可编辑 优质资料,欢迎下载) 《高级Java程序设计》 实验指导书 四川农业大学商学院 目 录 实验一简单的Servlet与JSP1 实验二 请求对象3 实验三 响应对象7 实验四 Servlet容器模型9 实验五会话管理13 实验六 JSP基本语法与页面指令16 实验七 JSP隐含对象与作用域20 实验八 Web组件重用与JavaBeans24 实验九 JDBC访问数据库27 实验十表达式语言的使用35 实验十一用户自定义标签41 实验十二 JSTL与标签文件44 实验十三 Servlet事件处理50 实验十四 Servlet过滤器的使用55 实验十五 Web应用的安全性59 说明: 本实验指导书根据《高级Java程序设计》课程教学大纲编写,共包括15个实验,每个实验2学时,学生每周完成一个实验。 实验环境: 计算机系统应该安装JDK 1.5以上版本,开发工具使用JCreator 4.5 Pro版,服务器使用Tomcat 版,数据库使用PostgreSQL 8.3.0版。 该实验指导书的配套教材是《Java Web编程技术》沈泽刚 主编,清华大学出版社,2021.3。 实验一 简单的Servlet与JSP 一、实验目的 1. 了解和掌握Servlet和JSP页面的编写和运行。 2. 比较Servlet与JSP的区别和联系,体会动态页面的含义。 二、实验原理 Servlet是运行在服务器端的Java程序,它主要是为了扩展服务器的功能。编写和运行Servlet一般要经过4个步骤:(1)编辑源文件,它是继承 Servlet的Java类;(2)编译源文件;(3)在服务器中部署该Servlet,即将类文件存放到服务器的适当目录中,并修改web.xml部署描述文件;(4)使用浏览器访问该Servlet程序。 JSP是一种服务器端的动态页面技术,它的实质也是Servlet。它的编写较Servlet容易。二者的主要区别是:Servlet通常是实现业务逻辑,而JSP通常实现表示逻辑。 三、实验内容与步骤 (一)编写和运行一个简单的Servlet 【步骤1】在Tomcat安装目录的webapps下建立一个helloapp的目录,在其中再建立一个WEB-INF目录,在WEB-INF目录中建立一个classes目录。这样就建立了一个名为helloapp的Web应用程序。 【步骤2】编写下面Servlet类,编译并将类文件放入classes目录中 package com.demo; import java.io.*; import javax.servlet.*; import javax.servlet. .*; public class HelloServlet extends Servlet{ public void service( ServletRequest request, ServletResponse response) throws ServletException,IOException{ PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("</head>"); out.println("<body>"); out.println("<h3>Hello World!</h3>"); out.println("</body>"); out.println("</html>"); } } 【步骤3】在WEB-INF目录中建立一个名为web.xml的文件,该文件为Web应用程序的部署描述文件,简称DD。具体内容如下: <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns=" ://java.sun /xml/ns/j2ee" xmlns:xsi=" :// w3.org/2001/XMLSchema-instance" 5.xsd" version="2.5"> <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.demo.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> 【步骤4】在浏览器的地址栏中输入下列地址访问该Servlet。 :8080/helloapp/hello 在浏览器的窗口中应该显示Hello, World!内容。 (二)下面的Servlet可显示系统当前时间。请编译并部署该Servlet,然后使用浏览器访问。 package com.demo; import java.io.*; import javax.servlet.*; import javax.servlet. .*; public class HelloWorldServlet extends Servlet{ public void service() throws ServletException,IOException{ PrintWriter out =; out.println("<html>"); out.println("<head>"); out.println("</head>"); out.println("<body>"); out.println(" <font color= '#0000ff'>"); out.println("<h3>Hello,World!</h3>"); out.println("The time now is:"+new java.util.Date()); out.println("</body>"); out.println("</html>"); } } (三)编写下面的JSP文件,将其用hello.jsp名保存到helloapp目录中 <html><head> <title>A Simple JSP Page</title> </head> <body> <font color="#0000ff"> <h3>Hello,World!</h3> The time now is:<%=new java.util.Date()%> </font> </body></html> 使用下面的URL访问该页面: :8080/helloapp/hello.jsp (四)运行下面的JSP页面square.jsp <html><body> <table border=’1’ cellspacing=’0’ cellpadding=’5’> <tr><th>number</th><th>squared</th></tr> <% for ( int i=0; i<10; i++ ) { %> <tr><td><%= i %></td><td><%= (i * i) %></td></tr> <% } %> </table> </body></html> (五)改写上述页面,使其运行后产生下列页面。 图1.1 square.jsp运行结果 四、思考题 1. 如何安装配置JDK和Tomcat? 2. 如何在Tomcat中运行Servlet和JSP页面? 实验二 请求对象 一、实验目的 1. 掌握如何获得请求参数; 2. 掌握如何检索请求头; 3. 了解如何通过请求对象获得客户信息; 4. 重点掌握使用请求对象存储数据和请求转发。 二、实验原理 对客户的请求,容器根据请求调用Servlet的相应doXxx()方法,该方法带有两个参数,一个是 ServletRequest,一个是 ServletResponse,它们分别表示请求对象和响应对象,它们是容器自动创建的两个对象。可以使用这两个接口定义的若干方法完成有关操作。 三、实验内容与步骤 (一)通过查询串传递请求参数,并在Servlet中检索请求参数 【步骤1】编写下面的Servlet。 package com.demo; import java.io.*; import javax.servlet.*; import javax.servlet. .*; public class HelloUserServlet extends Servlet{ public void service( ServletRequest request, ServletResponse response) throws ServletException,IOException{ String userName = request.getParameter("userName"); PrintWriter pw = response.getWriter(); pw.println("<html>"); pw.println("<head>"); pw.println("</head>"); pw.println("<body>"); pw.println("<h3>Hello, " + userName + "</h3>"); pw.println("</body>"); pw.println("</html>"); } } 【步骤2】编译该Servlet,然后修改web.xml文件,将下面代码添加到其中: <servlet> <servlet-name>helloUserServlet</servlet-name> <servlet-class>com.demo.HelloUserServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>helloUser</servlet-name> <url-pattern>/hellouser</url-pattern> </servlet-mapping> 【步骤3】使用下面的URL访问之。 :8080/helloapp/hellouser?userName=John 将userName的值改为你自己的名字,看输出结果。若不给出查询字符串,结果如何?参数值使用汉字如何? (二)通过表单传递请求参数,使用 ServletRequest对象获得请求参数 【步骤1】首先编写一个input.html文件,存放在helloapp目录中。该页面在屏幕上显示一个表单,其中包括姓名和年龄域,点击“确定”按钮后,将表单参数传递给ParamServlet并显示出来。 input.html代码如下: <html> <head><title>参数传递</title> <meta -equiv="Content-Type" content="text/html;charset=gb2312"> </head> <body> <center> <h3>从表单向Servlet传递参数</h3> <form method="GET" action="paramtest" > 姓名:<input type="text" name="name"><br> 年龄:<input type="text" name="age"><br> <input type="submit" value="确定" > <input type="reset" value="重置" > </form> <center> </body> </html> 【步骤2】编写ParamServlet.java,其代码如下: package com.demo; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet. .*; public class ParamServlet extends Servlet { public void doGet( ServletRequest request, ServletResponse response) throws ServletException, IOException{ response.setCharacterEncoding("gb2312"); response.setContentType("text/html;charset=gb2312"); String name = request.getParameter("name"); name = new String(name.getBytes("iso8859-1"),"gb2312"); String age = request.getParameter("age"); age = new String(age.getBytes("iso8859-1"),"gb2312"); PrintWriter pw = response.getWriter(); pw.println("<html>"); pw.println("<head>"); pw.println("</head>"); pw.println("<body>"); pw.println("<h3>姓名:"+name+"</h3><p>"); pw.println("<h3>年龄:"+age+"</h3><p>"); pw.println("</body>"); pw.println("</html>"); } public void doPost( ServletRequest request, ServletResponse response) throws ServletException, IOException{ doGet(request, response); } } 【步骤3】修改web.xml文件,将下面代码添加到其中: <servlet> <servlet-name>ParamServlet</servlet-name> <servlet-class>com.demo.ParamServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ParamServlet</servlet-name> <url-pattern>/paramtest</url-pattern> </servlet-mapping> 【步骤4】测试参数传递。在浏览器的地址栏中输入: ://localhost:8080/helloapp/input.html。输入数据,点击“确定”按钮,体会表单参数的传递。 问题1:如何通过超链接的锚标签(<a href>)传递请求参数? (三)编写一个Servlet,显示所有请求头 【步骤1】ShowHeadersServlet.java的Servlet能够检索所有的请求头,代码如下: package com.demo; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet. .*; public class ShowHeadersServlet extends Servlet { public void doGet( ServletRequest request, ServletResponse response) throws ServletException, IOException{ response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>All Headers</title>"); out.println("</head>"); out.println("<body bgcolor=\"#fdf5e6\">"); out.println("<h1 align=\"center\">All Request Headers</h1>"); out.println("<table border=1 align=\"center\">\n"+ "<tr bgcolor=\"#ffad00\">\n"+ "<th>Header Name<th>Header Value"); Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()){ String headerName = (String)headerNames.nextElement(); out.println("<tr><td>"+headerName); out.println("<td>"+request.getHeader(headerName)); } out.println("</table>\n</body></html>"); } public void doPost( ServletRequest request, ServletResponse response) throws ServletException, IOException{ doGet(request, response); } } 【步骤2】修改web.xml,加入下面内容: <servlet> <servlet-name>ShowHeadersServlet</servlet-name> <servlet-class></servlet-class> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern>/showheaders</url-pattern> </servlet-mapping> 【步骤3】在浏览器地址栏中输入下面URL访问该Servlet (四)简单的综合应用 【步骤1】创建一个名为input.html的HTML页面,其中包括一个表单,表单中包含两个文本域,分别供用户输入学号和姓名,该页面也包含提交和重置按钮。 【步骤2】定义一个名为com.demo.Student类,其中包括学号sno和姓名name两个private的成员变量,定义访问和修改sno和name的方法。 【步骤3】编写名为FirstServlet的Servlet,要求当用户在input.html中输入信息后点击“提交”按钮,请求FirstServlet对其处理。在FirstServlet中使用表单传递的参数(学号和姓名)创建一个Student对象并将其作为属性存储在请求对象中,然后获得通过请求对象的getRequestDispatcher()方法获得RequestDispatcher()对象,将请求转发到SecondServlet。 【步骤4】在SecondServlet中取出请求对象上存储的Student对象,并显示输出该学生的学号和姓名。在SecondServlet的输出中应该包含一个超链接,点击该连接可以返回input.html页面。 图2.1 input.html页面显示结果 图2.2 SecondServlet显示结果 四、思考题 1. 在Servlet中如何获得请求参数? 2. 如何实现请求转发?如何在请求对象中共享数据? 实验三 响应对象 一、实验目的 1. 了解和掌握如何从响应对象获得输出流对象; 2. 掌握如何设置响应类型; 3. 掌握如何设置响应头和状态码; 4. 重点掌握如何实现响应重定向。 二、实验原理 对Servlet的请求目的是要获得响应消息。Servlet要向用户发送响应数据首先要获得输出流对象。另外,通过响应对象还可向客户端发送状态码,也可以设置有关响应头,还可以对响应重定向。 三、实验内容与步骤 (一) 通过设置响应内容类型构建Excel电子表格 package com.demo; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet. .*; public class ExcelServlet extends Servlet{ public void doGet( ServletRequest request, ServletResponse response) throws ServletException, IOException{ response.setHeader("Cache-Control","no-cache"); response.setContentType("application/vnd.ms-excel;charset=gb2312"); PrintWriter out = response.getWriter(); out.println("<h3>Student information</h3>"); out.println("学号\t姓名\t性别\t年龄\t所在系"); out.println("95001\t李勇\t男\t20\t信息"); out.println("95002\t刘晨\t女\t19\t数学"); } } 该程序的运行结果如下图所示: 图3.1 生成Excel电子表格 (二)向客户发送二进制文件 package com.demo; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet. .*; public class DownloadServlet extends Servlet{ public void doGet( ServletRequest request, ServletResponse response) throws ServletException, IOException{ response.setContentType("application/jar"); File f = new File("C:\\servlet-api.jar"); FileInputStream is = new FileInputStream(f); ServletOutputStream os = response.getOutputStream(); byte[] bytearray = new byte[1024]; int bytesread = 0; while( (bytesread = is.read(bytearray) ) != -1 ){ os.write(bytearray, 0, bytesread); } os.flush(); } } 注意:此Servlet正确运行,需要将servlet-api.jar文件复制到C盘根目录下。 (三)下面的ShowTimeServlet通过设置refresh响应头实现每2秒钟刷新一次页面。 package com.demo; import java.io.*; import java.util.*; import java.text.SimpleDateFormat; import javax.servlet.*; import javax.servlet. .*; public class ShowTimeServlet extends Servlet{ public void doGet( ServletRequest request, ServletResponse response) throws ServletException, IOException{ response.setContentType("text/html;charset=gb2312"); response.setHeader("refresh","2"); PrintWriter out = response.getWriter(); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a HH:mm:ss"); String s = sdf.format(date); out.println("<html>"); out.println("<body>"); out.println("<h3 align=\"center\">每5秒钟刷新一次页面</h3><p>"); out.println("<h3 align=\"center\">现在的时间是:"+s+"</h3><p>"); out.println("</body>"); out.println("</html>"); } } (四)响应重定向 【步骤1】建立下面的login.html登录页面 <html> <head> <title>Login Page</title> </head> <body> <form action="login.do" method="post"> <table width="298" border="0" align="center" cellpading="2" cellspacing="1"> <tr> <td align="right">用户名:</td> <td align="left"><input type="text" name="username" size="15"></td> </tr> <tr> <td align="right">密 码:</td> <td><input type="password" name="password" size="15"></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="登录"> <input type="reset" value="取消"></td> </tr> </form> </body> </html> 【步骤2】编写一个名为RedirectServlet的Servlet,在其中检索用户名和口令参数值,然后判断其是否正确(若用户名和口令都为admin即认为正确),如果正确将响应重定向到welcome.html页面,否则将响应重定向到error.html页面,这两个页面请你自己编写,存放在应用程序根目录。下面是Servlet的部分代码。 package com.demo; import java.io.*; import javax.servlet.*; import javax.servlet. .*; public class RedirectServlet extends Servlet{ public void doPost( ServletRequest request, ServletResponse response) throws IOException,ServletException{ // 此处添加若干代码 if(){ response.sendRedirect(); }else{ response.sendRedirect(); } } } 四、思考题 1. 如何理解Servlet的生命周期? 2. 如何理解请求转发与响应重定向? 实验四 Servlet容器模型 一、实验目的 1. 掌握Web应用程序的DD文件web.xml的配置方法和作用; 2. 掌握如何通过ServletConfig获取Servlet的初始化参数; 3. 掌握ServletContext的概念,如何获得ServletContext对象; 4. 掌握如何通过RequestDispatcher转发请求。 二、实验原理 Web应用程序有严格定义的目录结构,它需要一个称为部署描述文件的文件web.xml来配置。对应用程序的每个Servlet,可以在web.xml中定义若干个初始化参数,然后通过ServletConfig对象获取这些参数。 ServletContext对象表示该应用程序的环境,通过该对象可以获得应用程序范围的初始化参数、容器版本信息、资源的URL、在其中存放共享数据以及登录日志等。 三、实验内容与步骤 (一)建立一个名为bookstore的Web应用程序 在Tomcat的webapps目录下,建立一个如下所示的目录结构: |- bookstore |- html (包含所有的HTML文件) |- jsp (包含所有的JSP文件) |- images (包含所有的GIF、JPEG和BMP图象文件) |- index.html (默认的HTML文件) |- WEB-INF |-classes ├ lib ├ web.xml 图4.1 bookstore应用程序的目录结构 这样就建立了一个名为bookstore的Web应用程序,本实验后面的题目都在该应用程序下面完成。 (二)使用ServletConfig检索Servlet的初始化参数 【步骤1】编写ConfigDemoServlet程序,内容如下: package com.demo; import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet. .*; public class ConfigDemoServlet extends Servlet{ String servletName=null; ServletConfig config=null; String email=null; String telephone=null; public void init() { config = getServletConfig(); servletName = config.getServletName(); email = config.getInitParameter("email"); telephone = config.getInitParameter("telephone"); } public void service( ServletRequest request, ServletResponse response) throws ServletException,IOException{ response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("Servlet名称:"+servletName+"<br>"); out.println("Email地址:"+email+"<br>"); out.println(" :"+telephone); out.println("</body></html>"); } } 【步骤2】修改web.xml文件,在其中添加下面Servlet定义和初始化参数定义 <servlet> <servlet-name>configDemoServlet</servlet-name> <servlet-class>Servlet</servlet-class> <init-param> <param-name>email</param-- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 Java 程序设计 实验 指导书 优质 资料
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文