본문 바로가기

Spring/Model1 _2(MVC)

0923 JSP - web.xml 배포 서술자 , EL 표현식

728x90
반응형

Contents

     

     

     

    클라이언트
    페이지요청 웹서버 WAS DB
      정적 데이터 처리 동적 데이터 처리  
      html,css,js,img... 서블릿(컨테이너)생성
    주소(url) - 코드 매핑 (연결)

     
        service 메서드 호출   
       
    doGet() / doPOST() 호출 
    (방식에 따라서)


     
        동작 처리 후 응답 정보를 만들어서 리턴   

     

    MyServlet.java
    package com.itwillbs.servlet;
    
    import java.io.IOException;
    
    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("/itwill")
    public class MyServlet extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest request, 
    			HttpServletResponse response) throws ServletException, IOException {
    		System.out.println(" doGet() 메서드 호출 ");
    		System.out.println(" GET 방식으로 주소 호출하면 실행되는 메서드 ");
    		
    		response.getWriter().append("<h1>Hello!</h1>");
    		
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest request, 
    			HttpServletResponse response) throws ServletException, IOException {
    		System.out.println(" doPost() 메서드 호출 ");
    		System.out.println(" Post 방식으로 주소 호출하면 실행되는 메서드 ");
    
    	}
    
    		
    }

     

     

     

    ExServlet1.java

     

    package com.itwillbs.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //해당 클래스 코드가 생긴다 
    //class HttpServlet{
    //	
    //}
    
    //서블릿 2.3 이전 
    	
    	public class ExServlet1 extends HttpServlet{
    
    		
    		// alt shift S + V ( 오버라이딩 메서드 )
    		
    		@Override
    		protected void doGet(HttpServletRequest request, 
    				HttpServletResponse response) throws ServletException, IOException {
    
    		}
    
    		@Override
    		protected void doPost(HttpServletRequest request, 
    				HttpServletResponse response) throws ServletException, IOException {
    
    		}
    		
    		
    	}

     

     

     

     

    ✔️ web.xml 


     

    👨🏻‍💻 배포서술자 :

    배포 서술자(DD, Deployment Descriptor) 는 Java EE 스펙으로 웹 애플리케이션의 기본적인 설정을 위해 작성하는 파일로, 보통은 WEB-INF/web.xml 파일을 말한다.

    배포 서술자는 web.xml 이외에도 EJB를 위한 ejb-jar.xml, 웹서비스를 위한 webservices.xml 등이 있으며, JSP와 서블릿만으로 구성된 경우에는 web.xml 파일만 사용하면 된다고 한다.

     

     

    프로젝트 실행할 때 가장 먼저 호출
    해당 파일에 오류가 생기면 표시가 잘 안남 -> 그 결과로 톰캣이 실행불가

     

     

    web.xml 의 이점

    1. 작성한 소스코드를 수정하지 않고도 웹 어플리케이션을 '커스터마이징' 할 수 있다.

    2. 이미 테스트 된 소스코드의 수정을 최소화 한다.

    3. 소스코드가 없어도 수정이 가능하다.

    4. 재 컴파일 하지 않고 서버의 자원을 변경할 수 있다.

    5. 접근제한, 보안, 오류페이지를 설정하고 초기화 값의 구성 등을 할 수 있다.

     

    web.xml

    <!--  서블릿 사용가능하도록 매핑 -->

    <servlet>
     <servlet-name>ExServlet1</servlet-name>
     <servlet-class>com.itwillbs.servlet.ExServlet1</servlet-class>
    </servlet>
      
      <servlet-mapping>
      <servlet-name>ExServlet1</servlet-name>
      <url-pattern>/ex1</url-pattern>
      </servlet-mapping>
    </web-app>

     

    매핑 pattern 주소에서,

    /ex1 대신에  *.ex1 을 넣으면, ex1로 끝나는 여러개의 주소를 제어 할 수 있다. 

     

     

    😰주의! 

     

    web.xml에 써주거나,

    서블릿.java에서 @WebServlet("/ex2") 해주거나 둘 중 하나만!! 

     

    둘다 쓰면 에러남. 

    => 하지만 매핑이 다른 경우 사용 가능!! (권장하지는 않음) 

     

     

     


    ExServlet.java

    f11 으로 동작시키는 것 대신에, 서버에 주소를 쳐서 이동시켜보기

    http://localhost:8088/JSP/ex1\

     

     

    주석으로 //http://localhost:8088/JSP/ex1 달아놓고, ctrl 누른 상태에서 마우스를 대면 링크창으로 변한다.

     

     

     

     

     

     

    ExSerlvet3.java
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    
    
    
    
    public class ExServlet3 extends HttpServlet {
    	int cnt;
    	// http://localhost:8088/JSP/ex3
    	// http://localhost:8088/JSP/아이티윌.ex3
    	// http://localhost:8088/JSP/test.ex3
    	
    	@Override
    	public void init() throws ServletException {
    		System.out.println(" 서블릿 최초 생성 할 때 실행! ");
    		cnt = 0;
    		System.out.println(" 서블릿 객체를 초기화! cnt = "+cnt);
    	
    	}
    	//doGet() 오버라이딩 + web.xml 매핑 (/ex3)
    	@Override
    	protected void doGet(HttpServletRequest request, 
    			HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("ExServlet3_doGet() 호출! ");
    		System.out.println("cnt : "+(++cnt));
    		
    		//response.getWriter().append("cnt : " + (cnt));
    		
    		response.setContentType("text/html; charset=utf-8");
    		PrintWriter out = response.getWriter();
    		
    		out.println(" <html>" );
    		out.println(" <head></head> ");
    		out.println(" <body> " );
    		out.println(" <h1> cnt : " +cnt + "</h1> ");
    		out.println(" </body> ");
    		out.println(" </html>" );
    		
    		out.close();
    	}
    
    	@Override
    	public void destroy() {
    		System.out.println("서블릿 소멸될 때 실행 ");
    		
    	}
    
    
    
    	@Override
    	protected void doPost(HttpServletRequest request, 
    			HttpServletResponse response) throws ServletException, IOException {
    
    	}
    
    
    	
    	
    }

     

    📗 JSP -Servlet
      

    => .jsp 파일은 .java파일(서블릿)으로 변경 후 .class파일로컴파일 후 실행 
      


    JSP -Servlet


    jsp - 스크립틀릿  <% %> servlet - service() 안에 구현
    jsp - 표현식        <%=name%> servlet - service() 안에 구현 / out.println(name)
    jsp - 선언문        <%! %> servlet - 서블릿 클래스의 멤버형태로 변경 
    jsp - html 태그        servlet - service() 안에 구현 / out.write()
    jsp - 디렉티브    <%@ %>  servlet - 객체 생성 시 참고 

     

     

     

    📗* EL (Expression Language) 표현식 

     

    Expression Language,

    표현언어는 값을 표현하는데 사용되는 새로운 script 언어로 jsp의 기본문법을 보완하는 역할을 한다.
    보통 jsp에 쓰이는 스크립트릿 등을 줄여 영역값을 일일이 받아 출력하는 수고로움을 덜 수 있으며 코드도 간결해진다. 
    기본적으로 스크립트릿 <% %> 안이 아닌 HTML 영역에 ${ }을 사용한다.

    => out.println() / <%= %> 사용해서 출력 (X)
    ${ } 형태로 변경   

     

     

     

     

     

    톰캣 라이브러리 설치


     

    필수임

     

    https://tomcat.apache.org/download-taglibs.cgi

     

    Apache Tomcat® - Apache Taglibs Downloads

    Welcome to the Apache Taglibs download page. This page provides download links for obtaining the latest version of the Apache Standard Taglib, as well as links to the archives of older releases. You must verify the integrity of the downloaded files. We pro

    tomcat.apache.org

     

     

    taglibs-standard-impl-1.2.5.jar

    taglibs-standard-impl-1.2.5.jar
    0.20MB

    taglibs-standard-spec-1.2.5.jar

    taglibs-standard-jstlel-1.2.5.jar
    0.16MB

    taglibs-standard-jstlel-1.2.5.jar 

    taglibs-standard-spec-1.2.5.jar
    0.04MB

     

     


    ${변수명} <%=변수명%> 동일한 의미
    ${객체명.변수} ${객체명['변수명']}

    => private 변수에 직접 접근 가능 

    💡 사실은 직접 접근하는게 아니다. (해당 set 메서드 / get 메서드 호출하는 것) 

     

    ${ 연산식 } 


    📗 EL 표현식 내장 객체 

     

    객체명 내용
    ${pageScope / requestScope / sessionScope / applicationScope } 각 각의 영역에 저장 / 공유 (jsp 내장 객체랑 공유 가능) 
    ${param / paramValues  } 파라메터 정보 처리 
    ${header / headerValues  } 헤더 정보 처리 
    ${Cookie } JSP 쿠키 
    ${initParam } 초기화 정보 
    ${pageContext } 페이지 정보

     

     

     

     

     

    https://cocoon1787.tistory.com/733

     

    [개발상식] MVC 패턴이란? (Model-View-Controller)

    🚀 이번 포스팅은 개발자 면접에서 자주 나오는 질문 중의 하나인 "MVC패턴"에 대한 내용입니다. MVC패턴의 의미와 사용해야 하는 이유, 사용 예시 등등에 대해 알아보겠습니다. 💡 MVC 패턴이란?

    cocoon1787.tistory.com

     

     

    paramTest.html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>paramTest.html</h1>
    	
    	<form action = "paramPro.jsp" method ="post">
    		이름 : <input type = "text" name = "name"><br>
            
            추천메뉴1 : <input type = "text" name = "menu1">
    	추천메뉴2 : <input type = "text" name = "menu2">
    	
    		<input type = "submit" value = "전송하기">
    	</form>
    	
    	
    	
    </body>
    </html>

     

    ☕️

    html <form action="#">태그에서 submit을 이용하여 값을 받아올 때는 param.name을 쓴다.
    이때 name은 <input> tag의 name이다.
    이런 form 태그가 있다고 했을때, 원래는 다음과 같이 스크립트릿을 사용해야 하지만
     
    사용자 id : <%=id %><br>
    사용자 pw : <%=pw %><br>
     

    el표현식을 이용해서 다음과 같이 줄일 수 있다.

    사용자 ID : %{param.id}
    사용자 PW : %{param.pw}

     

    paramPro.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>
    <h1>paramPro.jsp</h1>
    <% 
    	request.setCharacterEncoding("utf-8");
    	String name = request.getParameter("name");
    
    	String menu1 = request.getParameter("menu1");
    	String menu2 = request.getParameter("menu2");
    	
    	%>
    	이름 : <%=name %><br>
    	추천메뉴 1 : <%=menu1 %><br>
    	추천메뉴 2 : <%=menu2 %><br>
    	
    	<hr>
    	이름(el표현식) : ${param.name } <br>
    	추천메뉴 1 : ${param.menu1 }<br>
    	추천메뉴 2 : ${param.menu2 }<br>
    </body>
    </html>

     

     

     

    * el 표현식은 null 값을 공백 문자로 표시한다! 

     


     

    paramTest.html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>paramTest.html</h1>
    	
    	<form action = "paramPro.jsp" method ="post">
    		이름 : <input type = "text" name = "name"><br>
    		
    		추천메뉴1 : <input type = "text" name = "menu"><br>
    		추천메뉴2 : <input type = "text" name = "menu"><br>
    		
    	<input type ="checkbox" name = "hobby" value = "게임">게임
    	<input type ="checkbox" name = "hobby" value = "운동">운동
    	<input type ="checkbox" name = "hobby" value = "요리">요리<br>
    		
    		
    		<input type = "submit" value = "전송하기">
    	</form>
    	
    	
    	
    </body>
    </html>

     

     

    paramPro.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>
    <h1>paramPro.jsp</h1>
    <% 
    	request.setCharacterEncoding("utf-8");
    	String name = request.getParameter("name");
    	String[] menu = request.getParameterValues("menu");
    
    	%>
    	이름 : <%=name %><br>
    	추천메뉴 1 : <%=menu[0] %><br>
    	추천메뉴 2 : <%=menu[1] %><br>
    	
    	<hr>
    	[el]<br>
    	추천메뉴 1 : ${paramValues.menu[0] }<br>
    	추천메뉴 2 : ${paramValues.menu[1] }<br>
    	
    	<%	String[] hobbys = request.getParameterValues("hobby"); %>
    	<h3>취미 정보</h3>
    	[jsp]<br>
    	취미1 : <%=hobbys[0] %> <br>
    	취미2 : <%=hobbys[1] %> <br>
    	취미3 : <%=hobbys[2] %> <br>
    	<hr>
    
    	취미1 : ${paramValues.hobby[0] }<br>
    	취미2 : ${paramValues.hobby[1] }<br>
    	취미3 : ${paramValues.hobby[2] }<br>
    	
    
    </body>
    </html>

    => null 값이 없어야 한다.

     

     

    <%
    	if (hobbys != null) {
    		for (String h : hobbys) {
    	%>
    	취미 :<%=h%>
    	<br>
    	<%
    		}
    	} %>

     

    728x90
    반응형

    'Spring > Model1 _2(MVC)' 카테고리의 다른 글

    0927 JSP - JSTL (JSP Standard Tag Library)  (0) 2022.09.27
    0926 JSP - servlet  (0) 2022.09.26
    0922 JSP - 서블릿  (0) 2022.09.22
    0922 JSP - 형변환  (0) 2022.09.22
    0922 JSP - 메서드 오버라이딩  (1) 2022.09.22