html 창이 뜨는데 창 브라우저를 바꾸고 싶다면
창 브라우저 변경
이클립스에서
File => new => Project => Web => Dynamic Web Project 생성(name지정, New Runtime = Apache Tomcat 버전 지정, Dynamic web module version = 2.5, 3.0이상) => finish
확인방법 => 프로젝트 마우스 우클릭 => Build path 안에 Libarary => Classpath => Apache Tomcat 버전 확인.
서블릿 생성 => src(마우스 우클릭) => new =>Servlet => 패키지(action), 클래스 이름 지정=>next로 맵핑 이름 변경 수정 추가 가능 => next => Inherited abstract methods, service체크 나머지는 상관없음 =>finish
생성된 코드 예)
확인방법: 빌드 확인이나 ip는 주소 창에 (http://192.168.100.199:8080/3.0proj/You)후 콘솔 창 확인
package action;
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("/You")
public class HiServlet 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 + "님이 접속했습니다.");
res.setContentType("text/html; charset=utf-8");//한글깨짐을 위함
PrintWriter out = res.getWriter();//브라우저에 결과를 출력
out.printf("%s님 방문을 환영합니다", ip);//브라우저에 결과를 출력
System.out.println("--HelloServlet:service() Call--");
}
}
서블릿에 HTML 넣기1
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("/YOUR")
public class HelloServlet4 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String ip = req.getRemoteAddr();
System.out.println(ip+"님이 접속했습니다.");
res.setContentType("text/html; charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>환영합니당</title>");
out.println("<style>h1{color:red}</style>");
out.println("</head>");
out.println("<body>");
out.printf("<h1>[%s]님의 방문을 환영합니다.</h1>",ip);
out.println("</body>");
out.println("</html>");
System.out.println("HelloServlet");
}
}
파라미터 변수
*서블릿에서 인자를 주어서 호출한다면 http://localhost:8080/web.kahn.edu/Greet?nation=eng 식으로 호출 할 때 이를 파라미터 변수로 처리 한다. http로 전송되는 파라미터 변수는 문자열을 처리해주는 String 객체 타입으로 해주면 (필요 시 숫자 등도 포함)된다.
서블릿에 파라미터 변수1)- 주소창에 파라미터 변수 넣어줌
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 req, HttpServletResponse res)
throws ServletException, IOException {
String nation = req.getParameter("nation");//문자타입으로 파라미터 변수 처리
String msg = "";
if(nation ==null || nation.isEmpty()) {
nation ="kor";
}
if(nation.contentEquals("kor")) {
msg = "안녕";
}else if(nation.contentEquals("eng")) {
msg = "Hello";
}else if(nation.contentEquals("jpn")) {
msg = "こんにちは";
}else if(nation.contentEquals("chn")) {
msg = "你好";
}
res.setContentType("text/html; charset=utf-8");
PrintWriter out = res.getWriter();
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<head>");
sb.append("<title>인사말</title>");
sb.append("<html>");
sb.append("</head>");
sb.append("<body>");
sb.append(msg);
sb.append("</body>");
sb.append("</html>");
out.print(sb.toString()); //전송 스트링 버퍼를 담아서 출력
}
}
ex1-1)WebContent 안에 HTML파일 작성(각국인사말)
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<!-- <meta charset="UTF-8">-->
<title>각국 인사말</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>
ex사칙연산2 -서블릿
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("/Calc")
public class CalcServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int su1 = Integer.parseInt(request.getParameter("su1"));
int su2 = Integer.parseInt(request.getParameter("su2"));
String result1 = " 결과 : " + (su1 + su2);
String result2 = " 결과 : " + (su1 - su2);
String result3 = " 결과 : " + (su1 * su2);
String result4 = " 결과 : " + (su1 / su2);
String result5 = String.format("%d %% %d = %d", su1, su2, (su1%su2));
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<head>");
sb.append("<title>계산기</title>");
sb.append("</head>");
sb.append("<body>");
sb.append(result1 + "<br>");
sb.append(result2 + "<br>");
sb.append(result3 + "<br>");
sb.append(result4 + "<br>");
sb.append(result5 + "<br>");
sb.append("<a href='calc.html'>다시하기</a>");
sb.append("</body>");
sb.append("</html>");
out.print(sb.toString());
//response.getWriter().println(sb.toString()); 도 가능
}
}
ex사칙연산2-1 WebContent 안에 HTML파일 작성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>4칙 연산</title>
</head>
<script type="text/javascript">
function myClick(f) {
var su1 = f.su1.value.trim();
var su2 = f.su2.value.trim();
var num_pattern = /^[0-9]+$/' <!-- 정규표현식으로 0~9가지 확인 -->
if (!num_pattern.test(su)) {
alert("숫자를 입력하세요");
f.su1.value= "";
f.su1.focus();
return;
}
if (!num_pattern.test(su2)) {
alert("숫자를 입력하세요");
f.su2.value= "";
f.su2.focus();
return;
}
f.su1.value = su1;
f.su2.value = su2;
// form의 정보를 calc 서블릿으로 전송!!
// f.action="calc";
f.submit();
}
</script>
</head>
<body>
<form name="fff" action="calc“>
수1 : <input type="text" name="su1" value=""><br>
수2 : <input type="text" name="su2" value=""><br>
<input type="button" value="확인" onclick="myClick(this.form)">
</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(): Servlet");
}
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() 메써드가 없으면 doPOST나 doGET을 호출하지 않는다.
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("3.doGET()");
}
protected void doPost(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("4.doPOST()");
}
public void destroy() {
// 클래스 (현재 서블릿)의 정보가 끝나거나 변경될 때 호출됨
System.out.println("5.destroy()");
}
}
exex민증확인3 -서블릿
package lifecycle;
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());
}
}
ex민증확인3-1 WebContent 안에 HTML파일 작성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>주민번호 폼</title>
<script type="text/javascript">
function check(f){
var jnum = f.jnum.value.trim();
var juminCheck =/^\d{2}[0-1]\d[0-3]\d-[1-4]\d{6}$/;
// 주민번호 유효성 확인 정규표현식 표현
if (!juminCheck.test(jnum)){
alert("주민 번호 형식이 옳바르지 않음")
f.jnum.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 "06": case "07" : case "08":
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>
Servlet session, cookie, application 사용법 (Calc 프로그램) (0) | 2022.08.16 |
---|---|
Servlet (Server + let) 자바 웹 프로그램 (0) | 2022.08.12 |