이번 페이지의 기본적인 틀에 대해서 설명해드리도록 하겠습니다.
forward의 사용에 대해서
문제 <입력한 id값에 따라 페이지가 달라지도록>- id를 입력햇는데, 'admin'또는 'administrator'이 입력되면 ==> admin.jsp페이지로 이동한다- java, servlet, jsp중 하나 입력되면 ==> generaluser.jsp로 이동
- 실행을 위해서 id값을 입력해야한다. url에 직접 ?id=admin
(1) forward1.jsp 에서 admin.jsp 또는 generaluser.jsp가 출력
(2) ShareServlet.java에서 admin.jsp 또는 generaluser.jsp가 출력
그렇다면, 각각의 코드에 대해서 알아보겠습니다. (코드를 통해서 request와 foward에 대해 알아보도록 할게요)
우선, 전송을 받앗을 경우에 보여지는 출력화면을 만들려고 합니다.
첫번째로는 ("java") 이거나, ("servlet") 이거나,("jsp") 일때 출력되는 admin.jsp코드입니다.
받는 공유값 (=getAttribute)는 무조건 오브젝트형이기때문에 형변환이 필수라고 햇죠?
또한, 자바코드안에서 태그를 쓰기위해 " "를 감싸줘야하는것도 아시죠?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!-- admin.jsp -->
<body>
<h1>
우리 사이트 관리자 화면입니다.
<%=request.getParameter("id")%>관리자님 환영합니다.
</h1>
<h2> 게시물을 출력합니다</h2> <!-- 배열의 자료형은 오브젝트타입. 따라서 String으로 형변환 -->
<% String[] board = (String[])request.getAttribute("boardArray");
for(int i=0; i<board.length; i++){
out.println("<h3>"+board[i]+"</h3>"); //낱개로 요소출력
}
%>
</body>
|
다음은 generaluser.jsp 코드입니다. (admin이거나 administrator)
1
2
3
4
5
6
7
8
|
<!--generaluser.jsp-->
</head>
<body>
우리 사이트 관리자 화면입니다.
<%=request.getParameter("id")%>회원님 환영합니다
</body>
</html>
|
그렇다면, forward1.jsp 작성해서 admin.jsp 또는 generaluser.jsp로 전송하도록 한다.
그리고, forward1.jsp에서 url을 통해 id의 파라미터를 입력받을것이다.
따라서 변수에 전송받은 id값을 저장하고, admin과 generaluser로 가기위한 조건들을 수행한다.
그리고, 배열의 값을 setAttribute를 통해 임의의변수안에 저장하고 전송한다. (request를 통한 공유)
마지막으로는, 빈칸이 아니라면, 경로를 출력하도록 작성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<body>
<%
String path = "";
String id = request.getParameter("id");
if(id.equals("admin") || id.equals("administrator")){
path= "admin.jsp";
}
else if(id.equals("java") || id.equals("servlet") || id.equals("jsp") ){
path="generaluser.jsp";
}
else {
out.print("<h1> 해당 사용자는 우리 사이트를 ");
out.print("이용하실 수 없습니다.</h1>");
}
String [] board = {"1:제목1:작성자1:1234:0, 2:제목2:작성자2:1234:11, 3:제목3:작성자3:1234:5"};
request.setAttribute("boardArray", board);
if(path!= ""){
%>
<jsp:forward page="<%=path %>"/>
<% } %>
</body>
|
이와 반대로 ShareServlet.java 작성해서 admin.jsp 또는 generaluser.jsp로 전송하도록 한다.
※ 이때, 하나하나 프로토콜 전송에 대한 웹 구현 복잡하기때문에 = 대신 tomcat 서버가 내부 클래스에 저장된 걸로 처리한다.( tomcat 서버의 내부 클래스 객체 생성한다. (요청을 통해서))
※ 다른 JSP를 호출하기위해 사용되는 requestdispatcher는 필시 dispatcher객체를 써야한다.
// C c1= new C();
// I i1= new I();
//인터페이스는 추상적이기때문에 객체생성을 할 수 없다. 인터페이스를 상속받은 클래스는 반드시 override를 해야한다. 여기서 new: 클래스 변수와 메서드 구현 메모리 복사한다.
최종정리로는,
==>Servlet에서는 requestdispatcher => setAttribute => dispatcher .forward(requset, response)
==>cpnsole에서는 setAttribute => dispatcher .forward(requset, response)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class ForwardServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) //변수이름결정되는 매개변수
throws ServletException, IOException {
String id = request.getParameter("id");
String path="";
if(id.equals("admin") || id.equals("administrator")){
path= "/day3/forward/admin.jsp"; //경로를 꼭 이렇게 적어주지않으면 서블릿에서 jsp로 이동할 수 없다.
}
else if(id.equals("java") || id.equals("servlet") || id.equals("jsp") ){
path="/day3/forward/generaluser.jsp";
}
else {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<h1> 해당 사용자는 우리 사이트를 ");
out.print("이용하실 수 없습니다.</h1>");
//path="/user.html";
}
RequestDispatcher dispatcher = request.getRequestDispatcher(path);
String [] board = {"1:제목1:작성자1:1234:0", "2:제목2:작성자2:1234:11"," 3:제목3:작성자3:1234:5"};
request.setAttribute("boardArray", board);
dispatcher.forward(request, response);
}
}
|
'WEB 기초 > Jsp' 카테고리의 다른 글
[JSP] 14. 도서구매 정보입력창 문제 (0) | 2018.04.23 |
---|---|
[JSP] 13. 표준 액션 태그 (java Bean & java Property) (0) | 2018.04.23 |
[JSP] 11. application 객체 (0) | 2018.04.23 |
[JSP] 10. include객체 (0) | 2018.04.23 |
[JSP] 9. out & request객체 (0) | 2018.04.23 |