반응형
흐름도)
Web browser------요청------WAS(Servlet이 들은 class를 부르면 server.xml에 등록되고)---->JVM에 instance가 생성되고---->Servlet이 HTML을 동적으로 생성해 준다----응답---->Web browser에 생성된 HTML을 뿌려줌.
-작성법, life cycle, 요청객체 사용(HttpServletRequest), 응답객체 사용(HttpServletResponse), 관계유지(HttpSession,Cookie), 페이지 이동(forword, redirect), DBCP
*Servlet Life cycle
-
객체생성,사용, 소멸의 단계
-
Generic Servlet이 method제공
-
Container가 관리한다.
-
init( ) : 생성자의 역할을 수행, 최초 접속자에 의해서 1번 호출 (오버 로딩~!!!!!)//일땐 화면응답X?
-
생성자 : 객체생성시 초기화 되어야할 값을 설정하거나, 실행되어야 할 코드를 정의
-
service, doGet,doPost
-
업무처리(요청에 대한 응답 처리)
-
접속자에게 보여줄 페이지 생성
-
접속한 접속자 수 대로 수행(들어오는대로 호출된다-가장 바쁨)
-
destroy( ) :
-
객체가 소멸될때 호출되는 method( JavaSE: finalize( ) )
-
Web Container instance가 사라질 때 호출(접속자가 연결을 끊었다고 호출되지 않는다)
-
가장 마지막에 1번 호출됨.
-
//처음 요청에만 객체를 생성하느라 비교적 느리고 두번째 부터는 균일한 빠른 속도를 갖는다.
*class Life cycle
-
생성(생성자로 1번) -> method(정의한 method 여러번 호출) -> 소멸( finalize( )호출 )
-
=>소멸 : Garbage Collector가 heap에 생성된 객체(instance->heap에 올라감)를 소멸 시킨다.(참조되지 않는 객체-일정시간 사용하지 않아 앞으로도 사용될 확률이 없는 객체)
-
=>Garbage Collector가 동작을 하면 JVM시스템에 부하가 걸린다./자동동작(언제 동작할지는 알 수 없음)/개발자가 호출 : System.gc( );
package day0226;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
//1.HttpServlet 상속
public class LifeCycle extends HttpServlet {
//생명주기 method
public void init() {
System.out.println("============>init method 최초 접속자에 의해 1번 호출(생성자 역할)");
}//init
public void destroy() {
System.out.println("============>Web Container가 종료될때 객체가 사라지면서 1번만 호출.");
}//destroy
//2.응답방식에 대한 처리 method를 Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3.응답방식 설정(MIME-TYPE설정)
response.setContentType("text/html;charset=UTF-8");
//4.출력스트림 얻기
PrintWriter out=response.getWriter();
//5.응답내용 생성
out.println("<strong>방문자 정보</strong><br/>");
out.println("<strong>접속자 ip :</strong>");
out.println(request.getRemoteAddr());
out.println("에서 접속 하셨습니다.");
System.out.println("--------->service,doGet,doPost 모든 접속자에게 호출되어, 여러번 호출 : "+request.getRemoteAddr());
//http://211.63.89.130:8080/servlet_prj/life_cycle
//Console창에서 비정상종료를 하면 destroy가 불리지 않지만 servers를 끊으며 정상종료를 하면 출력된다.
}//doGet
}//class
package day0226;
public class Person {
private String name;
public Person(String name) {
this.name=name;
System.out.println("신입사원 "+name+"님 입사하셨습니다.");
}//Person
@Override
public void finalize() {//객체가 Garbage Collector에 의해 소멸될때 호출된다.
System.out.println(name+"님이 퇴사하셨습니다.");
}//finalize
public String getName() {
return name;
}//getName
}//class
package day0226;
/**
* Garbage Collector를 호출하여 객체를 소멸 시키기(메모리의 여유공간 확보)
* @author owner
*/
public class UseGarbageCollector {
public static void main(String[] args) {
Person p=new Person("이");
p=new Person("김");
p=new Person("정");
p=new Person("공");
p=new Person("이");
System.gc();//가비지 컬렉터 호출
System.out.println("남은 사원 :"+p.getName());
}//main
}//class
*Servlet 호출
-
서버에 올라간 call.html을 요청하여 클라이언트에서 응답 받아 연 페이지에서 이벤트가 발생했을때 method에 정해진 방식으로 넘어가는데, 기본이get[사진]
-
get방식
-
링크로 요청(호출): <a href="서블릿의 url mapping">
-
javaScript 호출 : location href="서블릿 mapping";
-
<Form> 호출 : <form method="get" action="서블릿mapping">
-
<input type="submit">
-
</form>
-
post방식
-
<form method="post" aaction="서블릿mapping">
-
<input type="submit>
-
</form>
<새프젝에 -컨피그-tern해 두개 선택해야 컨트롤+스페이스 먹힘>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="http://localhost:8080/html_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{width:500px; height:250px; margin:0px auto; }
#get{width: 220px; height: 250px; border: 1px solid #333;
border-radius: 10px; box-shadow:10px 10px 10px #333;
float:left; padding-top: 10px; padding-left: 5px}
#post{width: 220px; height: 250px; border: 1px solid #333;
border-radius: 10px; box-shadow:10px 10px 10px #333;
float:right;padding-top: 10px; padding-left: 5px}
</style>
<!-- CDN을 사용하여 jQuery를 다운로드 받아 사용. -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$(".link").click(function(){
movePage();
});//click
$("#btnGet").click(function(){
movePage();
});//click
$("#frmGet").click(function(){
//javascript에서 action, method를 변경
var obj=document.frm;
//method 변경 : obj.method="변경할 method"
obj.method="get";
//action 변경 : obj.action="변경할 action"
obj.action="../test_call";
//alert(obj.method+" "+obj.action);
obj.submit();
});//click
$("#btnPost").click(function(){
/* var obj=document.frmPost;
obj.submit(); */
$("#postFrm").submit();
});//click
});//ready
function movePage(){
if(confirm("이동하시겠습니까?")){
//location.href="../test_call";//뒤로가기 가능
location.replace("../test_call");//뒤로가기 불가능
}//end if
}//movePage
</script>
</head>
<body>
<div id="wrap">
<!--
서블릿의 요청 URL : http://localhost:8080/servlet_prj/test_call
HTML의 요청 URL : http://localhost:8080/servlet_prj/day0226/call_servlet.html
-->
<div id="get">
<strong>GET방식의 요청</strong>
<div>
<ul>
<li><a>태그 : <a href="../test_call">요청</a></li>
<li>
location.href 요청 : <a href="#void" class="link">Javascript 요청</a>
<input type="button"value="JavaScript요청" class="btn" id="btnGet"/>
</li>
<li>
<!-- javaScript에서 method와 action을 설정하여 이동 -->
<form name="frm">
<input type="button" value="요청" class="btn" id="frmGet"/>
</form>
</li>
</ul>
</div>
</div>
<div id="post">
<strong>POST방식의 요청</strong>
<div>
<form method="post" action="../test_call" name="frmPost" id="postFrm">
<!-- <input type="submit" value="post요청" class="btn" id="btnPost"/> -->
<input type="button" value="post요청" class="btn" id="btnPost"/>
</form>
</div>
</div>
</div>
</body>
</html>
package day0226;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
//1.HttpServlet상속
public class TestCall extends HttpServlet {
//2.요청방식을 처리할 수 있는 method Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3.응답 장식 설정
response.setContentType("text/html;charset=UTF-8");
//4.출력스트림 얻기
PrintWriter out=response.getWriter();
//5.출력 내용 생성
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>GET방식의 요청 처리 </title>");
out.println("<style type='text/css'>");
out.println("span{font-weight:bold; font-size:20px; color:#0000FF}");
out.println("</style>");
out.println("<body>");
out.println("<span>GET방식의 요청 처리</span><br/>");
out.println("<a href='day0226/call_servlet.html'>뒤로</a>");
out.println("</body>");
out.println("</html>");
}//doGet
//2.요청방식을 처리할 수 있는 method Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3.응답 장식 설정
response.setContentType("text/html;charset=UTF-8");
//4.출력스트림 얻기
PrintWriter out=response.getWriter();
//5.출력 내용 생성
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>POST방식의 요청 처리 </title>");
out.println("<style type='text/css'>");
out.println("span{font-weight:bold; font-size:15px; color:#FF0000;}");
out.println("</style>");
out.println("<body>");
out.println("<span>POST방식의 요청 처리</span><br/>");
out.println("<a href='javascript:history.back();'>뒤로</a>");
out.println("</body>");
out.println("</html>");
}//doPost
}//class
반응형
'국비지원학원 > HTML,JavaScript,jQ' 카테고리의 다른 글
88일차-JavaEE_parameter처리/페이지 이동(forward,redirect) (0) | 2019.03.09 |
---|---|
87일차-JavaEE_HttpServletRequest (0) | 2019.03.08 |
85일차-jQuery_effect/plugin+Servlet (0) | 2019.03.07 |
84일차-jQuery_태그의 값 설정/값 얻기 (0) | 2019.03.05 |
83일차-jQuery_selector/Event Handling/DOM (0) | 2019.03.03 |