자바 웹 입문:HttpResponse 와 HttpRequest 상세 설명

13625 단어 자바ResponseRequest
HttpResponse 설명
HttpServletResponse 개요:
Servlet 을 만 들 때 service()방법 이나 doGet()/doPost()를 덮어 씁 니 다.이 방법 들 은 두 개의 인자 가 있 습 니 다.하 나 는 요청 한 request 와 응답 response 를 대표 합 니 다.서비스 방법의 response 유형 은 ServletResponse 이 고 doGet/doPost 방법의 response 유형 은 HttpServletResponse 이 며 HttpServletResponse 는 ServletResponse 의 하위 인터페이스 로 기능 과 방법 이 더욱 강하 다.
Response 실행 프로 세 스
img
응답 헤드 가 많 습 니 다.여기 서 자주 사용 하 는 것 만 소개 합 니 다.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bAvaDBGw-1620739367741)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511163256716.png)]
브 라 우 저 에 서 는 F12 패키지 로 응답 헤드,요청 헤드 를 볼 수 있 으 며 구체 적 인 것 은 다시 확인 할 수 있 습 니 다.
응답 줄 설정
응답 상태 코드 설정

/**
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test3")
public class HttpResponseTest3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("     ,         ,         ");
        resp.setStatus(404);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
테스트
在这里插入图片描述
응답 헤드 설정
점프 페이지 새로 고침

/**
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test4")
public class HttpResponseTest4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //        1     
        System.out.println("       1     ");
        resp.setHeader("Refresh", "1");
        //     3       
//        resp.setHeader("Refresh","3;URL=hello.jsp");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
테스트
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LGJQhKor-1620739367743)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511162434487.png)]
작은 demo 가 페이지 새로 고침 누적 을 실현 합 니 다.

/**
 * response
 * @author Adimi
 */
@WebServlet("/test4")
public class ResponseTest4 extends HttpServlet {
    private static Integer id=1;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setHeader("Refresh","1");
        PrintWriter writer = response.getWriter();
        id++;
        writer.print("id==>"+id);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
문자 인 코딩 설정

/**
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test1")
public class HttpResponseTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //         
        //      
        //        resp.setCharacterEncoding("UTF-8");
        //                                  
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("  ,  !!!");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
테스트
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5VCR2LeF-1620739367746)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511162823603.png)]
리 디 렉 션

/**
 *    
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test5")
public class HttpResponseTest5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("hello.jsp");
//        resp.setHeader("location","www.baidu.com");          
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
리퀘스트

/**
 *    
 * @Author: crush
 * @Date: 2021-05-09 19:35
 * version 1.0
 */
@WebServlet("/test5")
public class HttpResponseTest5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        resp.sendRedirect("hello.jsp");
        req.getRequestDispatcher("hello.jsp").forward(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
리 셋 과 리 트 윗 의 차이
파일 다운로드
경로 자원 가 져 오기

String path=this.getServletContext().getRealPath("WEB-INF\\classes\\8.jpg");
자원 읽 기

FileInputStream fileInputStream=new FileInputStream(path);
파일 이름 을 가 져 옵 니 다.경 로 를 컴퓨터 에 저장 하 는 형식 은\\\입 니 다.

String fileName=path.substring(path.lastIndexOf("\\")+1);
메시지 헤더 설정 브 라 우 저 에 1.png 이 그림 설정 인 코딩 을 다운로드 하려 고 합 니 다.

resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
읽 은 내용 을 브 라 우 저 에 되 돌려 줍 니 다.

 int len=0;
byte[] bytes=new byte[1024];
// ServletOutputStream                     
ServletOutputStream servletOutputStream=resp.getOutputStream();
while((len=fileInputStream.read(bytes))>0) {
    servletOutputStream.write(bytes,0,len);
}
자원 닫 기

servletOutputStream.close();
        fileInputStream.close();
주:8.jpg 는 제 resources 폴 더 에 놓 여 있 지만 8.jpg 가 저 장 된 위 치 를 컴 파일 해 야 합 니 다.

구체 코드

/**
 * @Author: crush
 * @Date: 2021-05-09 19:40
 * version 1.0
 */
@WebServlet("/down")
public class ResponseDownFile extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //      
        String path=this.getServletContext().getRealPath("WEB-INF\\classes\\8.jpg");
        //    
        FileInputStream fileInputStream=new FileInputStream(path);
        //      ,            \\
        String fileName=path.substring(path.lastIndexOf("\\")+1);
        //          ,    1.png    
        //              
        //      
        resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //             
        int len=0;
        byte[] bytes=new byte[1024];
        ServletOutputStream servletOutputStream=resp.getOutputStream();
        while((len=fileInputStream.read(bytes))>0) {
            servletOutputStream.write(bytes,0,len);
        }
        //     
        servletOutputStream.close();
        fileInputStream.close();
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
HttpRequest 설명
HttpServletRequest 개요
저 희 는 Servlet 을 만 들 때 service()방법 이나 doGet()/doPost()를 덮어 씁 니 다.이 방법 들 은 모두 두 개의 인자 가 있 습 니 다.하 나 는 요청 한 request 와 응답 response 를 대표 합 니 다.서비스()방법 에는 요청 방식 에 따라 doget()과 dopost()를 호출 하 는 방법 이 적 혀 있 습 니 다.
서비스 방법의 request 유형 은 ServletRequest 이 고 doGet/doPost 방법의 request 유형 은 HttpServletRequest 이 며 HttpServletRequest 는 ServletRequest 의 하위 인터페이스 로 기능 과 방법 이 더욱 강력 합 니 다.
요청 실행 절차
img
요청 한 인자 가 져 오기

/**
 * @Author: crush
 * @Date: 2021-05-11 16:52
 * version 1.0
 */
@WebServlet("/request1")
public class RequestTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //                   
        String username = req.getParameter("username"); 
        String password = req.getParameter("password");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>"+username+":"+password+"</h1>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2zxGslkb-1620739367750)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210511170056042.png)]
여러 매개 변수의 값 가 져 오기

  @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //               
        req.setCharacterEncoding("utf-8");
        Enumeration<String>  names = req.getParameterNames();
        while (names.hasMoreElements()) {
            String name = (String) names.nextElement();
            String[]  values = req.getParameterValues(name);
            System.out.println(name+":"+ Arrays.toString(values));
        }
    }
요청 줄 정보 얻 기

/**
 * @Author: crush
 * @Date: 2021-05-11 16:52
 * version 1.0
 */
@WebServlet("/request3")
public class RequestTest3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //      url
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("   URL===>"+requestURL);
        //      Servlet   
        String path = req.getServletPath();
        System.out.println("   Servlet   ===>"+path);
        //        HTTP     ,  GET,POST PUT
        String method = req.getMethod();
        System.out.println("        HTTP     ==>"+method);
        //                  Internet  (IP)  
        String remoteAddr = req.getRemoteAddr();
        System.out.println("remoteAddr==>"+remoteAddr);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
request 전송 실현

/**
 * @Author: crush
 * @Date: 2021-05-11 16:52
 * version 1.0
 */
@WebServlet("/request2")
public class RequestTest2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //   request2     request4 
        req.getRequestDispatcher("/request4").forward(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
request 는 도 메 인 대상 입 니 다.
request 대상 도 데 이 터 를 저장 하 는 지역 대상 이기 때문에 다음 과 같은 방법 이 있 습 니 다.setAttribute(String name, Object o) getAttribute(String name) removeAttribute(String name)ServletContext 역할 영역:
생 성:웹 프로그램 을 시작 할 때 만 듭 니 다.
소각:웹 프로그램 을 닫 을 때 소각
도 메 인 역할 범위:전체 웹 응용의 시작 주기
request 역할 영역:
생 성:접근 시 request 생 성
소각:응답 종료 request 소각
도 메 인의 역할 범위:1 차 요청 중
총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기