데일리로그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

<bash />
<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

<bash />
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*" %> // 꼭 해야함 <%@ page import="java.text.*" %> // 꼭 해야함 ~~~~ // 결과물 보이게

 

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

<bash />
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

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

<bash />
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  -->  

<bash />
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 만든곳에 사용자가 입력하면

<bash />
<%@ 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 실행

<bash />
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 

<bash />
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

<bash />
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

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

<bash />
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 : 결과

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

<bash />
<%@ 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)

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

<bash />
<%@ 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)

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

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

<bash />
<%@ 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번

<bash />
<%@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:

@망밍

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