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
★★★★★★★★★★★★★★★★★」password
servlet instance variables로 선언된 것 같습니다.이것은 스레드 세이프가 아닙니다).따라서 Oracle 튜토리얼을 사용하여 기본 Java SE API에 대해 조금 더 자세히 알아보고("기본사항을 다루는 레일" 장을 참조하십시오) 이러한 튜토리얼을 사용하여 JSP/Servlet을 올바르게 사용하는 방법을 배울 것을 강력히 권장합니다.
다음 항목도 참조하십시오.
- 서블릿 Wiki 페이지
- Java EE 웹 개발, 어디서부터 시작해야 하며 어떤 기술이 필요합니까?
- 서블릿이 "를 반환합니다.HTTP 상태 404 요청된 리소스(/servlet)를 사용할 수 없습니다."
- MVC 및 DAO 패턴을 사용하여 JSP 페이지에서 HTML로 JDBC 결과 세트 표시
업데이트: 질문의 갱신에 따라 (대부분입니다만, 원래 질문의 일부를 삭제해서는 안 됩니다.이것에 의해, 답변은 무효가 됩니다.새로운 블록에 정보를 추가하는 것이 아니라), 폼의 부호화 타입을 불필요하게 로 설정하고 있는 것을 알 수 있습니다.그러면 요청 파라미터가 (기본값)과는 다른 구성으로 전송됩니다.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 요청이 필요합니다.
- GET 방식은 브라우저가 서버에서 정보를 취득하기 위해 가장 일반적으로(기본적인) 방식입니다.GET 메서드를 사용하는 경우 요청 본문인 요청 패킷의 세 번째 섹션은 비어 있습니다.
GET 방식은 다음 두 가지 방법 중 하나로 사용됩니다.메서드가 지정되지 않은 경우, 즉 사용자 또는 브라우저가 HTML 페이지, 이미지 등의 단순한 리소스를 요청하는 경우입니다.폼을 제출하고 method를 선택하면=HTML 태그에 접속합니다.HTML 양식을 통해 수집된 데이터는 HTML 형식으로 사용되며, 형식(예: =값 &s &s=값)에 의해 수집됩니다. HTTP/10 옵션의 헤더 옵션 << 빈 행 >>
name=value 형식의 데이터는 QUERY_STRING이라는 환경변수에 저장됩니다.이 변수는 처리 프로그램(JSP, Java Servlet, PHP 등)으로 전송됩니다.
- 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
'IT' 카테고리의 다른 글
jQuery.fn은 무슨 뜻입니까? (0) | 2023.01.12 |
---|---|
여러 JFrame 사용:좋은 방법인가 나쁜 방법인가? (0) | 2023.01.12 |
SQL: LIKE 문의 쿼리 파라미터에 REGEXP_REPLACE 사용 (0) | 2023.01.12 |
MongoDB를 사용하여 MariaDB CONNECT 스토리지 엔진을 테스트하는 방법 - 커넥터가 존재합니까? (0) | 2023.01.12 |
표 'performance_schema'session_session'이 존재하지 않습니다. (0) | 2023.01.12 |