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으로 보여줄 지 정해서 출력
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);
}
}
[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>");
}
}
[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"));
}
}
[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>
[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()%>) </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>
[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 |