일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- springboot
- jsp
- Spring
- 알고리즘
- html
- MySQL
- java
- SESSION
- 마이바티스
- 오라클
- 이클립스
- 깃허브
- 버튼
- EL태그
- 제이쿼리
- Oracle
- 필터체인
- 자바
- 폼태그
- 셋업
- jstl
- 설치
- jquery
- 면접
- 깃허브 간단요약
- Eclipse
- 설정
- 자바스크립트
- jsp 내부객체
- 스프링
- Today
- Total
은은하게 코드 뿌시기
서블릿(servlet) 본문
서블릿?
: 자바 기반의 웹 웹 어플리케이션 프로그래밍 언어
* WAS(Web Application Server)
: 서버단에서 애플리케이션이 동작 할 수있또록 지원하는 컨테이너가 포함된서버, 종류로는 tomcat, weblogic(bea), jeus(티맥스-국산),JBoss, Resion등 이 있다.
jsp와의 차이점?
jsp 에서 다이렉트로 요청하는것과는 달리서블릿은 서블릿 컨테이너를 통해 제어하여 웹요청과 응답을 체계적으로 다룰수 있게 한다. jsp는 페이지 요청이 있을시에 최초에 한번 자바코드를 변환 된 후 서블릿 클래스로 컴파일이 됨
일반적으로 서블릿은 동적인 처리를 위한 부분으로 사용되며,jsp에서는 정적인 부분을 담당하고있음.
서블릿 컨테이너?
구현되어있는 servlet클래스의 규칙에 맞게 서블릿을 담고 관리해주는 컨테이너,
클라이언트의 요청을 받아주고 응답할 수 있게 웹서버와 소켓으로 통신 한다.
웹서버와의통신지원, 서블릿생명주기관리, 멀티쓰레드 지원및 관리,선언적인 보안관리 등의 역할을 한다.
ex) 톰캣
서블릿의 주요 클래스
클래스명 | 설명 |
HttpServlet | 서블릿을 만들기위해 반드시 상속해야할 필수 클래스,서블릿을 만들기 위해 제공되는 클래스 |
HttpServeltRequest | 클라이언트가 데이터를 입력등 정보에 대한 요청값을 가지고있는 클래스 |
HttpServeltResponse | 클라이언트가 요청한 정보를 처리하고 다시 응답하기 위한 정보를 담고있는 클래스 |
HttpSession | 클라이언트가 세션정보를 저장하고 세션기능을 유지하기 위해 제공되는클래스 |
서블릿 컨테이너가 기동 되는 순간 서블릿 클래스를 로딩해서 인스턴스화 하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 찾아서 동작합니다. 그리고 서블릿의 생명이 다하는 순간 가비지 컬렉션을 통해 메모리에서 제거합니다.
서블릿라이프사이클
서블릿 기동 -> | 서블릿 클래스 로딩 및 인스턴스화-> | init () (최초한번 호출) -> |
<= Service=> (doget,dopost등 반복적 호출) |
detory (마지막 한번호출) |
1. 브라우저에서 서블릿을 호출하면 WAS는 서블릿 클래스를 로딩합니다.
2. 호출되는 서블릿은 WEB.xml에서 매핑이 되어있습니다.
3. 서블릿 클래스가 로딩되면 인스턴스가 생성되고 약속된 서블릿 life cycle로 init()메소드가 자동적으로 호출 됩니다.
4.호출된 서블릿 인스턴스로 부터 스레드를 생성하고 생성된 서블릿 클래스에 있는 service()메소드를 호출 합니다.
5.서블릿 종료시 destroy()메소드를 호출합니다.
서블릿 생명주기 메서드
메소드명 | 설명 |
init() | 서블릿이 처음으로 요청되어 객체가 생성될때 호출되는 메소드 |
service() | 클라이언트가 요청이 있을때 마다 호출되는 메소드 |
destroy() | 서블릿 서비스의 종료 및 재시작 그리고 서블릿 코드가 수정이 될 떄 호출되는메소드 |
doGet() | 클라이언트 요청 할 때 form의 method가 get방식일 때 호출되는 메소드 |
doPost() | 클라이언트 요청 할 때 form의 method가 post방식 일떄 호출되는 메소드 |
*get방식 : url노출됨
*post방식 :url노출안됨 html헤더 값에 같이 전송
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package test;
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;
/**
* Servlet implementation class test01
*/
@WebServlet("/test01")
public class test01 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public test01() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
package mvc.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import mvc.model.BoardDAO;
import mvc.model.BoardDTO;
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
static final int LISTCOUNT = 5;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String RequestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = RequestURI.substring(contextPath.length());
response.setContentType("text/html; charset=utf-8");
request.setCharacterEncoding("utf-8");
if (command.equals("/BoardListAction.do")) {//등록된 글 목록 페이지 출력하기
requestBoardList(request);
RequestDispatcher rd = request.getRequestDispatcher("./board/list.jsp");
rd.forward(request, response);
} else if (command.equals("/BoardWriteForm.do")) { // 글 등록 페이지 출력하기
requestLoginName(request);
RequestDispatcher rd = request.getRequestDispatcher("./board/writeForm.jsp");
rd.forward(request, response);
} else if (command.equals("/BoardWriteAction.do")) {// 새로운 글 등록하기
requestBoardWrite(request);
RequestDispatcher rd = request.getRequestDispatcher("/BoardListAction.do");
rd.forward(request, response);
} else if (command.equals("/BoardViewAction.do")) {//선택된 글 상세 페이지 가져오기
requestBoardView(request);
RequestDispatcher rd = request.getRequestDispatcher("/BoardView.do");
rd.forward(request, response);
} else if (command.equals("/BoardView.do")) { //글 상세 페이지 출력하기
RequestDispatcher rd = request.getRequestDispatcher("./board/view.jsp");
rd.forward(request, response);
} else if (command.equals("/BoardUpdateAction.do")) { //선택된 글의 조회수 증가하기
requestBoardUpdate(request);
RequestDispatcher rd = request.getRequestDispatcher("/BoardListAction.do");
rd.forward(request, response);
}else if (command.equals("/BoardDeleteAction.do")) { //선택된 글 삭제하기
requestBoardDelete(request);
RequestDispatcher rd = request.getRequestDispatcher("/BoardListAction.do");
rd.forward(request, response);
}
}
//등록된 글 목록 가져오기
public void requestBoardList(HttpServletRequest request){
BoardDAO dao = BoardDAO.getInstance();
List<BoardDTO> boardlist = new ArrayList<BoardDTO>();
int pageNum=1;
int limit=LISTCOUNT;
if(request.getParameter("pageNum")!=null)
pageNum=Integer.parseInt(request.getParameter("pageNum"));
String items = request.getParameter("items");
String text = request.getParameter("text");
int total_record=dao.getListCount(items, text);
boardlist = dao.getBoardList(pageNum,limit, items, text);
int total_page;
if (total_record % limit == 0){
total_page =total_record/limit;
Math.floor(total_page);
}
else{
total_page =total_record/limit;
Math.floor(total_page);
total_page = total_page + 1;
}
request.setAttribute("pageNum", pageNum);
request.setAttribute("total_page", total_page);
request.setAttribute("total_record",total_record);
request.setAttribute("boardlist", boardlist);
}
//인증된 사용자명 가져오기
public void requestLoginName(HttpServletRequest request){
String id = request.getParameter("id");
BoardDAO dao = BoardDAO.getInstance();
String name = dao.getLoginNameById(id);
request.setAttribute("name", name);
}
// 새로운 글 등록하기
public void requestBoardWrite(HttpServletRequest request){
BoardDAO dao = BoardDAO.getInstance();
BoardDTO board = new BoardDTO();
board.setId(request.getParameter("id"));
board.setName(request.getParameter("name"));
board.setSubject(request.getParameter("subject"));
board.setContent(request.getParameter("content"));
System.out.println(request.getParameter("name"));
System.out.println(request.getParameter("subject"));
System.out.println(request.getParameter("content"));
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy/MM/dd(HH:mm:ss)");
String regist_day = formatter.format(new java.util.Date());
board.setHit(0);
board.setRegist_day(regist_day);
board.setIp(request.getRemoteAddr());
dao.insertBoard(board);
}
//선택된 글 상세 페이지 가져오기
public void requestBoardView(HttpServletRequest request){
BoardDAO dao = BoardDAO.getInstance();
int num = Integer.parseInt(request.getParameter("num"));
int pageNum = Integer.parseInt(request.getParameter("pageNum"));
BoardDTO board = new BoardDTO();
board = dao.getBoardByNum(num, pageNum);
request.setAttribute("num", num);
request.setAttribute("page", pageNum);
request.setAttribute("board", board);
}
//선택된 글 내용 수정하기
public void requestBoardUpdate(HttpServletRequest request){
int num = Integer.parseInt(request.getParameter("num"));
int pageNum = Integer.parseInt(request.getParameter("pageNum"));
BoardDAO dao = BoardDAO.getInstance();
BoardDTO board = new BoardDTO();
board.setNum(num);
board.setName(request.getParameter("name"));
board.setSubject(request.getParameter("subject"));
board.setContent(request.getParameter("content"));
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy/MM/dd(HH:mm:ss)");
String regist_day = formatter.format(new java.util.Date());
board.setHit(0);
board.setRegist_day(regist_day);
board.setIp(request.getRemoteAddr());
dao.updateBoard(board);
}
//선택된 글 삭제하기
public void requestBoardDelete(HttpServletRequest request){
int num = Integer.parseInt(request.getParameter("num"));
int pageNum = Integer.parseInt(request.getParameter("pageNum"));
BoardDAO dao = BoardDAO.getInstance();
dao.deleteBoard(num);
}
}
|
cs |