요청 전달 ↓

1. RequestDispatcher방식 - 동일한 웹서버내에 웹 컨텍스트내의 jsp나 servlet으로 요청을 

전달할 수 있습니다. (다른 웹서버 혹은 다른 웹 컨텍스트로 요청 전달 불가) - 정보 공유 : 요청을 전달할때 다른 추가적인 정보를 전달할 수 있습니다. - url과 실제 응답 content의 page와 다름

2. sendRedirect방식 - 동일한 웹서버, 다른 웹서버로 요청을 전달 가능 - 요청은 get 방식으로 전달됩니다. - 동일한 웹서버의 jsp나 servlet으로 전달된 경우 전달된 페이지에서 request, response객체가 새로 생성됩니다 그러므로 정보 공유 불가능합니다. - 최종 응답페이지의 경로가 url로 표시됩니다.



---------------------------------------------------------------------------------------------------------


샘플 파일 구성


basicform.jsp  ==>  appendform.jsp  =>  resultInfo.jsp


1. basicform.jsp  - 아이디와 이메일을 입력받는다.

2. appendform.jsp  - 추가로 주소와 핸드폰 번호를 추가한다.

3. resultInfo.jsp  - 최종 결과 화면으로 아이디, 비밀번호, 주소, 핸드폰 번호를 출력한다.



▶basicform.jsp

<%@ page contentType="text/html; charset=utf-8" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>basicform.jsp</title>

</head>

<body>

<center><h3>기본 정보 입력 폼</h3></center><hr>

<form action="appendform.jsp" method="post">

이름 : <input type="text" id="userid" name="userid"><br>

이메일 : <input type="text" id="email" name="email"><br>

<input type="submit" value="다음">

<input type="reset" value="취소">

</form>

</body>

</html>


appendform.jsp

<%@ page contentType="text/html; charset=utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>appendform.jsp</title>

</head>

<body>

<%--

request.setCharacterEncoding("utf-8");

//application 내장객체 : javax.servlet.ServletContext타입

RequestDispatcher rd = application.getRequestDispatcher("/resultInfo.jsp");

request.setAttribute("address", "서울시 강남구");

request.setAttribute("phone", "010-123-1234");

rd.forward(request, response);

--%>

</body>

</html>


resultInfo.jsp

<%@ page contentType="text/html; charset=utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>resultInfo.jsp</title>

</head>

<body>

<%

//application 내장객체 : javax.servlet.ServletContext타입

out.println("userid : " + request.getParameter("userid") + "<br>");

out.println("email : " + request.getParameter("email") + "<br>");

out.println("address : " + request.getParameter("address") + "<br>");

out.println("phone : " + request.getParameter("phone") + "<br>");

%>


</body>

</html>


결과화면


RequestDispatcher방식을 이용하였기 때문에 uri는 appendform.jsp로 보인다.


javax.servlet.http.HttpServletRequest

클라이언트의 요청과 관련된 정보를 저장 (파라미터, http프로토콜 헤더) 서버와 관련된 정보 클라이언트의 세션, 쿠키 정보 다른 서블릿이나 JSP로 요청을 전달할때 request객체에 저장해서 전달 가능


JSP로 알아보기

<%@ page import = "java.util.*" %>

<%@ page import = "java.sql.*" %>

<%@ page import = "java.io.*" %>


<%@ page contentType="text/html; charset=utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>HttpServletRequest</title>

</head>

<body>

<!-- html 주석 (소스보기에서 보입니다.) -->

<%-- JSP주석입니다.(소스보기에서 보이지 않습니다.) --%>


<%--

tomcat 컨테이너가 시작될 때 javax.servlet.http.httpServletRequest인터페이스를

구현한 객체를 생성했으며 jsp페이지에서 객체를 request라는 이름으로 사용하면 됩니다.

--%>

<center>

<h3>HttpServletRequest로 정보 가져오기</h3>

</center>


요청 클라이언트 IP :<%= request.getRemoteAddr() %><br>

클라이언트가 요청한 정보의 길이 :<%= request.getContentLength() %><br> 

클라이언트가 요청한 프로토콜 :<%= request.getProtocol() %><br>

클라이언트가 요청한 Method :<%= request.getMethod() %><br>

클라이언트가 요청한 URI :<%= request.getRequestURI() %><br> 

클라이언트가 요청한 ContextPath :<%= request.getContextPath() %><br> 

클라이언트가 요청한 ServerName :<%= request.getServerName() %><br> 

클라이언트가 요청한 ServerPort :<%= request.getServerPort() %><br> 

<% 

out.print("클라이언트가 요청한 http 헤더 정보들...<br> ");

Enumeration<String> em = request.getHeaderNames();

while(em.hasMoreElements()){

String name = em.nextElement();

out.println(name + " : ");

Enumeration<String> values = request.getHeaders(name);


while(values.hasMoreElements()){

out.println(values.nextElement() +","); 

out.println("<br>");

}

%>

</body>

</html>


Servlet로 알아보기

package com.web3.login;

import java.io.IOException;

import java.io.PrintWriter;

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("/request")

public class requestInfo extends HttpServlet {

private static final long serialVersionUID = 1L;


public requestInfo() {

super();

}


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

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

out.print("<html>");

out.print("<head><title>HttpServletRequest</title></head>");

out.print("<body>");

out.print("<center><h3>HttpServletRequest로 정보 가져오기</h3></center><hr>");

out.print("요청 클라이언트 IP :" + request.getRemoteAddr() + "<br>");

out.print("클라이언트가 요청한 정보의 길이 :" + request.getContentLength() + "<br>");

out.print("클라이언트가 요청한 프로토콜 :" + request.getProtocol() + "<br>");

out.print("클라이언트가 요청한 Method :" + request.getMethod() + "<br>");

out.print("클라이언트가 요청한 URI :" + request.getRequestURI() + "<br>");

out.print("클라이언트가 요청한 ContextPath :" + request.getContextPath() + "<br>");

out.print("클라이언트가 요청한 ServerName :" + request.getServerName() + "<br>");

out.print("클라이언트가 요청한 ServerPort :" + request.getServerPort() + "<br>");

out.print("<hr3>");

out.print("클라이언트가 요청한 http 헤더 정보들...<br> :");

Enumeration<String> em = request.getHeaderNames();

while(em.hasMoreElements()){

String name = em.nextElement();

out.println(name + " : ");

Enumeration<String> values = request.getHeaders(name);


while(values.hasMoreElements()){

out.println(values.nextElement() + ", ");

}

out.println("<br>");

}

out.print("</body></html>");

}

}


결과 화면



JSP 한글이 깨질때!!!


Servers ==> server.xml을 수정한다!!!!




<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8000" protocol="HTTP/1.1" redirectPort="8443"/>


<Connector에 ==> URIEncoding="utf-8" 문구를 추가해준다!!!!

loginForm.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>로그인(form)</title>

<style>

table, tr, td {

margin:1px;

padding:1px;

border:1px solid gray;

}

</style>

</head>

<body>

<form action="login" method="post">

<table>

<tr>

<td colspan="2">로그인</td>

</tr>

<tr>

<td>아이디</td>

<td><input type="text" name="userid" id="userid"></td>

</tr>

<tr>

<td>비밀번호</td>

<td><input type="password" name="userpwd" id="userpwd"></td>

</tr>

<tr>

<td colspan="2">

<input type="submit" value="로그인">

<input type="reset" value="취소">

</td>

</tr>

</table>

</form>

</body>

</html>



---------------------------------------------------------------------------------------------------


LoginServlet.java   ->  (서블릿...)

package com.web3.login;


import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Servlet implementation class LoginServlet

 */

@WebServlet("/login")

public class LoginServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


    public LoginServlet() {

        super();

    }


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//요청 처리후 응답을 위한 마임타임과 문자셋 설정

response.setContentType("text/html;charset=utf-8");

//응답 결과를 클라이언트에게 보내기 위해서 문자스트림을 생성

PrintWriter out = response.getWriter();

//파라미터 받아오기

String uid = request.getParameter("userid");

String pwd = request.getParameter("userpwd");

//DB에 Access해서 userid, password 일치 여부를 체크해야함....

if(uid.equals("admin") && pwd.equals("a1234")){

response.sendRedirect("./loginSuccess.jsp");

} else {

response.sendRedirect("./loginFail.jsp");

}


}


}



---------------------------------------------------------------------------------------------------


loginSuccess.jsp   ->  (성공 페이지)

<%@ page contentType="text/html; charset=utf-8" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>로그인 성공!!</title>

<style type="text/css">

body {

color:blue;

}

</style>

</head>

<body>

로그인 성공했습니다.<br>

님 환영합니다!!<br>

</body>

</html>



---------------------------------------------------------------------------------------------------


loginFail.jsp   ->  (실패 페이지)

<%@ page contentType="text/html; charset=utf-8" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>로그인 실패!!</title>

<style type="text/css">

body {

color:red;

}

</style>

</head>

<body>

로그인 실패했습니다.<br>

아이디가 존재하지 않거나, 비밀번호 오류입니다.<br>

</body>

</html>


+ Recent posts