--html파일(첫번째)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="08.2.action_forward_blood.jsp">
<h3>혈액형으로 보는 성격테스트</h3>
이름: <input name="name"></p>
당신의 혈액형은?</p>
<input type="radio" name="bloodType" value="A">A형<br>
<input type="radio" name="bloodType" value="B">B형<br>
<input type="radio" name="bloodType" value="O">O형<br>
<input type="radio" name="bloodType" value="AB">AB형<br>
<input type="submit" value="보내기">
</form>
</body>
</html>
--두번째 jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String bloodType = request.getParameter("bloodType");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page='<%=bloodType + ".jsp" %>'>
<jsp:param value="<%=name %>" name="name"/>
<jsp:param value="<%=bloodType %>" name="bloodType"/>
</jsp:forward>
</body>
</html>
--A형 jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name = request.getParameter("name");
String bloodType = request.getParameter("bloodType");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3><%=name %>님의 혈액형은 <%=bloodType %>형</h3>
<p>
A형입니다
</p>
</body>
</html>
--다른 혈액형들은 p태그의 내용만 다르고 코드들은 똑같음
"name"에 들어있는 값을 name변수에 넣고
"bloodType"에 들어있는 값을 bloodType 변수에 넣는 것!
name값과 value값 혼동하지 않기
잘 안 써서 이런 것도 있구나 하고 넘어가기!
공식문(ex. <%, <%= ...)이 있는데 굳이 쓰진 않음
<%@ 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>
<%-- <%! 선언문 %> --%>
<jsp:declaration>
public int max(int x, int y) {
return x > y ? x : y;
}
</jsp:declaration>
<%-- <% 스크립트릿 %> --%>
<jsp:scriptlet>
int num1 = 10;
int num2 = 20;
</jsp:scriptlet>
<%-- <%= 표현식 %> --%>
첫번째 값 <jsp:expression>num1</jsp:expression>과
두번째 값 <jsp:expression>num2</jsp:expression>중 큰 수는?<br>
<jsp:expression>max(num1, num2)</jsp:expression>
</body>
</html>
useBean은 자바 Bean 파일을 사용할 때 빈에 들어있는 값을 얻어오거나 값을 넣어줄 때 사용
jsp에서 이미 가지고 있는 내부 객체이므로 선언하지 않고 사용 가능
패키지명과 이름으로 구성되어 있음
내부객체에서 공통적으로 사용할 수 있음
사용자가 넣은 값을 request에 담아서 얻어오는 방법
--html파일
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>request Ex1</h1>
<form method="post" action="01.2.request.jsp">
이름: <input name="name"><p/>
학번: <input name="studentNum"><p/>
성별: <input type="radio" name="gender" value="man">남자
<input type="radio" name="gender" value="women" checked>여자
학과: <select name="major">
<option value="국문학과">국문학과</option>
<option value="영문학과">영문학과</option>
<option value="수학과">수학과</option>
<option value="컴퓨터학과">컴퓨터학과</option>
<option value="정치학과">정치학과</option>
</select>
<br>
<input type="submit" value="서버로 전송">
</form>
</body>
</html>
--jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String studentNum = request.getParameter("studentNum");
String gender = request.getParameter("gender");
String major = request.getParameter("major");
if(gender.equals("man"))
gender = "남자";
else
gender = "여자";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름: <%=name %><p/>
학번: <%=studentNum %><p/>
성별: <%=gender %><p/>
학과: <%=major %>
</body>
</html>
--html파일
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Request MultiParam Ex</h1>
<form method="post" action="02.2.request.jsp">
취미를 고르세요<p/>
<input type="checkbox" name="hobby" value="운동">운동<br>
<input type="checkbox" name="hobby" value="게임">게임<br>
<input type="checkbox" name="hobby" value="넷플">넷플<br>
<input type="checkbox" name="hobby" value="음악감상">음악감상<br>
<input type="checkbox" name="hobby" value="독서">독서<br>
<input type="submit" value="서버로 전송">
</form>
</body>
</html>
--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>
<%
request.setCharacterEncoding("utf-8");
String hobby[] = request.getParameterValues("hobby");
//getParameter는 request가 값 여러개를 받아오면 하나의 값만 가져오는 것
//getParameterValues는 여러개 가져오는 것(변수를 배열로 받아야 여러개 가져올 수 있음)
/*
out.print("당신의 취미는 ");
for(int i=0; i<hobby.length; i++) {
out.print(hobby[i] + ", ");
}
out.print("입니다");
*/
%>
당신의 취미는
<%
for(int i=0; i<hobby.length; i++) {
%>
<%=hobby[i] %>, <!-- 이 부분은 html이어서 컴마 밖으로 빼도 됨 -->
<%
}
%>
입니다
</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 protocol = request.getProtocol();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String remoteAddr = request.getRemoteAddr();
String remoteHost = request.getRemoteHost();
%>
<h1>Request 내장 메소드</h1>
프로토콜: <%=protocol %><p/>
서버이름: <%=serverName %><p/>
서버의 포트번호: <%=serverPort %><p/>
클라이언트 컴퓨터 주소: <%=remoteAddr %><p/>
클라이언트 컴퓨터 이름: <%=remoteHost %><p/>
요청 경로(URL): <%=request.getRequestURL() %><p/>
요청 경로(URI): <%=request.getRequestURI() %><p/>
<%="현재 사용하는 브라우저: " + request.getHeader("User-Agent") + "<p/>" %>
<%="브라우저가 사용하는 파일 타입: " + request.getHeader("Accept") + "<p/>" %>
</body>
</html>
결과
원래는 네트워크를 통해서 서버에 접속하지만 cache가 중간에 위치하면 cache에 잠깐 넣어놓고 교통량을 보고 서버에 전달해줌
--첫번째 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>Response Ex</h1>
<h3>sendRedirect</h3>
<%
response.sendRedirect("04.2.response.jsp");
%>
</body>
</html>
--두번째 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>
<%
if(request.getProtocol().equals("HTTP/1.0")) {
response.setHeader("pragma", "no-cache"); // http 1.0ver
} else if(request.getProtocol().equals("HTTP/1.1")) {
response.setHeader("Cache-Control", "no-store"); // http 1.1ver
}
%>
04.2.response.jsp파일입니다
</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>
<%
response.sendRedirect("https://www.kh-academy.co.kr/main/main.kh");
//입력한 주소값으로 바로 가게 됨
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" buffer="5kb" %>
<!-- 버퍼 사이즈 변경하면 용량도 변함 기본값 8kb -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Out Ex</h1>
<%
int totalBuffer = out.getBufferSize();
int remainBuffer = out.getRemaining();
int useBuffer = totalBuffer - remainBuffer;
%>
현재 페이지의 buffer 상태<p/>
출력 Buffer의 전체 크기: <%=totalBuffer %>byte<p/>
남은 Buffer의 크기: <%=remainBuffer %>byte<p/>
현재 Buffer의 사용량: <%=useBuffer %>byte
</body>
</html>
-http(네트워크 통신)은 저장공간이 없고 통신만 하기 때문에 session을 이용하여 다른 페이지로 넘어갈 때도 로그인이 된 상태를 유지하여 넘어갈 수 있게 함
-로그인된 정보는 session의 고유번호(=고유ID)를 부여하여 항상 따라다니면서 서버를 드나들며 상태를 유지하게 함
-session의 유지시간(마우스도 움직이지 않는 상태) 기본값은 30분임 => 시간이 지나면 로그인이 자동으로 풀림
--html파일(첫번째)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Session Ex1</h1>
<form method="post" action="07.2.session.jsp">
ID: <input name="id"><p/>
PW: <input type="password" name="pwd"><p/>
<input type="submit" value="로그인"> 
<input type="reset">
</form>
</body>
</html>
-두번째 jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
session.setAttribute("idKey", id);
session.setMaxInactiveInterval(60*5);
//5분동안 유지, 기본값으로 하려면 아예 이 구문을 쓰지 않음
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="07.3.session.jsp">
1. 가장 좋아하는 계절은?<p/>
<input type="radio" name="season" value="봄">봄
<input type="radio" name="season" value="여름">여름
<input type="radio" name="season" value="가을">가을
<input type="radio" name="season" value="겨울">겨울<p/><p/>
2. 가장 좋아하는 과일은?<p/>
<input type="radio" name="fruit" value="사과">사과
<input type="radio" name="fruit" value="딸기">딸기
<input type="radio" name="fruit" value="포도">포도
<input type="radio" name="fruit" value="멜론">멜론<p/><p/>
<input type="submit" value="전송">
</form>
</body>
</html>
--세번째 jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String season = request.getParameter("season");
String fruit = request.getParameter("fruit");
String id = (String)session.getAttribute("idKey");
//원래 session은 Object형이기 때문에 String으로 넣으려면 강제형변환 해야 됨
String sessionId = session.getId();
//서버측에서 클라이언트가 접속하면 고유한 세션 Id를 부여함
int intervalTime = session.getMaxInactiveInterval();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% //세션 유지기간 끝나면 null값이 됨
if(id != null) {
%>
<h1>Session Ex</h1>
<%=id %>님이 좋아하는 계절과 과일은 <%=season %>과 <%=fruit %> 입니다.<p/>
세션 ID: <%=sessionId %><p/>
세션유지시간: <%=intervalTime %>초<p/>
<%
session.invalidate(); //세션 끊기
} else {
out.print("세션 시간이 경과하였거나 다른 이유로 연결할 수 없습니다");
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String serverInfo = application.getServerInfo();
String mimeType = application.getMimeType("01.1.request.html");
// url 경로명
String appPath = application.getContextPath();
//웹애플리케이션 루트에 대한 로컬상의 실제 경로
String realPath = application.getRealPath("/");
application.log("application 내부 객체 로그 테스트");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Application Ex</h1>
서블릿 컨테이너의 이름과 버전: <%=serverInfo %><p/>
01.1.request.html 파일의 MIME Type: <%=mimeType %><p/>
웹 애플리케이션의 url 경로명: <%=appPath %><p/>
로컬 파일 시스템의 경로: <%=realPath %>
</body>
</html>
workspace에서 이클립스를 실행하고 있지만 실질적으로 파일들을 저 위치에 존재함
잘 안 씀
이런식으로 더 붙여서 써야되기 때문
잘 안 씀
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!-- 자바에 있는 모든 클래스들을 임포트 시켜야 Enumeration 오류 안 남-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Config Ex</h1>
<table border="1">
<tr>
<td>초기 파라미터 이름</td>
<td>초기 파라미터 값</td>
</tr>
<%
Enumeration e = config.getInitParameterNames();
//getInitParameterNames(이름 모두 가져옴)가 Enumeration 자료형임
while(e.hasMoreElements()) {
String initParamName = (String)e.nextElement();
%>
<tr>
<td><%=initParamName %></td>
<td><%=config.getInitParameter(initParamName) %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" info="JSP Program"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
현재 페이지의 정보: <%=this.getServletInfo() %>
</body>
</html>
HttpServlet을 상속하면 Servlet, GenericServlet 모두 사용 가능
jsp에서 <%!선언문으로 저렇게 만들면
인스턴스 변수(멤버변수)로 저렇게 클래스 바로 밑에 선언돼서 들어가게 됨
스크립트릿으로 하면 메소드 안에 지역변수가 만들어짐
package servlet1;
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("/servletTest")
public class servletTest extends HttpServlet {
// jsp에서 선언문의 변수와 메소드는 이곳에 만들어짐
// <%! int num, void method() {};>
/*
int num;
void method() {
}
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//프로그래밍은 여기서
//jsp에서 스크립트릿으로 선언한 변수는 이곳에 만들어짐
// <% int num2 = 0; %>
/*
int num2 = 0;
*/
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
out.print("<h1>서블릿으로 html문서 만들기</h1>");
out.print("</body>");
out.print("<html>");
}
}
* 자바 파일 이름 수정할 때 f2보단
파일 우클릭 - refactor - rename
package servlet1;
import java.io.IOException;
import javax.servlet.ServletConfig;
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("/ServletTest2")
public class ServletTest2 extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
//서블릿 최초로 객체가 생성될 때 한 번 호출
System.out.println("init() 호출");
}
public void destroy() {
// 서블릿이 삭제될 때 한 번 호출
System.out.println("destroy() 호출");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 클라이언트가 요청이 있을 때마다 호출
System.out.println("service() 호출");
}
}
호출을 계속하려면 웹페이지를 새로고침하면 되고 destroy 삭제하려면 코드에서 아무 출력문이나 수정하고 저장하면 자동으로 실행됨
--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>Get Servlet방식</h1>
<form method="get" action="GetServlet">
<!-- 서블릿 파일에서 맵핑(@)에 넣은 값을 action으로 넣어줌 -->
msg: <input name="msg"><p/>
<input type="submit" value="전송">
</form>
</body>
</html>
--servlet파일
package servlet1;
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("/GetServlet")
public class GetServlet3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String msg = request.getParameter("msg");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
out.print("<h1>Method Get Servlet 방식</h1>");
out.print("<h3>메시지: " + msg + "</h3>");
out.print("</body>");
out.print("</html>");
}
}
jsp의 server.xml에서 connector 태그를 찾아
URIEncoding="UTF-8" 값을 넣어주고 저장해야 서로 연결됨
결과