반응형
목차
서블릿의 여러가지 URL 패턴
- 이름까지 정확히 일치하는 패턴
- ex) /first/test
- 확장자만 일치하는 패턴
- ex) .do (.확장자)
- 모든 요청 패턴
- ex) /*
Filter API
- 브라우저에서 서블릿에 요청하거나 응답할 때 미리 요청이나 응답과 관련해 여러가지 작업을 처리하는 기능
- 예를들어 한글 인코딩처럼 각 서블릿에서 반복적으로 처리해야 하는 작업과 같이 서블릿의 공통 작업을 미리 필터에서 처리하면 반복 작업의 수고를 덜 수 있음
- 용도
- 요청 필터
- 사용자 인증 및 권한 검사
- 요청시 요청 관련 로그 작업
- 인코딩 기능
- 응답 필터
- 응답 결과에 대한 암호화 작업
- 서비스 시간 측정
- 필터 관련 API
- javax.servlet.Filter
- javax.servlet.FilterChain
- javax.servlet.FilterConfig
- 요청 필터
- Filter 메서드
- destory()
- 필터 소멸 시 컨테이너에 의해 호출되어 작업 종료
- doFilter()
- 요청/응답 시 컨테이너에 의해 호출되어 기능 수행
- init()
- 필터 생성 시 초기화
- destory()
- FilterConfig 메서드
- getFilterName()
- 필터 이름 반환
- getInitParameter(String name)
- getServletContext()
- getFilterName()
- 사용자 정의 Filter
- 애너테이션 이용
- 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_4_0.xsd" id="WebApp_ID" version="4.0">
</web-app>
package sec06.ex01;
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("/show")
public class ShowMember extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
// 세션객체 가져오기
HttpSession session = request.getSession();
// 세션객체에서 로그인세션 가져오기
MemberVO memberSession = (MemberVO)session.getAttribute("loginSession");
// 미로그인 상태(로그아웃 상태)
if (memberSession == null) {
pw.println("<input type='button' value='로그인' onclick='location.href=\\"login.html\\";'>");
} else { // 로그인 상태
pw.print(memberSession.getName()+"님, 안녕하세요");
pw.println("<input type='button' value='로그아웃' onclick='location.href=\\"logout\\";'>");
}
}
}
Listener API
- 서블릿에서 발생하는 이벤트에 대해 처리
- ex) 현재 웹 페이지에 로그인한 접속자 수
JSP
- HTML, CSS 와 JS를 기반으로 JSP 요소들을 이용해 화면 구현
- 구성 요소
- HTML 태그, CSS, JAVA SCRIPT 코드
- JSP 기본태그
- JSP 액션 태그
- 개발자가 직접 만들거나 프레임워크에서 제공하는 커스텀 태그
- 사용
- webapp 아래 JSP File 생성
- UTF-8로 인코딩 방식 설정
- <% 자바 코드 %>
<%@ 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>hello JSP!!</h1>
<h1>JSP 실습입니다</h1>
<%
String name = "홍길동";
System.out.println(name);
out.print(name);
%>
</body>
</html>

- JSP 구성 요소
- 디렉티브 태그
- 스크립트 요소
- 주석문
- 스크립트릿
- 표현 식
<%=name%> // name 출력, 세미콜론 없음- 선언식
- 표현 언어
- $
- 내장 객체
- 액션 태그
- 커스텀 태그
디렉티브 태그
- 페이지 디렉티브 태그
- 인클루드 디렉티브 태그
- 태그라이브 디렉티브 태그
- 페이지 디렉티브 태그
- 사용처
- import에 주로 사용
- buffer
- 이외의 태그가 더 있지만 사용하지 않으므로 생략
- 사용처
<@ page 속성1="값1" 속성2="값2" ... @>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello JSP!!</h1>
<h1>JSP 실습입니다</h1>
<%
String name = "홍길동";
System.out.println(name);
out.print(name);
Date date = new Date(); //데이트 객체가 import 되었음
out.print(date);
%>
<% for(int i=0; i<10; i++) { %>
<%= "<h1>"+date+"</h1>" %>
<div> 안녕하세요 </div>
<% } %>
</body>
</html>

<%@page import="member.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="member.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello JSP!!</h1>
<h1>JSP 실습입니다</h1>
<%
MemberDAO dao = new MemberDAO();
List<MemberVO> list = dao.listMembers();
%>
<table>
<tr>
<td>아이디</td>
<td>비밀번호</td>
<td>이름</td>
<td>이메일</td>
<td>가입일</td>
</tr>
</table>
<%
for(int i = 0; i < list.length; i++){
}
%>
</body>
</html>
- 인클루드
- 디렉티브
- <%@ include file=”경로”%>
- 소스를 넣고 실행
- 액션태그
- <jsp:include page=”경로”/>
- 소스를 실행하고 불러옴
- 인클루드(디렉티브) 방식 실행
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div>Header</div>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div>Header</div>
<%@ 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>
<div id="wrap">
<%@ include file="/include/header.jsp" %>
<div id="container">
???
</div>
</div>
</body>
</html>
- 액션 페이지 방식 실행
<%@ 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>
<div id="wrap">
<jsp:include page="/include/header.jsp" >
<jsp:param value="hong@gmail.com" name="email"/>
</jsp:include>
<div id="container">
???
</div>
</div>
</body>
</html>
- 이런식으로 넣을 수도 있다.
<%@ 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>
<div id="wrap"><%
String page = "/include/header.jsp";
%>
<jsp:include page=<%=page %> >
<jsp:param value="hong@gmail.com" name="email"/>
</jsp:include>
<div id="container">
???
</div>
</div>
</body>
</html>
선언문
- <%! %>로 선언
- 필드로 여겨짐
<%@ 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>
<% String a = "ㅇㅇ"; //전역 변수 %>
<div id="wrap"><%
String name = "홍길동"; //지역변수
String pages = "/include/header.jsp";
%>
<jsp:include page="<%=pages %>">
<jsp:param value="hong@gmail.com" name="email"/>
</jsp:include>
<div id="container">
???
</div>
</div>
</body>
</html>
에러 코드에 따른 예외 페이지 지정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>404 오류</title></head>
<body>
<h1>페이지를 찾을 수 없습니다 :</h1>
<p>요청하신 페이지가 존재하지 않거나 경로가 잘못되었습니다.</p>
</body>
</html>
<?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_4_0.xsd" id="WebApp_ID" version="4.0">
<error-page>
<error-code>404</error-code>
<location>/err/error_404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/err/error_500.jsp</location>
</error-page>
</web-app>

내장 객체
- 주로 사용하는 것
- session
- request
- application
- 가장 넓은 범위의 저장소
표현 언어
- EL
- 값을 출력하기 위해 사용
- 저장소 (request, session)에 있는 값 출력
- 사용법 쉬움
- null처리 불필요
- 저장소의 순서
- page → pageScope
- request → requestScope
- session → sessionScope
- applicationScope → applicationScope
- 바로 꺼내 쓸 수 있음
- ${변수명}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
// request에 저장
request.setAttribute("name", "홍길동");
//세션에 저장
session.setAttribute("email", "xxx@naver.com");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
name : ${sessionScope.email}
name : ${email}
</body>
</html>

- 객체, 맵도 꺼낼 수 있다,
<%@page import="member.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
// request에 저장
request.setAttribute("name", "홍길동");
//세션에 저장
session.setAttribute("email", "xxx@naver.com");
// MemberVO객체를 세션에 저장
member.MemberVO vo = new MemberVO();
vo.setName("김길동");
session.setAttribute("loginSession", vo);
// Map객체를 리퀘스트에 저장
java.util.Map map = new java.util.HashMap();
map.put("id","장길동");
request.setAttribute("data", map);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
name : ${sessionScope.email}
name : ${email}
object : ${loginSession.name}
map : ${data.id}
</body>
</html>

- if 문은 jstl로, 별도의 라이브러리를 다운 받아줘야 사용 가능
- if 문 + 파라미터 까지 전체 코드
<%@page import="member.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
// request에 저장
request.setAttribute("name", "홍길동");
//세션에 저장
session.setAttribute("email", "xxx@naver.com");
// MemberVO객체를 세션에 저장
member.MemberVO vo = new MemberVO();
vo.setName("김길동");
session.setAttribute("loginSession", vo);
// Map객체를 리퀘스트에 저장
java.util.Map map = new java.util.HashMap();
map.put("id","장길동");
request.setAttribute("data", map);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
name : ${sessionScope.email}
name : ${email}
object : ${loginSession.name}
map : ${data.id}
id 비교 : ${ data.id eq 'hong'}
로그인 세션 존재 여부 : ${!empty loginSession}
파라미터 넣기 (주소창에 입력하면 나옴) : ${ param.age }
파라미터 null 체크 : <%=request.getParameter("age") == null ? "" : request.getParameter("age") %>
</body>
</html>
메모
- XSS (크로스사이트스크립팅 공격)
- 주소창으로 자바스크립트를 입력하여 임의의 공격을 수행
- 필터링을 통해 막을 수 있다.
- 서블릿
- 요청 받기
- 비즈니스 로직
- 포워딩
- jsp
- 화면(프론트)
- HTML + CSS + JAVASCRIPT
- 시작
- 요청
- 요청받는 방법
- web.xml
- 어노테이션
- 비즈니스 로직
- service는 로직처리
- DAO는 DB연동
- 포워딩
- 하나의 요청
- 처리결과를 request에 저장
- JSP
- request에 저장된 처리 결과를 꺼내서 출력
- 출력 결과를 브라우저로 응답
728x90
반응형
'BackEnd' 카테고리의 다른 글
| 5/27 - ajax, JSON (4) | 2025.06.01 |
|---|---|
| 5/26 - JSTL (0) | 2025.06.01 |
| 5/22 - Servlet, 쿠키, 세션 (0) | 2025.06.01 |
| 5/21 - 서블릿 응답 처리 방법 (0) | 2025.06.01 |
| 5/20 - 톰캣, 웹 서버 프로그래밍, 서블릿 (1) | 2025.06.01 |