==========================================
后台处理逻辑
package com.fgy;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/header")
public class RequestHeaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.setStatus(500);
// response.sendError(404, "not found");
// response.getWriter().append("Served at: ").append(request.getContextPath());
response.sendRedirect("result.html");
// System.out.println(request.getMethod());
// System.out.println(request.getRequestURL());
// System.out.println(request.getRequestURI());
// System.out.println(request.getQueryString());
// System.out.println(request.getProtocol());
// System.out.println("============================");
// Enumeration<String> headerName=request.getHeaderNames();
// while (headerName.hasMoreElements()) {
// String s = headerName.nextElement();
// System.out.println(s+":"+request.getHeader(s));
// }
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
=====================================
访问地址
http://localhost:8080/project1/header?a
=====================================
控制台输出
GET
http://localhost:8080/project1/header
/project1/header
a
HTTP/1.1
servlet处理请求报文
处理请求报文起始行的方法
处理请求报文首部字段的方法
getHeaderNames
getHeader
getHeaders
getContentLength
getContentType
getCookies 会话跟踪有用
servlet处理响应
使用输出流构建响应
设置响应状态码
设置响应首部字段
前台重定向
使用输出流构建响应
PrintWriter out=response.getWriter();
out.print()或out.write();
out.flush();
out.close();
这种写法非常不利于程序的维护及页面的编写
setStatus
sendError
setHeader
setIntHeader
setDateHeader
setContentType
addCookie
前台重定向
1将需要发送给客户端的URL作为HttpServletResponse中sendRedirect方法的参数
2服务器端会返回一个状态码(3XX)及location字段以便告诉浏览器进行重定向
前台重定向需要两次请求,还有一个后台转发的概念
后台转发
servlet处理文件下载
通过编程实现文件下载的必要性
演示通过编程实现文件下载
响应
纯文本的响应,直接在页面上展示 ,字符流
二进制的响应,其实就是下载 ,字节流
要将项目之外或保存在数据库中的资源发到客户端
对资源进行控制是否可以下载
文件下载实现步骤
1设置content-type为文件的内容类型的响应首部字段,即设置mime类型
2添加一个content-disposition的响应首部字段,赋值为attachment;filename=filename
如果文件名带有中文,需要进行编码
3使用输出流对文件进行输出
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="Upload2" method="post" enctype="multipart/form-data">
<input type="file" name="file1"><br>
<input type="file" name="file2"><br>
<input type="text" name="name"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
=================================
package com.fgy;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/download")
public class Servlet4 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.setContentType("text/html; charset = gb2312");
// String fileName = request.getParameter("filename");
// System.out.println(fileName);
response.setHeader("content-type", "application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename=FoxitReader_CHS_8.1.5.1208.exe");
// String path = this.getServletContext().getRealPath("/upload/"+fileName);
FileInputStream is=new FileInputStream("d://FoxitReader_CHS_8.1.5.1208.exe");
// FileInputStream is=new FileInputStream(new File(path));
byte[] data=new byte[2048];
int len=0;
ServletOutputStream os=response.getOutputStream();
while ((len=is.read(data, 0, data.length))!=-1) {
os.write(data,0,len);
}
os.close();
is.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}