복습
서블릿/ JSP
톰캣설치→서블릿/JSP컨테이너→요청→서블릿→처리→결과→응답 서블릿1개 요청 1개를 처리한다
요청을 처리할 서블릿의 메소드를 작성(service() —> 요청의 방법(방식)에 따라
doGet(),doPost()
서블릿은 컨테이너에 하나의 객체만 생성한다.
요청—서블릿 객체가 생성(최초)
다음 요청 - 기 생성된 서블릿 객체가 사용된다.
멤버변수에 저장된 데이터는 요청마다 사용될 수 있다.
서블릿 메소드(doGet,doPost)
매게변수(인수)-HttpServletRequest(요청객체)
-HttpServletResponse(응답객체)
get방식: 주소를 통해 서버에 데이터를 요청한다.
http//localhost:8090/ex00/hello?name=Jamse
컨텍스트패스
서블릿 url매핑 이름
name=James → 쿼리스트링
파라미터
파라미터의 키 : name
파라미터의 값 : James
서블릿에서 파라미터를 받을 때 요청객체를 이용해서 받는다.
request.getParameter(”name”) —>무조건 String이다.
WrapperClass : Integer.parseInt(), Float~, Double~
결과란…클라이언트가 요청한(기대하는) 데이터.
결과를 클라이언트한테 제공한다 —> 브라우저를 통해 서버와 소통하니까…
서버의 응답은 브라우저에 뭔가를 써주는 거다
Printer 객체를 이용해서 응답을 한다.
Printer 객체는 응답객체를 통해 얻는다.
PrintWriter out = response.getWriter();
out.print(”<html>“); —> HTML문서
out.print(”<head>“)
out.print(”<title>“)
out.print(”<head>“)
out.print(”<서블릿연습>“)
out.print(”</title>“)
out.print(”<link rel=’stylesheet’> href=’css/style.css’>“)
out.print(”</head>“)
out.print(”</body>“)
out.print(”<h1>“)
out.print(”<Test“)
out.print(”</h1>“)
out.print(”</body>“)
out.print(”<html>“)
—>JSP 사용하면 HTML문서를 만드는데 편하다.
LIfeservelt
LifeServelt을 Get방식으로 호출한다.
파라미터의 키 이름은 name으로 한다.
LifeCycleServelt은 파라미러를 받아서
ArrayList에 저장하고
파라미터 값을 화면에 h1 크기의 글자로 표시한다.
다시 폼을 통해 이름 데이터를 LIfeCycleServelt에 보내면
ArrayList에 이전 데이터와 함꼐 저장된다.
파라미터 값으 ㄹ화면에 H1크기의 글자로 표시하면 이전 데이터도 함께 화면에 나온다.
LifeCycleServlet!
package servlet0607;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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("/LifeCycleServlet")
public class LifeCycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
ArrayList<String> list = new ArrayList<String>();
public LifeCycleServlet() {
super();
System.out.println("Create...");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("Init...");
}
public void destroy() {
System.out.println("Destory...");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Service...");
//요청 영역
String param=request.getParameter("name");
list.add(param);
//응답 영역
response.setContentType("text/html; charset=UTF-8"); // 콘텐츠 타입과 문자 인코딩 설정
request.setCharacterEncoding("UTF-8"); // 문자 인코딩 설정 //
PrintWriter out = response.getWriter();
for (String name : list) {
out.print("<h1>"+name+"</h1<");
}
}
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>LifeCycle 서블릿 호출</h1>
<hr>
<form action="LifeCycleServlet" method="get">
<input type="text" name="name">
<input type="submit" name="send" value="전송">
</form>
</body>
</html>
======================
doPost+doGet 같이 사용하는 법
package servlet0607;
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("/getpost")
public class GetpostSevlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html; charset=UTF-8"); // 콘텐츠 타입과 문자 인코딩 설정
request.setCharacterEncoding("UTF-8"); // 문자 인코딩 설정 //
System.out.println("get방식 전송 받음");
String num1 = request.getParameter("num1");
String num2 = request.getParameter("num2");
int a = Integer.parseInt(num1);
int b = Integer.parseInt(num2);
PrintWriter out = response.getWriter();
out.print("<h1>"+(a+b)+"</h1>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8"); // 콘텐츠 타입과 문자 인코딩 설정
request.setCharacterEncoding("UTF-8"); // 문자 인코딩 설정 //
System.out.println("post방식 전송 받음");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
PrintWriter out = response.getWriter();
out.print("|아이디|:"+ id+" ");
out.print("|비밀번호|:" +pw);
}
}
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 방식 전송</h1>
<hr>
<form action="getpost" method="get">
<input type="text" name="num1">+<input type="text" name="num2"><input type="submit" name="결과" value="get방식 전송">
파라미터 키: num1 , num2
두 수의 합을 화면에 보여주기
</form>
<hr>
<h1>Post 방식 전송</h1>
<hr>
<form action="getpost" method="post">
<input type="text" name="id" placeholder="id"><br>
<input type="text" name="pw" placeholder="pw">
<input type="submit" name="결과" value="post방식 전송">
파라미터 키: id , pw
아이디:..., 패스워드:....
</form>
</body>
</html>
===================
login 페이지 아이디 비번 맞으면 로그인 성공 아니면 로그인실패
package servlet0607;
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("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet실행...");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
if (id.equals("aaa") && pw.equals("1234")) {
response.sendRedirect("success.jsp");
}
else {
response.sendRedirect("fail.jsp");
}
}
}
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>
<h1>로그인 페이지</h1>
<form action="LoginServlet">
아이디:<input type="text" name="id" placeholder="id입력하세여" ><br>
비밀번호:<input type="text" name="pw" placeholder="id입력하세여">
<input type="submit" name="in" value="로그인">
</form>
</body>
</html>
success.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>
</body>
</html>
fail.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>
</body>
</html>
===========================
gender(성별선택)
package servlet0607;
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("/radio")
public class RadioServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
int mancnt = 0;
int womancnt = 0;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8"); // 콘텐츠 타입과 문자 인코딩 설정
request.setCharacterEncoding("UTF-8"); // 문자 인코딩 설정 //
String gender = request.getParameter("gender");
//PrintWriter out = response.getWriter();
if (gender.equals("man")) {
// gender = man : 남성전용 페이지 이동
//mancnt++;
//out.print(mancnt + "번째 남자");
response.sendRedirect("manpage.jsp");
} else if (gender.equals("woman")) {
// gender = woman : 여성전용 페이지 이동
//womancnt++;
//out.print(womancnt + "번째 여자");
response.sendRedirect("womanpage.jsp");
}
}
}
gender(radio)
<%@ 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="radio" method="get">
<h1>성별 확인 페이지 입니다.</h1>
<input type="radio" name="gender" value="man">남자 <br> <!-- radio는 value에 값을 넣어줘야한다.
name에는 똑같은 이름을 넣어줘야한다!!! method도 써서 무슨 방식인지 넣어줘야함 -->
<input type="radio" name="gender" value="woman">여자 <br>
<input type="submit" name="send" value="전송">
</form>
</body>
</html>
manpage.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>
</body>
</html>
woman.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>
</body>
</html>
========================
취미(checkbox)
package servlet0607;
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;
/**
- Servlet implementation class CheckBoxServlet */ @WebServlet("/CheckBoxServlet") public class CheckBoxServlet extends HttpServlet { private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8"); // 콘텐츠 타입과 문자 인코딩 설정
request.setCharacterEncoding("UTF-8"); // 문자 인코딩 설정 //
String[] habit = request.getParameterValues("habit");
PrintWriter out = response.getWriter();
if (habit !=null) {
for (int i = 0; i < habit.length; i++) {
out.println("취미는:" + habit[i]+" ");
}
} else {
out.print("아무것도 선택이 안됌!");
}
}
}
체크박스.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>CheckBox 파라미터 보내기</h1>
<hr>
<form action="CheckBoxServlet" method="get">
취미: <input type="checkbox" name="habit" value="read">독서
<input type="checkbox" name="habit" value="movie">영화
<input type="checkbox" name="habit" value="baseball">야구
<input type="submit" value="전송">
</form>
</body>
</html>
=======================
SelectServlet
package servlet0607;
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("/SelectServlet")
public class SelectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public SelectServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8"); // 콘텐츠 타입과 문자 인코딩 설정
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
//String job = request.getParameter("job"); 내가 한 것
String [] value = request.getParameterValues("job");
//선생님예제
// for (int i = 0; i < value.length; i++) {
// if (value[i].length()==0) {
// continue;
// }
//
// out.print(value[i]+"<br>");
// }
if (value[0].length() == 0) {
for (int i = 0; i < value.length-1; i++) {
value[i]=value[i+1];
}
for (int i = 0; i < value.length-1; i++) {
out.print(value[i]+"<br>");
}
}
else {
for (int i = 0; i < value.length; i++) {
out.print(value[i]+"<br>");
}
}
//String job = request.getParameter("job"); 선생님예제
//job에 저장된 데이터가 ""가 같으면
//if(job.length()==0){
// out.print("직업을 선택하지 않았다.);
// }
// else{
// out.print(job);
// System.out.println(job);
// }
//if (value.isEmpty()) { 내가 한것
// out.print("선택 상황 없음");
// }
// else {
// out.print(job);
// System.out.println(job);
// }
}
}
public SelectServlet() {
super();
} 이걸 왜 만들는가?
SelectServlet
클래스의 기본 생성자(SelectServlet()
)는 부모 클래스인 HttpServlet
의 기본 생성자를 호출하기 위해 사용됩니다.Servlet 클래스는 서블릿 컨테이너에 의해 인스턴스화되고 관리되는데, 서블릿 컨테이너는 기본 생성자를 사용하여 서블릿을 초기화합니다. 부모 클래스인
HttpServlet
의 기본 생성자를 호출하여 필요한 초기화 작업을 수행합니다. 이러한 초기화 작업은 서블릿의 생명주기 메서드 중 init()
메서드에서 처리될 수 있습니다.따라서,
SelectServlet
클래스의 기본 생성자는 서블릿의 초기화를 위해 필요하며, HttpServlet
클래스의 기본 생성자를 호출하기 위해 사용됩니다.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>Select Option 파라미터 보내기</h1>
<hr>
<form action="SelectServlet" method="get">
<select name="job" multiple> <!-- multiple 은 여러가지 선택이 가능하게 한다. -->
<option value="" disabled>----선택해---</option> <!-- disabled을 쓰면 선택자체가 되지 않는다. -->
<option value="stduent">학생</option>
<option value="teacher">교사</option>
<option value="coworker">직장인</option>
</select>
<input type="submit" value="전송">
</form>
</body>
</html>
======================
TextArea
package servlet0607;
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("/TextAreaServlet")
public class TextAreaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public TextAreaServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8"); // 콘텐츠 타입과 문자 인코딩 설정
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String msg = request.getParameter("msg").replace("\\r\\n", "<br>"); // "\\r\\n"엔터키
out.print("<h1>"+msg+"</h1>");
}
}
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>TextArea 파라미터 보내기</h1>
<hr>
<form action="TextAreaServlet" method="get">
<textarea rows="5" cols="20" name="msg"></textarea>
<input type="submit" value="전송">
</form>
</body>
</html>
==========================
쿼리스트링 만드는 법
쿼리스트링을 포함한 URL을 생성하기 위해서는 기본 URL과 쿼리스트링을 조합해야 합니다. 여기서는 예시로
http://example.com/search
라는 기본 URL에 쿼리스트링을 추가하는 방법을 보여드리겠습니다.javaCopy code
String baseUrl = "http://example.com/search";
String parameter1 = "value1";
String parameter2 = "value2";
String queryString = "param1=" + parameter1 + "¶m2=" + parameter2;
String urlWithQueryString = baseUrl + "?" + queryString;
위의 코드에서
baseUrl
은 기본 URL을 나타내고, parameter1
과 parameter2
는 파라미터의 값입니다. queryString
변수는 파라미터와 값들을 조합한 쿼리스트링을 나타냅니다. 마지막으로, urlWithQueryString
변수에는 기본 URL과 쿼리스트링이 조합된 전체 URL이 저장됩니다.실제로 사용할 경우
urlWithQueryString
값을 출력하면 다음과 같이 URL이 표시됩니다:arduinoCopy code
http://example.com/search?param1=value1¶m2=value2
이 URL을 사용하면 서버에 GET 요청을 보내고, 쿼리스트링에 포함된 파라미터와 값들을 서버에서 사용할 수 있습니다.
쿼리스트링으로 내가 무엇을 했고 뭐가 나오는지 알 수 있다.
Share article