Fork me on GitHub

servlet_2

 

==========================================
后台处理逻辑
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);
    }

}

 

posted on 2018-05-24 20:45  阳光-源泉  阅读(244)  评论(0)    收藏  举报

导航