IT

Servlet에서의 doGet 및 doPost

itgroup 2023. 1. 12. 22:10
반응형

Servlet에서의 doGet 및 doPost

서블릿으로 정보를 전송하는 HTML 페이지를 개발했습니다.서블릿의 .doGet() ★★★★★★★★★★★★★★★★★」doPost():

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException  {

     String id = req.getParameter("realname");
     String password = req.getParameter("mypassword");
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

    String id = req.getParameter("realname");
    String password = req.getParameter("mypassword");
}

서블릿을 호출하는html 페이지 코드는 다음과 같습니다.

<form action="identification" method="post" enctype="multipart/form-data">
    User Name: <input type="text" name="realname">
    Password: <input type="password" name="mypassword">
    <input type="submit" value="Identification">
</form> 

★★★★★★★를 사용하는 method = "get" 수 만, 「ID」를 사용하는 는,method = "post" 및 는 id로 되어 있습니다.null이 경우 값을 얻을 수 없습니다.

또 하나 궁금한 것은 Servlet에 의해 생성 또는 검증되는 데이터의 사용방법입니다.예를 들어 위의 Servlet이 사용자를 인증하는 경우 HTML 페이지에서 사용자 ID를 인쇄하고 싶습니다.응답으로 문자열 'id'를 보낼 수 있고 이 정보를 HTML 페이지에서 사용할 수 있습니다.가능합니까?

서론

HTTP GET 요구를 대행 수신하는 경우 를 사용해야 합니다.HTTP POST 요구를 대행 수신하는 경우는, 을 사용해 주세요.그게 다예요.(Netbeans의 불행한 자동 생성 등) 한쪽을 다른 쪽으로 또는 그 반대로 포팅하지 마십시오.processRequest()이 안 돼요.이건 전혀 말이 안 돼요.

얻다

보통 HTTP GET 요구는 아이돌포텐트입니다즉, 요청을 실행할 때마다 정확히 동일한 결과를 얻을 수 있습니다(허가/인증 및 시간에 민감한 페이지 특성(검색 결과, 최신 뉴스 등)은 고려 대상에서 제외됩니다).북마크 가능한 요청에 대해 이야기 할 수 있습니다.링크 클릭, 북마크 클릭, 브라우저 주소창에 raw URL 입력 등 모든 것이 HTTP GET 요청을 실행합니다.서블릿이 문제의 URL을 리슨하고 있는 경우,doGet()메서드가 호출됩니다.보통 요청을 사전 처리하는 데 사용됩니다.즉, JSP의 HTML 출력을 표시하기 전에 테이블에 표시할 데이터를 수집하는 등의 비즈니스 작업을 수행합니다.

@WebServlet("/products")
public class ProductsServlet extends HttpServlet {

    @EJB
    private ProductService productService;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Product> products = productService.list();
        request.setAttribute("products", products); // Will be available as ${products} in JSP
        request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
    }

}

으로 JSP에 ./WEB-INF최종 사용자가 전처리 서블릿을 호출하지 않고 직접 액세스할 수 없도록 하기 위한 폴더입니다(따라서 빈 테이블이 표시됨으로써 혼란스러워집니다).

<table>
    <c:forEach items="${products}" var="product">
        <tr>
            <td>${product.name}</td>
            <td><a href="product?id=${product.id}">detail</a></td>
        </tr>
    </c:forEach>
</table>

또한 위의 마지막 열에 표시된 상세 보기/편집 링크는 일반적으로 무의미합니다.

@WebServlet("/product")
public class ProductServlet extends HttpServlet {

    @EJB
    private ProductService productService;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Product product = productService.find(request.getParameter("id"));
        request.setAttribute("product", product); // Will be available as ${product} in JSP
        request.getRequestDispatcher("/WEB-INF/product.jsp").forward(request, response);
    }

}
<dl>
    <dt>ID</dt>
    <dd>${product.id}</dd>
    <dt>Name</dt>
    <dd>${product.name}</dd>
    <dt>Description</dt>
    <dd>${product.description}</dd>
    <dt>Price</dt>
    <dd>${product.price}</dd>
    <dt>Image</dt>
    <dd><img src="productImage?id=${product.id}" /></dd>
</dl>

포스트.

HTTP POST http http http http 。최종사용자가 사전에 URL에 POST 폼을 송신하고 리다이렉트를 실행하지 않은 경우 URL을 북마크할 수 있는 것은 아닙니다.URL 입니다.URL을 새 브라우저 창/탭에 복사하여 붙여넣는 것이 폼 제출 후와 완전히 같은 결과를 얻을 필요는 없습니다.URL 입니다.는, 그 URL 로부터 리슨 하고 .doPost()호출됩니다.일반적으로 요청을 후처리하는 데 사용됩니다.즉, 제출된 HTML 양식에서 데이터를 수집하여 비즈니스 작업(변환, 검증, DB에 저장 등)을 수행합니다.마지막으로 전송되는 JSP 페이지에서 HTML로 결과가 표시됩니다.

<form action="login" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit" value="login">
    <span class="error">${error}</span>
</form>

...이러한 서블릿과 조합하여 사용할 수 있습니다.

@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    @EJB
    private UserService userService;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User user = userService.find(username, password);

        if (user != null) {
            request.getSession().setAttribute("user", user);
            response.sendRedirect("home");
        }
        else {
            request.setAttribute("error", "Unknown user, please try again");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

}

'하다'가User 이름과 한 경우)한 ('사용자 이름과 비밀번호는 다음과 같습니다.User 범위 " in몇이에서는 "session scope"(세션 범위)).http://example.com/contextname/home하고, 해, 「」, 「JSP」, 「JSP」, 「JSP」, 「JSP」, 「JSP」, 「JSP」에 의해서 메세지가 표시되도록 ${error}.

에 따라 ' 수 있다', '숨길 수 있다', '숨길 수 있다.login.jsp/WEB-INF/login.jsp사용자가 서블릿을 통해서만 액세스할 수 있도록 합니다.에 의해, 는 깨끗한 상태로 됩니다.http://example.com/contextname/login . 을 됩니다.doGet()하다

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}

, 행을 합니다.doPost())

그렇다고는 해도, 그냥 장난치고 어두운 곳에서 촬영하고 있는 것은 아닌 것 같습니다만, 당신이 투고한 코드는 좋지 않습니다(예를 들어, 를 사용하는 등).compareTo()equals() 해서 '파라미터 이름'만 쓰는 게 ' 이름'을 하겠습니다.getParameter()id ★★★★★★★★★★★★★★★★★」passwordservlet instance variables로 선언된 것 같습니다.이것은 스레드 세이프가 아닙니다).따라서 Oracle 튜토리얼을 사용하여 기본 Java SE API에 대해 조금 더 자세히 알아보고("기본사항을 다루는 레일" 장을 참조하십시오) 이러한 튜토리얼을 사용하여 JSP/Servlet을 올바르게 사용하는 방법을 배울 것을 강력히 권장합니다.

다음 항목도 참조하십시오.


업데이트: 질문의 갱신에 따라 (대부분입니다만, 원래 질문의 일부를 삭제해서는 안 됩니다.이것에 의해, 답변은 무효가 됩니다.새로운 블록에 정보를 추가하는 것이 아니라), 폼의 부호화 타입을 불필요하게 로 설정하고 있는 것을 알 수 있습니다.그러면 요청 파라미터가 (기본값)과는 다른 구성으로 전송됩니다.application/x-www-form-urlencoded요청 파라미터를 쿼리 문자열로 전송합니다(예:name1=value1&name2=value2&name3=value3한 것은 「」multipart/form-data whenever whenever whenever whenever whenever whenever whenever<input type="file">파일 업로드 형식의 요소(비문자 데이터)를 지정합니다.이 경우는 그렇지 않기 때문에 제거만 하면 예상대로 동작합니다.파일을 업로드해야 할 경우 인코딩 유형을 설정하고 요청 본문을 직접 구문 분석해야 합니다.보통 Apache Commons FileUpload를 사용하는데, 이미 새로운 Servlet 3.0 API를 사용하고 있는 경우에는 에서 시작하는 임베디드 기능을 사용할 수 있습니다.구체적인 예에 대해서는 다음 답변도 참조하십시오.JSP/Servlet을 사용하여 서버에 파일을 업로드하는 방법

브라우저는 GET과 POST를 모두 사용하여 서버에 단일 리소스를 요구합니다.각 리소스에는 개별 GET 또는 POST 요청이 필요합니다.

  1. GET 방식은 브라우저가 서버에서 정보를 취득하기 위해 가장 일반적으로(기본적인) 방식입니다.GET 메서드를 사용하는 경우 요청 본문인 요청 패킷의 세 번째 섹션은 비어 있습니다.

GET 방식은 다음 두 가지 방법 중 하나로 사용됩니다.메서드가 지정되지 않은 경우, 즉 사용자 또는 브라우저가 HTML 페이지, 이미지 등의 단순한 리소스를 요청하는 경우입니다.폼을 제출하고 method를 선택하면=HTML 태그에 접속합니다.HTML 양식을 통해 수집된 데이터는 HTML 형식으로 사용되며, 형식(예: =값 &s &s=값)에 의해 수집됩니다. HTTP/10 옵션의 헤더 옵션 << 빈 행 >>

name=value 형식의 데이터는 QUERY_STRING이라는 환경변수에 저장됩니다.이 변수는 처리 프로그램(JSP, Java Servlet, PHP 등)으로 전송됩니다.

  1. HTML 폼을 작성할 때 POST 메서드를 사용하여 method=를 의뢰합니다.태그의 일부로서 POST 합니다.POST 메서드를 사용하면 클라이언트는 (앞에서 설명한 바와 같이) 요청 본문 섹션에 있는 서버에 폼 데이터를 전송할 수 있습니다.데이터는 표준 입력을 통해 프로그램으로 전송된다는 점을 제외하고 GET 방식과 유사하게 인코딩되고 형식이 지정됩니다.

예: POST / postans / shop // form1 . jsp 11 header header header header headerHTTP / 1.0 header header header header<<<<< <<<<<<<<<<<<<<<<< = Sam%20 Sultan & iceCream = example example example

post 메서드를 사용하는 경우 QUERY_STRING 환경변수는 비어 있습니다.GET와 POST의 장점/단점

GET 방식의 장점: 폼을 사용하거나 URL 페이지에 파라미터를 북마크할 수 있게 된 후 추가함으로써 파라미터를 약간 빠르게 입력할 수 있습니다.

GET 방식의 단점: 4K의 데이터만 전송할 수 있습니다. (텍스트 영역 필드를 사용할 때는 사용하지 마십시오.) URL 끝에 매개 변수가 표시됩니다.

POST 방법의 장점: 파라미터는 URL 끝에 표시되지 않습니다.(민감한 데이터에 사용)4K 이상의 데이터를 서버에 송신할 수 있습니다.

POST 방식의 단점: 데이터로 북마크할 수 없음

컨테이너HttpServlet.service()으로 서서 to to to to to to to to to to 로 전송됩니다.doGet() ★★★★★★★★★★★★★★★★★」doPost()필요에 따라서, 서비스 방법을 덮어쓸 필요는 없습니다.

데이터를 포스트가 아닌 get을 통해 전달하고 있는 것일 수 있습니까?

<form method="get" ..>
..
</form>

하면.<form action="identification" >폼의 으로는 "Get사용하여 를 사용하여 데이터를 할 수 .html은 "Get"을 사용합니다.이 방법으로 데이터는 HTML 헤더로 전달되므로 전송 시 URL에 표시됩니다., , USE Post: 「HTML」의 「HTML」의 「USE Post」를 해 주세요.<form action="identification" method="post">doPost postpostpostpost 。이는 html 헤더가 아닌 html 본문 아래에 데이터가 전달되며 폼을 전송한 후 URL 내의 데이터가 표시되지 않습니다.

html의 예:

<body>  
<form action="StartProcessUrl" method="post">
.....
.....

자바 서블릿 코드의 예:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter out = response.getWriter();
         String surname = request.getParameter("txtSurname");
         String firstname = request.getParameter("txtForename");
         String rqNo = request.getParameter("txtRQ6");
         String nhsNo = request.getParameter("txtNHSNo");

         String attachment1 = request.getParameter("base64textarea1");
         String attachment2 = request.getParameter("base64textarea2");

.........
.........

언급URL : https://stackoverflow.com/questions/2349633/doget-and-dopost-in-servlets

반응형