• Home
  • About
    • on Weekend photo

      on Weekend

      𝙎𝙩𝙪𝙙𝙮𝙞𝙣𝙜

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • 필사
  • Projects

인프런 - 실전 JSP 4-1

03 Jan 2021

수강 코스

  • 강의 소리가 너무 작아서 크롬 확장 프로그램 Volumn Control을 사용함.

Day 4-1

  • 코드가 길고, 흐름이 나뉘어 게시글을 두 개로 분리

11. JSP 내장객체

  • request, response 외 jsp에서 기본적으로 제공하는 객체에 대해서 학습

11.1. config 객체

  • 일종의 환경설정 파일인 web.xml에서 getinitParameter()을 통해 JSP에 파라미터를 공유하는 형식.

  • web.xml

<init-param>
  <param-name>adminId</param-name>
  <param-value>admin</param-value>
</init-param>
<init-param>
  <param-name>adminPw</param-name>
  <param-value>1234</param-value>
</init-param>
  • jsp파일
<body>

		<%!
		String adminId;
		String adminPw;
		%>

		<%
		adminId = config.getInitParameter("adminId");
		adminPw = config.getInitParameter("adminPw");
		%>

		<p>adminId : <%= adminId %></p>
		<p>adminPw : <%= adminPw %></p>

</body>
  • getInitParameter() : 초기화된 객체를 가져옴

11.2. applicatin 객체

  • 하나의 서블릿이 아니라 어플리케이션 전체에 파라미터를 넘겨주어서 어떤 서블릿이든간에 해당 파라미터에 접근할 수 있도록 한다.
  • web.xml에선 context-param 사용, jsp파일에선 application.getInitParameter("{ParameterName}") 메소드로 받아온다.
  • 가령 어떤 서블릿에서도 이미지를 받아올 수 있도록, 이미지 폴더를 imgDir로 지정하는 형식. 혹은 real server와 dev server를 구분해서 사용할 때, testServerId를 받아 context param으로 사용
  • application.setAttribute({key},{value}) 로 한 jsp파일에서 저장하고, 다른 jsp파일에서 getAtrribute({key})를 가져올 수 있다. (단, String으로 변환하여 가져와야함.)

11.3. out 객체

  • out.print를 이용해 html 코딩하듯이 출력해줄 수 있다.

11.4. exception 객체

  • 은근 많이 쓰인다. exception 발생 시 에러처리를 해주는 객체로,
  • <%@ page errorPage="errorPage.jsp"%> 요런 식으로 해당 jsp파일 내에서 exception 발생 시 어떻게 대처할 것인지 다룰 수 있음
  • exception 페이지로 활용하기 위해서는 페이지 태그를 이용해, <%@ page isErrorPage=true%> 요런 식으로 넣어주면 된다. 디폴트 false
<%
  response.setStatus(200);
  String msg = exception.getMessage();
%>
<h1> error message : <%= msg %> </h1>
  • 요런 식으로 exception을 잡고 찍어줄 수 있음

12. Servlet 데이터 공유

12.1. servlet parameter

  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>servletDataTest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
  	<servlet-name>servletEx</servlet-name>
  	<servlet-class>com.servlet.ServletEx</servlet-class>
  	<init-param>
  		<param-name>adminId</param-name>
  		<param-value>admin</param-value>
  	</init-param>
  	<init-param>
  		<param-name>adminPw</param-name>
  		<param-value>1234</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>servletEx</servlet-name>
  	<url-pattern>/se</url-pattern>
  </servlet-mapping>
</web-app>
  • servletEx.java
package com.servlet;

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;

public class ServletEx extends HttpServlet {
	private static final long serialVersionUID = 1L;


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

		String adminId = getServletConfig().getInitParameter("adminId");
		String adminPw = getServletConfig().getInitParameter("adminPw");

		PrintWriter out = response.getWriter();
		out.print("<p>adminId : " + adminId + "</p>");
		out.print("<p>adminPw : " + adminPw + "</p>");


	}

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

		doGet(request, response);
	}

}
  • 위 코드처럼 web.xml에서 설정한 파라미터를 받아 servletEx.java servlet에서 사용해준다.

12.2. context parameter

  • context parameter로 imgDir, testServerIP 넣고 servlet에서 String imgDir = getServletContext().getInitParameter("imgDir") 로 받아준다.

12.3. context attribute

  • setAttribute(), getAttribute() 해서 context에서 받아온다.

  • JSP와 서블릿이 매우 매우 매우 흡사하고 JSP가 더 큰 범주라고 생각되는데, 왜 서블릿도 같이 쓰는건지?
  • 둘의 역할이 다르기 때문이다. 기능은 동일함. 관련 게시글
Servlet
  • Servlet : 웹 기반의 요청에 대한 동적 처리가 가능한, 서버단에서 돌아가는 자바 프로그램.
  • 자바 코드 안에 HTML 코드
  • data processing에 좋음. 가령 DB와의 통신, 비즈니스 로직 호출 등.
  • 수정된 경우 자바 코드를 컴파일한 후 동적 페이지 처리, 전체 코드 업데이트 후 다시 컴파일->재배포 해야함.
JSP
  • JSP : 자바를 기반으로 하는 서버 사이트 스크립트 언어.
  • HTML 코드 안에 자바 코드
  • 서블릿 보완, 확장.
  • 수정된 경우 재배포할 필요 없이 was에서 해준다.

  • JSP만을 이용해 동적 페이지를 생성할 수도 있다. (Client <=> JSP <=> (java beans) <=> DB) 요런 구조.
    • JSP에서 이제 막 view를 보여주고, 비즈니스 로직도 처리해준다.
    • java beans는 DB와의 연결로 데이터를 주고받고 해준다.
  • 그럼 왜 그렇게 안쓰냐? html스러운 jsp 페이지에서 보여주기도 해야하고 비즈니스 로직도 처리해야하고.. 규모가 작을 때는 버틸 수 있겠지만, 이제 나중에는 코드가 매우 복잡해질 것이다. 상상해보면 html 코드가 쭉 있고 그 안에 로직을 처리하는 자바 코드가 들어와서 request를 받고 보여주고 웅성웅성…
  • 이를 해결하기 위해 MVC 아키텍처가 나온다. 뷰와 비즈니스 로직, DB와의 연결을 담당하는 놈들이 각자 따로따로다.
    • Model : DB연결 담당 Java Beans
    • Controller : 다른 자바 클래스에 데이터 넘겨주고 받고 모델인 자바빈즈한테 DB 데이터를 받아오고 요청하고.. 이 일은 서블릿이 한다. (서블릿은 data processing에 좋으니까.)
    • View : 보여주는건 이제 jsp가 담당한다. html이 중심이 되니까.


jspbackend Share Tweet +1