========================================== 后台处理逻辑 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处理请求报文处理请求报文起始行的方法处理请求报文首部字段的方法getHeaderNamesgetHeadergetHeadersgetContentLengthgetContentTypegetCookies 会话跟踪有用servlet处理响应使用输出流构建响应设置响应状态码设置响应首部字段前台重定向使用输出流构建响应PrintWriter out=response.getWriter();out.print()或out.write();out.flush();out.close();这种写法非常不利于程序的维护及页面的编写setStatussendErrorsetHeadersetIntHeadersetDateHeadersetContentTypeaddCookie前台重定向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);}}