java 학습 노트 - HttpServletResponse 및 HttpServletRequest(14)

9005 단어
개발자가 사용자의 요청을 얻으려면 HttpServletRequest 인터페이스의 대상을 사용하십시오.
개발자가 사용자의 요청에 응답할 필요가 있으면 HttpServletResponse 인터페이스의 대상을 사용하십시오.

HttpServletResponse 인터페이스


인터페이스는 기본적으로 서브렛Response 인터페이스를 상속합니다.이 인터페이스의 주요 임무는 응답 헤드 정보와 클라이언트가 요청한 응답체 데이터, 쿠키의 데이터 전송을 처리하는 것이다.
서브렛Response 인터페이스에서 자주 사용하는 방법
핵심적인 방법은 Response 객체에 데이터를 출력하는 것입니다.
ServletOutputStream getOutputStream()       

PrintWriter getWriter()                      

setContentType(String type)                  

setCharacterEncoding(String charset)          

HttpServletResponse 인터페이스에서 자주 사용하는 방법
 

setStatus(int sc) 

setHeader(String name, String value)


sendRedirect(String location)
Cookie
void addCookie(Cookie cookie)
URL ReWritting String encodeURL(String url) String encodeRedirectURL(String url)

응답 상태 코드 및 응답 헤드 제어

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

         //  

         response.setStatus(302);  //  

         //  

         response.setHeader("location", "/day06/index.jsp");

    }

문제: HTTP 프로토콜을 모르는 사람에게 위의 코드는 쓸 수 없습니다.
다음 문을 사용하여 대체할 수 있습니다.
response.sendRedirect("/day06/index.jsp");

바이트 흐름은 응답체의 출력을 한다

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

       //  UTF-8 

       response.setHeader("content-type", "text/html;charset=utf-8");

       //  

       ServletOutputStream out = response.getOutputStream();

       //  

       String data = "hello<br/>";

       //  

       out.write(data.getBytes());

       data = "<font color=\"blue\">this is a blue color!</font><br/>";

       out.write(data.getBytes());

       //  

       data = " ";

       //  UTF-8 

       out.write(data.getBytes("UTF-8")); // UTF-8

    }

위의 코드에서 프로토콜을 사용하는 문은 다음 코드를 사용하여 단순화할 수 있습니다.
response.setContentType("text/html;charset=utf-8");     

위의 코드는 아날로그 HTTP 프로토콜의 meta 태그를 사용하여 단순화할 수 있습니다.
out.write("".getBytes());
바이트 흐름을 사용하여 숫자를 직접 출력하면 어떻게 됩니까?
//  int 



int num = 65;



out.write(num);

브라우저는 텍스트 소프트웨어이기 때문에 숫자를 해석할 때 기본적으로 문자의 변환을 진행하기 때문에 위의 코드는 A를 나타낸다.65를 강제로 출력하려면 out을 사용해야 합니다.write(“65”.getBytes());
1 바이트 흐름으로 그림 출력
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

       //  

       ServletContext context = this.getServletContext();

       //  

       String path = context.getRealPath("/imgs/ .jpg");

       File file = new File(path);

       System.out.println(file);

       //  

       response.setHeader("content-disposition", 

"attachment;filename="+

URLEncoder.encode(file.getName(),"utf-8")); //  

       //  

       FileInputStream in = new FileInputStream(file);

       //  

       ServletOutputStream out = response.getOutputStream();

       //  

       byte [] b = new byte[1024];

       int len = 0;

       while((len = in.read(b)) != -1){

           out.write(b, 0, len);

       }

       //  

       in.close();

    }

만약 한 사이트에 그림과 텍스트가 있다면 어떤 흐름을 사용해야 합니까?
Repsonse는 바이트 흐름과 문자 흐름을 동시에 가져올 수 없으며, 이상의 문제는 HTTP 통신 원리를 제대로 파악하지 못했기 때문이다.브라우저가 요청을 보내는 처리는 반드시 페이지이지만 페이지의 그림 표현 형식은 바이트 흐름이 아니라

좋은 웹페이지 즐겨찾기