Java Web实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3 实验三HTTP响应对象
一.实验目的
1. 了解和掌握如何从响应对象获得输出流对象。
2. 掌握如何设置响应类型。
3. 掌握如何设置响应头和状态码。
4. 重点掌握如何实现响应重定向。
二.实验内容
任务1:在Eclipse的helloweb项目中创建下面的Servlet,实现通过设置响应内容类型构建Excel电子表格。
package com.demo;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
@WebServlet("/ExcelServlet")
public class ExcelServlet extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
response.setHeader("Content-Encoding","gb2312");
response.setContentType("application/vnd.ms-excel;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("学号\t姓名\t性别\t年龄\t所在系");
out.println("95001\t李勇\t男\t20\t信息");
out.println("95002\t刘晨\t女\t19\t数学");
}
}
该程序的运行结果如下图所示:
图3.1 生成Excel电子表格
修改上述Servlet,将下面一行:
response.setContentType("application/vnd.ms-excel;charset=gb2312");
改为:
response.setContentType("application/msword;charset=gb2312");
重新访问该Servlet,看结果如何?
任务2:下面的ShowTimeServlet通过设置refresh响应头,实现每2秒钟刷新一次页面。
package com.demo;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;
import javax.servlet.*;
import javax.servlet.http.*;
public class ShowTimeServlet extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse 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\">每2秒钟刷新一次页面</h3><p>");
out.println("<h3 align=\"center\">现在的时间是:"+s+"</h3><p>");
out.println("</body>");
out.println("</html>");
}
}
任务3:响应重定向
步骤1:建立下面的login.html登录页面
<html>
<head><title>Login Page</title></head>
<body>
<form action="RedirectServlet" 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.http.*;
public class RedirectServlet extends HttpServlet{
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException{
// 此处添加若干代码,获取用户名和密码值
if(){
response.sendRedirect();
}else{
response.sendRedirect();
}
}
}
任务4:实现文件上传
步骤1:建立upload.html页面,主要代码如下:
<form method="post" action="do_upload.jsp" ENCTYPE="multipart/form-data"> <input type="hidden" name="TEST" value="good">
<table width="50%" border="0" align="center">
<tr>
<td><div align="center">1、
<input type="FILE" name="FILE1" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">2、
<input type="FILE" name="FILE2" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">3、
<input type="FILE" name="FILE3" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">4、
<input type="FILE" name="FILE4" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="上传它!">
</div></td>
</tr>
</table>
</form>
步骤2:将jspSmartUpload.jar文件复制到webcontent文件夹中的lib目录中。
步骤3:建立do_upload.jsp文件,处理上传的文件。
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page language="java" import="com.jspsmart.upload.*"%>
<%
com.jspsmart.upload.SmartUpload mySmartUpload=new com.jspsmart.upload. SmartUpload();
int count=0;
mySmartUpload.initialize(pageContext);
mySmartUpload.setTotalMaxFileSize(1000000);
mySmartUpload.upload();
//设置上传路径
String path = getServletContext().getRealPath("/");
path=path+"\\"+"upload";
//out.println(path+"<br>");
//设置上传路径
try{
count = mySmartUpload.save(path);
out.println(count + " file(s) uploaded.");
out.print("<br>");
for (int i=0;i<count;i++){
File myFile=mySmartUpload.getFiles().getFile(i);
String fn=myFile.getFileName();
//out.print("<img
src=\\upload\\upload\\"+myFile.getFileName()+">");
//out.print("<br>");
//out.print("文件<font color=red>"+fn+"</font>的地址为:"); //out.print( "http://localhost:8083/upload/upload/"+fn+"<br><br>" );
}
}
catch (Exception e)
{
out.println(e.toString());
}
%>
步骤4:在out.println(path+"<br>");所示的目录中创建upload文件夹,用来存放上传的文件。
任务4:实现文件下载
步骤1:建立download.html页面,主要代码如下:
<html>
<head>
<title>下载</title>
</head>
<body>
<a href="do_download.jsp">点击下载</a>
</body>
</html>
步骤2:建立do_download.jsp文件,主要代码如下:
<%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %> <html>
<body>
<%
SmartUpload su = new SmartUpload();// 新建一个SmartUpload对象
su.initialize(pageContext); // 初始化
su.setContentDisposition(null); // 设定contentDisposition为null以禁止浏览器自动打开
文件
String path = getServletContext().getRealPath("/");
path=path+"\\"+"upload";
su.downloadFile(path+"/123.docx"); // 下载文件
%>
</body>
</html>
三.思考题
1. 如何理解Servlet的生命周期?
2. 如何理解请求转发与响应重定向?。