실행 클래스
package servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletEx01 extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("ServletEx01 init() 호출");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("ServletEx01 service() 호출");
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>InitServletEx01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>servlet01</servlet-name>
<servlet-class>servlet.ServletEx01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet01</servlet-name>
<url-pattern>/servlet01</url-pattern>
</servlet-mapping>
</web-app>
=> init은 한 번만 실행되고 service는 호출 받을 때 마다 실행 된다.
실행 클래스
public class ServletEx01 extends HttpServlet {
// 초기 데이터
private String id;
private String password;
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
System.out.println("ServletEx01 init() 호출");
// web.xml에서 초기값을 지정한다
id = getInitParameter("id");
password = getInitParameter("password");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("ServletEx01 service() 호출");
System.out.println("id : " + id);
System.out.println("p/w : " + password);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>InitServletEx01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>servlet01</servlet-name>
<servlet-class>servlet.ServletEx01</servlet-class>
<init-param>
<param-name>id</param-name>
<param-value>tester</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servlet01</servlet-name>
<url-pattern>/servlet01</url-pattern>
</servlet-mapping>
</web-app>
=> 마찬가지로 init은 한 번만 실행된다
: 실행 순서를 지정한다 -> web.xml에서 작성
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>InitServletEx01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<!-- ServletEx01 -->
<servlet>
<servlet-name>servlet01</servlet-name>
<servlet-class>servlet.ServletEx01</servlet-class>
<init-param>
<param-name>id</param-name>
<param-value>tester</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
// //
<load-on-startup>1</load-on-startup>
// //
</servlet>
<servlet-mapping>
<servlet-name>servlet01</servlet-name>
<url-pattern>/servlet01</url-pattern>
</servlet-mapping>
<!-- ServletEx02 -->
<servlet>
<servlet-name>servlet02</servlet-name>
<servlet-class>servlet.ServletEx02</servlet-class>
// //
<load-on-startup>2</load-on-startup>
// //
</servlet>
<servlet-mapping>
<servlet-name>servlet02</servlet-name>
<url-pattern>/servlet02</url-pattern>
</servlet-mapping>
</web-app>
Parameter
서블릿이름?키=값1 -> 다른 jsp
서블릿이름?키=값2 -> 다른 jsp
ex)
controller?action=view1 -> View1Action view1.jsp
controller?action=view2 -> View2Action view2.jsp
URL
값1.do -> 다른 jsp
값2.do -> 다른 jsp
ex)
view1.do -> view1.jsp
view2.do -> view2.jsp
예제1
Action(interface)
controller?path=form -> FormAction form.jsp
controller?path=form_ok -> FormOKAction form_ok.jsp
!!실행순서 잘 파악하기
package controller;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model2.Action;
import model2.ZipcodeAction;
import model2.ZipcodeOkAction;
/**
* Servlet implementation class ZipcodeController
*/
@WebServlet("/controller")
public class ZipcodeController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doProcess(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
try {
request.setCharacterEncoding("utf-8");
String path = request.getParameter("path");
Action action = null;
// 페이지 설정
String url = "/WEB-INF/views/error.jsp";
if(path == null || path.equals("") || path.equals("zipcode")) {
action = new ZipcodeAction();
action.execute(request, response);
url = "/WEB-INF/views/zipcode.jsp";
} else if(path.equals("zipcode_ok")) {
action = new ZipcodeOkAction();
action.execute(request, response);
url = "WEB-INF/views/zipcode_ok.jsp";
}
// 페이지 보여주기
RequestDispatcher dispatcher = request.getRequestDispatcher(url);
dispatcher.forward(request, response);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("에러 : " + e.getMessage());
} catch (ServletException e) {
// TODO Auto-generated catch block
System.out.println("에러 : " + e.getMessage());
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("에러 : " + e.getMessage());
}
}
}
public class ZipcodeDAO {
private DataSource dataSource;
public ZipcodeDAO() {
try {
// 데이터베이스 접속
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup( "java:comp/env" );
this.dataSource = (DataSource)envCtx.lookup( "jdbc/mariadb2" );
} catch( NamingException e ) {
System.out.println( "[에러] " + e.getMessage() );
}
}
public ArrayList<ZipcodeTO> listZipcode(String strDong){
ArrayList<ZipcodeTO> datas = new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = this.dataSource.getConnection();
String sql = "select zipcode, sido, gugun, dong, ri, bunji from zipcode where dong like ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, strDong + "%");
rs = pstmt.executeQuery();
while(rs.next()) {
ZipcodeTO to = new ZipcodeTO();
to.setZipcode(rs.getString("zipcode"));
to.setSido(rs.getString("sido"));
to.setGugun(rs.getString("gugun"));
to.setDong(rs.getString("dong"));
to.setRi(rs.getString("ri"));
to.setBunji(rs.getString("bunji"));
datas.add(to);
}
} catch( SQLException e ) {
System.out.println( "[에러] " + e.getMessage() );
} finally {
if( conn != null ) try {conn.close();} catch(SQLException e) {}
if( pstmt!= null ) try {pstmt.close();} catch(SQLException e) {}
if( rs != null ) try {rs.close();} catch(SQLException e) {}
}
return datas;
}
}
public class ZipcodeTO {
private String zipcode;
private String sido;
private String gugun;
private String dong;
private String ri;
private String bunji;
private String seq;
getter/setter 생성
}
package model2;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Action {
void execute(HttpServletRequest request, HttpServletResponse response);
}
package model2;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ZipcodeAction implements Action {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
}
}
package model2;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model1.ZipcodeDAO;
import model1.ZipcodeTO;
public class ZipcodeOkAction implements Action {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String strDong = request.getParameter("dong");
System.out.println("strDong : " + strDong);
// to dao
ZipcodeDAO dao = new ZipcodeDAO();
ArrayList<ZipcodeTO> datas = dao.listZipcode(strDong);
//System.out.println("갯수 : " + datas.size());
request.setAttribute("datas", datas);
}
}
<?xml version="1.0" encoding="utf-8" ?>
<Context>
<Resource
name="jdbc/mariadb2"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost:3306/project"
username="project"
password="1234" />
</Context>
<%@ 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>
우편번호 검색<br><br>
<form action="controller" method="post">
<input type="hidden" name="path" value="zipcode_ok"/>
동 이름 <input type="text" name="dong"/>
<input type="submit" value="검색"/>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model1.ZipcodeTO" %>
<%@ page import="java.util.ArrayList" %>
<%
ArrayList<ZipcodeTO> datas = (ArrayList)request.getAttribute("datas");
StringBuilder sbHtml = new StringBuilder();
sbHtml.append("<table width='800' border='1'>");
for(ZipcodeTO to : datas) {
sbHtml.append("<tr>");
sbHtml.append(" <td>" + to.getZipcode() + "</td>");
sbHtml.append(" <td>" + to.getSido() + "</td>");
sbHtml.append(" <td>" + to.getGugun() + "</td>");
sbHtml.append(" <td>" + to.getDong() + "</td>");
sbHtml.append(" <td>" + to.getRi() + "</td>");
sbHtml.append(" <td>" + to.getBunji() + "</td>");
sbHtml.append("</tr>");
}
sbHtml.append("</table>");
out.println(sbHtml);
%>
</body>
</html>