멀티캠퍼스 백엔드 과정 31일차[7월 14일] -jsp내장객체

GoldenDusk·2023년 7월 17일
0

내장 객체

01. 내장 객체란

  • request : 요청 객체 서버로의 요청[요청헤더: get/post]
  • response : 사용자의 데이터 값을 저장하는 객체, 응답(결과값을 돌려줘야 ), 응답헤더:HTTP/1.1 Set-Cookie
  • out : 출력 객체
  • application : 웹 컨텐츠가 돌아가는 환경에 대한 모든 정도가 들어있는 객체
  • exception : java.lang에서 옴

++ session, page, pageContext, config

1. 내장 객체의 특징

  • 컨테이너가 미리 선언해놓은 참조 변수를 이용해 사용
  • 별도의 객체 생성 없이 각 내장 객체의 메서드를 사용할 수 있음
  • JSP 문서 안의 <% 스크립틀릿 %><%= 표현식 %>에서만 사용할 수 있음
  • <%! 선언부 %>에서는 즉시 사용은 불가능하고, 매개변수로 전달받아 사용할 수는 있음
  • 내장 객체는 주요 기능이라 미리 만들어 둠

2. 내장 객체의 종류

내장 객체타입설명
Requestjavax.servlet.http. HttpServletRequest클라이언트의 요청 정보를 저장
Responsejavax.servlet.http. HttpServletResponse클라이언트의 요청에 대 응답 정보를 저장
Outjavax.servlet.jsp.JspWriterJSP 페이지에 출력 내용을 담는 출력 스트림
Sessionjavax.servlet.http.HttpSession웹 브라우저 정보를 유지하기 위한 세션 정보를 저장
Applicationjavax.servlet.ServletContext웹 애플리케이션 관련 컨텍스트 정보를 저장
pageContextjavax.servlet.jsp.PageContextJSP 페이지에 대한 정보를 저장
Pagejava.lang.ObjectJSP 페이지를 구현한 자바 클래스의 스턴스
Configjavax.servlet.ServletConfigJSP 페이지에 대 설정 정보를 저장
exceptionjava.lang.Throwable예외가 발생한 경우에 사용

request 객체

request 객체란

  • request 내장 객체는 JSP에서 가장 많이 사용되는 객체로, 클라이언트(주로 웹
    브라우저)가 전송한 요청 정보를 담고 있는 객체
    - 클라이언트와 서버에 대한 정보 읽기
    - 클라이언트가 전송한 요청 매개변수에 대한 정보 읽기(쓰기안됨 )
    - 요청 헤더 및 쿠키 정보 읽기
    - 보관용 패키지

클라이언트와 서버의 환경정보 읽기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>클라이언트와 서버의 환경 정보 읽기</title>
</head>
<body>
 <a href="./RequestWebInfo.jsp?eng=Hello&han=안녕"> GET 방식 전송</a>
 <br />
 <from action="RequestWebInfo.jsp" method="get">
 영어 : <input type="text" name="eng" value="Bye" /><br/>
 한글 : <input type="text" name="han" value="잘가!"/><br/>
 <input type="submit" value="POST 방식 전송"/>
 </from>
 <h2>요청 헤더 정보 읽기</h2>
 <a href="RequestHeader.jsp">요청헤더 읽기</a>
 <!-- HTTP프로토콜은 부가적인 정보를 담고 있다. 웹 브라우저의 종류나 -->
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestWebInfo : 클라이언트 서버 환경 읽기 기능 살펴보기</title>
</head>
<body>
 <h2>클라이언트와 서버 환경 읽기 기능 살펴보기</h2>
 <ul>
 <li>데이터 전송 방식 : <%= request.getMethod() %></li>
 <li>URL : <%= request.getRequestURL() %></li>
 <li>URI : <%= request.getRequestURI() %></li>
 <li>프로토콜 : <%= request.getProtocol() %></li>
 <li>서버명 : <%= request.getServerName() %></li>
 <li>서버포트 : <%= request.getServerPort() %></li>
 <li>클라이언트 IP 주소 : <%= request.getRemoteHost() %></li>
 <li>쿼리 스트링 : <%= request.getQueryString() %></li>
 <li>전송된 값 1 : <%= request.getParameter("eng") %></li>
 <li>전송된 값 2: <%= request.getParameter("han") %></li>
 </ul>
</body>
</html>
<%@ page import="java.util.Enumeration" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestHeader : HTTP 요청 헤더의 정보 읽기</title>
</head>
<body>
<h2>요청 헤더 정보 출력하기</h2> 
<%
	Enumeration headers = request.getHeaderNames();
	while(headers.hasMoreElements()){
		String headerName = (String)headers.nextElement();
		String headerValue = request.getHeader(headerName);
		out.print("헤더명:"+headerName+","+"값 :"+headerValue + "<br/>");	
	}
%>
</body>
</html>

sendRedirect()로 페이지 이동하기

  • 클라이언트가 보낸 request 객체를 전달한 경로를 getRequestDispatcher() 메소드로 지정한다.
  • forward() 메소드를 통해 미리 지정한 경로("ResponseMain.jsp?loginErr=1")로, request, response 값을 전달한다.
request.getRequestDispatcher("ResponseMain.jsp?loginErr=1").forward(request, response);
  • request는 response 하기 전에 서블릿에서 여러 번 재활용 가능

  • 메인홈
**<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Response 객체 : 로그인 폼</title>
</head>
<body>
<h2>1. 로그인 폼</h2>
<% 
	String loginErr = request.getParameter("loginErr");
	if(loginErr != null) out.print("로그인 실패");
%>
<form action ="./ResponseProcess.jsp" method="post">
아이디 : <input type="text" name="user_id">
패스워드 : <input type="password" name="user_pwd">
<input type="submit" value="로그인">
</form>

</body>
</html>**
  • 중간 페이지[ResponseProcess.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login 인증 페이지</title>
</head>
<body>
<% 
	String id = request.getParameter("user_id");
	String pwd = request.getParameter("user_pwd");
	if(id.equalsIgnoreCase("multi")&&pwd.equalsIgnoreCase("1234")){
		response.sendRedirect("ResponseWelcome.jsp");
	}
	else{
		request.getRequestDispatcher("ResponseMain.jsp?loginErr=1").forward(request, response);
	}
%>

</body>
</html>
  • 로그인 완료 페이지[ResponseWelcome.jsp]
**<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
로그인성공
</body>
</html>**

회원가입 페이지

1. member_input
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
<h2> 회원가입 페이지</h2>
<form action="./member_process.jsp"method="post">
이름 : <input type="text" name="name" size=10> <br/>
아이디 : <input type="text" name="user_id" size=10> <br/>
비밀번호 : <input type="password" name="user_pwd" size=10> <br/>
성별 :
<input type="radio" name="gender" value="man"><input type="radio" name="gender" value="woman" checked="checked" ><br/>

사용자 관심 분야 : <br/>
<input type="checkbox" name="collect" value="politics"> 정치 <br/>
<input type="checkbox" name="collect" value="economy"> 경제 <br/>
<input type="checkbox" name="collect" value="social"> 사회 <br/>
<input type="checkbox" name="collect" value="culture"> 문화 <br/>

자기소개 <br/>
<input type="textarea" name="introduce" col="50" row="50"> <br/>
<input type="submit" value="회원가입">
</form>
</body>
</html>

2. member_process
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%! 
String name;
String id, pwd, gender, introduce;
String[] collect;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 처리</title>
</head>
</html>
<%
    request.setCharacterEncoding("UTF-8");
	name = request.getParameter("name");
	id = request.getParameter("user_id");
	pwd = request.getParameter("user_pwd");
	gender = request.getParameter("gender");
	collect = request.getParameterValues("collect");
	String col="";
	if(collect != null){
		for(int i=0; i<collect.length; i++){
			col += collect[i] + " ";	
		}
	}
	introduce = request.getParameter("introduce").replace("\r\n", "<br>");
	response.sendRedirect("member_ok.jsp?name=" + name + "&user_id=" + id + "&user_pwd=" + pwd + "&gender=" + gender + "&collect=" + col + "&introduce=" + introduce);
	%>

3. member_ok
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력</title>
</head>
<body>
이름 : <%= request.getParameter("name") %> <br/>
아이디 : <%= request.getParameter("user_id") %> <br/>
비밀번호 : <%= request.getParameter("user_pwd") %> <br/>
성별 : <%= request.getParameter("gender") %> <br/>
사용자 관심 분야 : <%= request.getParameter("collect") %> <br/>
자기 소개 : <%= request.getParameter("introduce") %> 
</body>
</html>

-- response.sendRedirect("member_ok.jsp?name=" + name + "&user_id=" + id + "&user_pwd=" + pwd + "&gender=" + gender + "&collect=" + col + "&introduce=" + introduce);
이 부분은 몰라서 찾아봤습니다.

JSP에서는 페이지를 이동하는데 제공하는 2가지 방식

  • response 객체에서 제공하는 sendRedirect()
    • 새로운 페이지로 이동할 때 새로운 r, r 할당 받는다. 페이지 이동경로 x
  • request객체에서 제공하는 forward()
    • 기존의 사용하던 request, response 다음페이지로 전달하면서 재사용(저장되어 있는 정보들을 다음페이지로 전달)
    • request, response를 공부

강사님 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 페이지</title>
</head>
<body>
<!-- JSP에서는 페이지를 이동하는데 제공하는 두가지  방식

response객체에서 제공하는 sendRedirect() : 새로운 페이지로 이동할때 새로운 r,r 할당받는다.  페이지 이동경로 x
request객체에서 제공하는 forward(): 기존의 사용하던 request, response 다음페이지로 전달하면서 재사용(저장되 있는 정보들을 다음페이지로 전달) 페이지 이동경로 o
                                               request, response를 공유  -->
  
<h2>회원가입</h2>
<hr>
<form method="post" action="member_process.jsp">
   이 름:  <input type="text" name="user_name"/><br/>
   아이디:  <input type="text" name="user_id"/><br/>
   비밀번호:  <input type="password" name="user_pwd"/><br/>
   성 별:  <input type="radio" name="gender" value="man">남자 <input type="radio" name="gender" value="woman">여자<br/>
   관심분야:<br/>
         <input type="checkbox" name="favo" value="경제">경제<br/>
         <input type="checkbox" name="favo" value="정치">정치<br/>
         <input type="checkbox" name="favo" value="사회">사회<br/>
         <input type="checkbox" name="favo" value="문화">문화<br/> 
   자기소개:<br/> <input type="textarea" name="self">
   <input type="submit" value="회원가입"/>
</form>

<% 
  String id = request.getParameter("user_id");
  out.print("member_ok.jsp에서 request객체를 통해 전달받은:"+ id);
%>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String user_id = request.getParameter("user_id");
    String user_pwd = request.getParameter("user_pwd");
    
    //데이터베이스와 연동해서 각 정보를 DB에 저장하는 처리 
    request.getRequestDispatcher("member_ok.jsp").forward(request, response);

%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
   request.setCharacterEncoding("UTF-8");
   String name = request.getParameter("user_name");
   String id = request.getParameter("user_id");
   String pwd = request.getParameter("user_pwd");
   String gender = request.getParameter("gender");
   String[] favo = request.getParameterValues("favo");   
   String self = request.getParameter("self").replace("\n\r","<br/>");
%>

<%= "각 변수 출력 처리" %>
<%= id %>
<%= pwd %>

<%  
response.sendRedirect("member_input.jsp");
//request.getRequestDispatcher("member_input.jsp").forward(request, response);
%>

로그인 정보가 없습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String uid = request.getParameter("id");
	if(uid == null){
		out.print("로그인 정보가 없습니다.");
	}
	else{
		session.setAttribute("id", uid);
		response.sendRedirect("main.jsp");
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form>
아이디 : <input type="text" name="id"/><br/>
비 번 : <input type="password" name="pwd">><br/>
<input type="submit" value="로그인" /><br/>
</form>
</body>
</html>

application

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>application 객체로 웹어플리케이션 물리적 경로 정보 읽기</title>
</head>
<body>
<%= application.getContextPath() %>
<%= application.getRealPath("/02ImplicitObject") %>
<%!
public String userImplicitObject(){
	return this.getServletContext().getRealPath("/02ImplicitObject");
}

public String userImplicitObject(ServletContext app){
	return app.getRealPath("/02ImplicitObject");
}

%>
<ul>
	<li> this 사용 : <%=userImplicitObject()%></li>
	<li> 내장 객체를 인수로 전달 : <%=userImplicitObject() %></li>
</ul>

</body>
</html>
  • web.xml
<context-param>
	<param-name>INIT_PARAM</param-name>
	<param-value>web.xml에 저장한 초기화 매개변수</param-value>
	
	</context-param>

회고

이번주 한주도 다 지났다... tomcat은 학교에서 썼을 때 교수님이 코드를 그냥 복붙하고 서버 돌려보는 정도로 끝나서 그냥 맛보기였는데 강의 들으면서 흩어진 지식들이 모이는 기분이라 좋다...

profile
내 지식을 기록하여, 다른 사람들과 공유하여 함께 발전하는 사람이 되고 싶다. gitbook에도 정리중 ~

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

정말 잘 읽었습니다, 고맙습니다!

답글 달기