데일리로그C:
article thumbnail
Published 2023. 2. 22. 17:36
23.02.22_EL,JSTL,servlet 등 JAVA/model2

EL(Expression Language)  : 객체를 넘겼을 때 $ {  } 로 간략하게 표현 가능

--> jsp <% %> script 언어 대신

<%  // jsp 표현
String rq = request.setAttribute("request"   
%>
<%=rq %>
--------------------------------------------------------------
${ request }  // EL 표현

 

 

JSTL(Jsp Standard Tag Library) : 연산이나 조건문, 반복문(if문, for문 등등) 을 편하게 처리 가능(=커스텀 태그)

   ㄴ> 해당Jar파일 설치해야함!! 

   ㄴ> <열린태그> </ 닫힌태그>   --> 내용 없다면 한몸태그도 가능 : <열린태그 / >

1) core <c: >  ★★★

  --> 실행 흐름의 제어 기능 제공

  --> 페이지 이동 기술 제공

  --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 추가할 것

<c:set var="변수명"  value="값">  : 변수선언

<c:remove var="변수명" value="값">  : <c:set> 변수선언 제거

<c:out value="출력값" default="기본값(value 없는경우에 출력)"> : 출력

<c:if var="변수명" test="${조건문}">  : if문 --> true일때만 출력(else 없음)

<c:choose>  : if문(else 포함), switch문
        <c: when test="조건문1"> 실행문 </c:when>  --> if영역
        <c: when test="조건문2"> 실행문 </c:when>  --> else if영역
        <c:otherwise> 실행문 </c:otherwise>  --> else영역
</c:choose>

<c:forEach var="변수명" begin="시작값" end="마지막값" step="증가값(설정안하면 1씩증가)" item="객체 이름"> 
: 반복문  for(i=0(시작값); i <=10(마지막값); i++(증가)) 와 동일

<c:forToken var="변수명" items="변수그룹?" delims="자를 문구"> : split
ex) <c:set var="Group" value="a,b,c,d,e" />
      <c:forToken var="aa" items="Group" delims=","> 값: ${aa}</c:forToken>   
     ==> 값:a  //  값:b //  값:c //  값:d //  값:e 

 

2) Formatting <fmt: >

  --> 숫자 ,날짜, 시간을 formatting 하는 기능 제공

  --> 국제화, 다국어 지원 가능 제공

  --> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 추가할 것

 

3) Function <fn: >

  --> 문자열 제공하는 함수 제공

  --> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 추가할 것

 


 

MVC패턴 : model + view + controller 합성어

1) model : 백그라운드에서 동작하는 로직을 처리(java)

2) view : 사용자가 보게 될 결과 화면 출력(jsp)

3) controller : 사용자의 입력처리와 흐름 제어(servlet)  --> model과 view를 연결시킴

 

model 1 : 사용자의 요청을 JSP가 전부 처리

model 2 구조 : servlet 이 요청 받고

  -->  view (사용자에게 보여주는 역할만 담당,  model이 실질적인 기능 담당) 으로 

  --> or  servlet으로  보여줄 지 정해서 출력 

 

출처 : https://m.blog.naver.com/je_un/222035464249

 


 

servlet : 톰캣 위에서 동작하는 java 프로그램

(java 파일 컴파일 -> class 생성 -> servlet 객체 생성 -> doGet, doPost 통해 요청 응답)

ㄴ> JAVA Resources > scr > package 생성 >> 그안에 servlet 생성

 

 

 servlet 적용 방법

 

1.  web.xml 에  servlet 태그 작성 (사용 X)

 ㄴ> JAVA Resources > scr > class 생성 : ServletTest --> 패키지 없이 생성!

1) web.xml

<servlet>
  	<servlet-name>ServletTest</servlet-name>
  	<servlet-class>ServletTest</servlet-class>
</servlet>
<servlet-mapping> <!-- 자바 파일과 매칭처리를 해주겠다 -->
  	<servlet-name>ServletTest</servlet-name>
  	<url-pattern>/aaa.jsp</url-pattern>
</servlet-mapping>

2) ServletTest.java

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>  // 꼭 해야함
<%@ page import="java.text.*" %> // 꼭 해야함

~~~~  // 결과물 보이게

 

2. servlet 파일 생성 (기본 뼈대)

package controller;

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("/경로") // 절대경로로 처리할 것(servlet 경로 적기)
public class 클래스명 extends HttpServlet { // 상속(extends)
	private static final long serialVersionUID = 1L;  // 건들지 말기(같은 프로젝트 안에 있는 것들은 동일해야함)
       
    public Join() {
        super(); // 부모로부터 상속받기 때문에 필수!
    }
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// get으로 받는 경우 사용
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// post로 받는 경우 사용
	}
}

 

[ex 01]  login  --> cafe24 17번 

1. login.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>
<form action="/member/login" method="post"> <!-- .jsp 안썼기때문에 자동으로 servlet 파일 찾음 -->
	id: <input name="id"><br>
	pass: <input name="pass"><br>
	<button>로그인</button>  <!-- 버튼 클릭하면 action으로 이동 -->

</form> 

</body>
</html>

2. Login.java

package controller;

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;


@WebServlet("/member/login")  // member 폴더에 만들었으므로!(절대경로는 필수)
public class Login extends HttpServlet { // 상속
	private static final long serialVersionUID = 1L;
       
    public Login() {
        super();
    }

	// form에서 get방식으로 넘기게 되면 doget 실행
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
	}

	// form에서 post방식으로 넘기게 되면 dopost 실행
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id=request.getParameter("id");
		String pass=request.getParameter("pass");
		
		System.out.println("id:"+id+" pass:"+pass); // console창에서 확인
		
		response.setContentType("text/html; charset=utf-8");  // 한글은 깨지지않게
		PrintWriter out = response.getWriter(); //out 객체를 생성해서
		
		out.print("아이디: "+id+ "<br>"); // 브라우저에서 확인
		out.print("비밀번호: "+pass+ "<br>");
		out.print("<script>alert('id: "+id+"')</script>");

	}

}

 

3. View.java  -->  

package controller;

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;


@WebServlet("/member/view")  // 매칭되는게 있다면 View servlet 실행
public class View extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
  
    public View() {
        super();
        
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		
		response.setContentType("text/html; charset=utf-8"); //text/html 적용하고 한글이 있다면 깨지지않게 설정
		PrintWriter out = response.getWriter();
		out.print("id:"+id);
	}

	
	

}

input에 입력하면
id 값이 alert 뜨고 결과 나옴
주소창에 ?id=5555 입력하면!!

 


 

[ex 02]

1. join.jsp  --> form 만든곳에 사용자가 입력하면

<%@ 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>

<form action="/member/join" method="post"> 
	id : <input name="id"><br>
	pass : <input name="pass"><br>
	name : <input name="name"><br>
	phone : <input name="phone"><br>
	<button>회원가입</button>
</form>

</body>
</html>

 

2. Join.java  --> servlet 실행

package controller;

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;


@WebServlet("/member/join")
public class Join extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public Join() {
        super();  // 부모로부터 상속받았으므로 
       
    }

	//회원가입 페이지  --> join.jsp에서 <form method="post">로 넘겼기때문에 필요없음!
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//get방식으로 왔다면 실행
		String id=request.getParameter("id");
		System.out.println("id:"+id);
		
	}

	// 회원가입 insert
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//post방식으로 왔다면 실행
        request.setCharacterEncoding("utf-8"); // 받아올때 한글 안깨지게(둘다 필수로 하기)
		System.out.println("post방식======");
		
		String id = request.getParameter("id");
		String pass = request.getParameter("pass");
		String name = request.getParameter("name");
		String phone = request.getParameter("phone");
		
		response.setContentType("text/html; charset=utf-8");  //보낼때 한글 안깨지게
		PrintWriter out = response.getWriter();
		out.print("id:"+id+"<br>");  // out.print("id:"+request.getParameter("id")+"<br>"); 로 해도됨
		out.print("pass"+pass+"<br>");
		out.print("name:"+name+"<br>");
		out.print("phone"+phone+"<br>");

	}

}

 

 사용자가 input에 입력하면 --> servlet 결과 나옴

 


 

[ex 03] session - set, get

1. SetSession.java 

package controller;

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;
import javax.servlet.http.HttpSession;


@WebServlet("/set")   //set이라는 servlet 실행
public class SetSession extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public SetSession() {
        super();
        
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		session.setAttribute("name", "홍길동");  //변수와 값을 내가 지정하고 싶다면
		
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("session_name: "+(String)session.getAttribute("name"));
		out.print("<a href='/get'>세션삭제</a>");  // a태그 --> get 방식 
        // 세션삭제 누르면 getSession 실행(remove~)
		
	}
	
}

2. GetSession.java

package controller;

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;
import javax.servlet.http.HttpSession;


@WebServlet("/get")
public class GetSession extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public GetSession() {
        super();
       
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("session_name: "+(String)session.getAttribute("name")+"<br>");
		
		session.removeAttribute("name"); // name 속성만 삭제
		//session.invalidate(); 모든 세션 값 삭제
		out.print("session_name: "+(String)session.getAttribute("name"));
		
	}

	

}

 위는 set 실행결과(홍길동), 아래는 get 실행결과(null)

 


 

[ex 04]

1. webcontent > member > jsp 파일 생성 : login2.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>로그인</h1>

<form action="sessionLogin" method="post">
<table width=300 border=1>
	<tr>
		<td>아이디 :</td>
		<td><input type="text" name="id" id="id"/></td>
	</tr>
	<tr>
		<td>비밀번호 :</td>
		<td><input type="password" name="passwd" id="passwd"/></td>
	</tr>
	<tr>
		<td></td>
		<td><input type="submit" value="로그인"/></td>
	</tr>	
</table>
</form>


</body>
</html>

2. java resource > src > controller > servlet 파일 생성: Login2

package controller;

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;
import javax.servlet.http.HttpSession;


@WebServlet("/member/sessionLogin")  // 무조건 절대경로 처리하기(매칭처리 중요!)
public class Login2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
    public Login2() {
        super();
       
    }

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//세션 생성
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		String id = request.getParameter("id");
		
		HttpSession session = request.getSession();  // session 생성
		
		session.setAttribute("id", id);
		
		response.sendRedirect("/");  // index.jsp로 
	}

}

3. index.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>
session_id : <%=(String)session.getAttribute("id") %><br>  // jsp표현
session_id : ${sessionScope.id }  // EL 표현

</body>
</html>

위(jsp 표현) / 아래(EL 표현)

 


 

[ex 05] cafe24 p16 43번

webcontent > requestTest3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Request Test3</title>

<style>
h1 {
	text-align: center;
}

table {
	margin: auto;
	width: 100%;
	border: 1px solid red;
}
</style>
</head>

<body>
<h1>쿠키, URL/URI, 요청방식에 관련된 정보 예제</h1>
<table border="1">
	<tr>
		<td>쿠키정보</td>
<%
Cookie[] cookie=request.getCookies();
if(cookie==null){
%>
		<td>쿠기가 존재하지 않습니다</td>
<%
} else {
	for(int i=0; i<cookie.length;i++){
		%>
		<td><%=cookie[i].getName()%>(<%=cookie[i].getValue()%>)&nbsp;&nbsp;</td>
		<%
	}
}
%>
	</tr>
	<tr>
		<td>서버 도메인명</td>
		<td><%=request.getServerName() %></td>
	</tr>

	<tr>
		<td>서버 포트번호</td>
		<td><%=request.getServerPort() %></td>
	</tr>

	<tr>
		<td>요청 URL</td>
		<td><%=request.getRequestURL() %></td>
	</tr>

	<tr>
		<td>요청 URI</td>
		<td><%=request.getRequestURI() %></td>
	</tr>

	<tr>
		<td>요청 쿼리</td>
		<td><%=request.getQueryString() %></td>
	</tr>

	<tr>
		<td>요청 쿼리(한글깨짐)</td>
		<td><%//=URLDecoder.decode(request.getQueryString(), "UTF-8") %></td>
        <!-- 주석처리할때 = 도 같이 해야함! -->
	</tr>

	<tr>
		<td>클라이언트 호스트명</td>
		<td><%=request.getRemoteHost() %></td>
	</tr>

	<tr>
		<td>클라이언트 IP 주소</td>
		<td><%=request.getRemoteAddr() %></td>
	</tr>

	<tr>
		<td>프로토콜</td>
		<td><%=request.getProtocol() %></td>
	</tr>

	<tr>
		<td>요청방식</td>
		<td><%=request.getMethod() %></td>
	</tr>

	<tr>
		<td>컨텍스트 경로</td>
		<td><%=request.getContextPath() %></td>
	</tr>
</table>

</body>

</html>

그냥 실행했을 때
주소창에 ?id=1111&pass=2222 입력했을 때(결과물 요청쿼리 참고)

 


 

[ex 06] forward  //  include

1. page01.jsp  --> forward : 정보를 보낼테니 page02가 일해라.(주소는 page01)

     ㄴ> 주체는 나!!!!!!     정보 줄게~ 일은 니가 해

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page01</title>
</head>
<body>

<%
pageContext.forward("page02.jsp");
%>

<jsp:forward page="page02.jsp" /> <!-- 위와 동일 -->

</body>
</html>

 2. page02.jsp   --> include : page03의 정보를 실행(주소는 page02)

    ㄴ> 주체는 나!!! 니가 가지고 있는 정보 줘~~  내가 일 할게

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page02</title>
</head>
<body>

<!-- 세가지 다 동일 -->

<%
pageContext.include("page03.jsp");
%>


<%@ include file="page03.jsp" %>


<jsp:include page="page03.jsp" />

</body>
</html>

3.page03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page03</title>
</head>
<body>

page3.jsp 내용이다.

</body>
</html>

 


 

[ex 07] session 객체 

1. sessionTest1.jsp  --> cafe24 p15 52번

<%@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>Insert title here</title>
</head>
<body>

<h2>세션 테스트</h2>

isNew():<%=session.isNew()%><br>

생성시간:<%=session.getCreationTime()%><br>

최종 접속 시간:<%=session.getLastAccessedTime()%><br>

세션ID:<%=session.getId()%><br>

</body>
</html>

 


 

servlet 총정리
▶ request 요청을 처리 --> response 응답 처리해야함

▶ 받아올때, 내보낼 때 한글 안깨지게 설정
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

▶ out.print 사용하기 위해  out 객체 생성(호출)
    PrintWriter out = response.getWriter(); 
--> println()  : 출력후 스페이스 한칸 처리
--> print() : 출력 후 스페이스 없음

▶ session servlet 일때
HttpSession session = request.getSession();
session.setAttribute("name", "홍길동"); //변수와 값을 내가 지정하고 싶다면

out.print("session_name: "+(String)session.getAttribute("name"));


'JAVA > model2' 카테고리의 다른 글

230228_web2(4)-회원목록  (0) 2023.02.28
230227_web2(3) admin  (0) 2023.02.27
230224 _ EL -- 연산, 피라미드  (1) 2023.02.24
230223 _ Scope, parameter vs attribute, 쿠키, pstmt  (0) 2023.02.23
bb6  (0) 2023.01.30
profile

데일리로그C:

@망밍

포스팅이 도움됐다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...