728x90
package action;
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("/His")
/* 외부에서 http://localhost:8080/His로 접속하면 내부적으로
HelloServlet3으로 매핑한다. tomcat2.5에서는 web.xml파일에서 자동으로 설정해주지만
tomcat3.x대에서는 @WebServlet()이라는 Annotation으로 web.xml없이 자동으로 완성된다.*/
public class HelloServlet3 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
String ip=request.getRemoteAddr();
System.out.println(ip + "Entered");
response.setContentType("text/html;charset=utf-8");//한글 깨짐 방지
// 하단 두줄은 클라이언트 브라우저에 결과를 출력함
PrintWriter out = response.getWriter();
out.printf("[%s]님의 방문을 환영합니다.",ip);
System.out.println("Hello Servlet");
}
}
서블릿에서 인자를 주어서 호출한다면
http://localhost:8080/Web.kahn.edu/Greet?nation=eng
http://localhost:8080/Web.kahn.edu/Greet?nation=kor 식으로 호출 할때 서블릿에서 파라미터 변수로 처리된다.
http로 전송되는 파라미터 변수는 거의 다 문자로 처리된다 따라서 String 객체 타입으로 해주면 (int, char.. 포함)된다.
package Web.kahn.edu;
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("/Greet")
public class GreetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
String nation= request.getParameter("nation");
// 문자타입으로 String 객체로 처리.
String msg="";
if (nation==null||nation.isEmpty()) {
nation ="kor"; //별도의 인사말이 지정되지 않으면 한국어로
}
if (nation.equals("kor")) {
msg="안녕하세요";
} else if(nation.equals("eng")) {
msg = "Hello";
} else if (nation.equals("jpn")) {
msg = "ありがとう";
} else if (nation.equals("chn")) {
msg = "你好";
}
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// out.println("<html>");
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<head>");
sb.append("<title>인사말</title>");
sb.append("</head>");
sb.append("<body>");
sb.append(msg);
sb.append("</body>");
sb.append("</html>");
out.print(sb.toString()); // 전송 스트링 버퍼를 담아서 출력
}
}
웹 프로그래밍을 서블릿으로만 개발하지 않는다. 서블릿은 JSP와 연동하기 위한 하나의 거쳐가는 과정이다.
<WebContent에서 html을 생성하고 위에있는 서블릿과 연동하기>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- <meta charset="EUC-KR"> -->
<title>Insert title here</title>
</head>
<body>
<!-- 서버로 데이터를 전송할 때에는 FORM 태그가 필요함 -->
<!-- action은 form 태그에 싸여 있는 정보를 전송할 서버쪽 객체_명으로 해야한다. -->
<form action="Greet">
알고 싶은 외국 인사말은 ??? <br>
<input type="radio" name="nation" value="kor" checked="checked">한국<br>
<input type="radio" name="nation" value="eng">미국<br>
<input type="radio" name="nation" value="jpn">일본<br>
<input type="radio" name="nation" value="chn">중국<br>
<!-- form 태그에 지정된 정보를 전달하는 타입 => type=submit -->
<!-- 현재 form에는 radio button 밖에 없기때문에 하나만 선택됨 -->
<input type="submit" value="알려주세요">
</form>
</body>
</html>
package lifecycle;
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("/LC")
public class LifeCycle extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifeCycle() {
// 서블릿이 작동될 때 Tomcat이 가장 먼저 호출하는 생성자
System.out.println("1. LifeCycle():servelet");
}
public void init(ServletConfig config) throws ServletException {
// 브라우저 정보 초기화
System.out.println("2.init()");
}
protected void service(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
/* 요청방식으로 GET가 오면 doGet(), POST가 오면 doPost()
* 부모 클래스의 service() 가 분기해준다. */
System.out.println("3.service()");
/* 원래는 부모의 service가 doGet이나 doPost를 호출하지만 재정의 상태에서는
* super.service()가 없으면 doGet이나 doPost를 호출하지못한다 */
super.service(request,response);
/* super.service(request,response)에 들어가 보면,
* String method = request.getMethod();
* if(method.equals("Get")){
* doGet(request,response);
* } else if(method.equals("POST")){
* doPost(request,response);
* }으로 작동하게 된다. */
}
protected void doGet(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("4. doGet()");
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
System.out.println("5.doPost()");
}
public void destroy() {
// 클래스(현재 서블릿)의 정보가 끝나거나 변경될 때 호출됨
System.out.println("6.destroy()");
}
}
package Web.kahn.edu;
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("/jumin")
public class JuminServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String year = request.getParameter("year");
String age = request.getParameter("age");
String season = request.getParameter("season");
response.setContentType("text/html; charset=utf-8");
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<head>");
sb.append("<title>주민번호 정보 얻기</title>");
sb.append("<style>");
sb.append("table {border:1px solid black; border-collapse:collapse;}" +
"td {padding:10px;}");
sb.append("</style>");
sb.append("</head>");
sb.append("<body>");
sb.append("<table border='1'>");
sb.append("<tr><td>출생년도</td><td>" + year + "</td></tr>");
sb.append("<tr><td>나이</td><td>" + age + "</td></tr>");
sb.append("<tr><td>계절</td><td>" + season + "</td></tr>");
sb.append("</table>");
sb.append("</body>");
sb.append("</html>");
response.getWriter().println(sb.toString());
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>주민번호 폼</title>
<script type="text/javascript">
function check(f){
var jnum=f.jum.value.trim();
var(juminCheck = /^\d{2}[0-1]\d[0-3]\d-[1-4]\d{6}$/; //정규표현식
if(!juminCheck.test(jnum)){
alert("주민번호 형식이 옮바르지 않음");
f.jum.value="";
f.jnum.focus();
return;
}
var y = jnum.substr(0,2); // 주민 번호에서 두 자리를 추출했을 때
var y2 = "19"; //1900년도 인가를 체크
if(y<=22){
y2="20";
}
y2 +=y;
var age = 2020-Number(y2)+1; //+1이 없으면 만 나이
var season;
switch (jnum.substr(2,2)){
case"03": case"04":case"05":
season = "봄";
break;
case"07": case"08":case"09":
season = "여름";
break;
case"09": case"10":case"11":
season = "가을";
break;
case"12": case"01":case"02":
season = "겨울";
break;
}
f.year.value = y2;
f.age.value =age;
f.season.value=season;
f.submit();
}
</script>
</head>
<body>
<form method="post" action="jumin">
주민번호 <input type="text" name="jnum" placeholder="xxxxxx-xxxxxxx">
<input type="button" value="알아보기" onclick="check(this.form)">
<input type="hidden" name="year" value="">
<input type="hidden" name="age" value="">
<input type="hidden" name="season" value="">
</form>
</body>
</html>
'일단 해보는 코딩 > JSP' 카테고리의 다른 글
[JSP] JSP와 DB연결 (0) | 2022.08.18 |
---|---|
[JSP] VO(Value Object), 내장객체 (0) | 2022.08.16 |
[JSP] JSP이란? (0) | 2022.08.16 |
[JSP] 작업설정하기 (0) | 2022.08.16 |
[JSP] 서블릿 환경 설정하기 (0) | 2022.08.11 |