728x90
반응형
Servlet을 사용하기 위해서는
xml파일에 servlet을 지정하거나 index.html에서 해당 서블릿을 호출해줄 수 있다.
※ xml 생성 방법: 프로젝트 우클릭 - Java EE Tools - Generate Deployment Descripter Stub
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" version="4.0">
<display-name>Jsp05_HelloServlet_practice</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
index.html 대신 home.html로 바꾸어 사용해보겠다.
<welcome-file-list>
<welcome-file>home.html</welcome-file>
</welcome-file-list>
01
자, 그럼 xml에서 servlet을 맵핑해주기 전에 java에서 servlet파일을 먼저 만들어 보자.
java - src 안에 패키지를 만든 후 그 안에 아래와 같이 servlet파일을 만든다.
package com.hello.controller;
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 HelloServlet
*/
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
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);
}
}
servlet파일을 만들면 위와 같이 코딩이 되어 있는데, 필요없는 주석들은 제거해주어도 된다.
import 아래에 @webservlet에 주목한다.
※서블릿파일을 만들면 무엇보다 가장 먼저 해주어야하는 것이 있다.
1. get방식/post방식 중에 선택하고 만일 post방식을 사용한다면 doGet메소드에 doPost을 호출해 준다.
2. 글자깨짐을 방지하기 위해 UTF-8인코딩을 반드시 잡아준다.
(하지 않을 경우 프로젝트가 진행된 후 언젠가 굉장히 슬퍼질 수 있다고 한다)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Get방식으로 들어옴!");
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Post 방식으로 들어옴!");
//servlet만들면 가장먼저 incoding부터 잡기!
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
}
HelloSerlvet의 doPost메소드에 아래의 내용까지 마친 후 home.html로 돌아가서 serlvet이 함께 실행될 수 있도록 만들어 보겠다.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String command = request.getParameter("command");
System.out.println("["+command+"]");
PrintWriter out = response.getWriter();
out.print("<h1 style='background:skyblue;'>Hello, servlet</h1");
out.print("<h2>계층구조/라이프사이클/url맵핑</h2>");
out.print("<a href='home.html'>돌아가기</a>");
02
@webservlet 으로 호출하기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Welcome</h1>
<!-- 방법1 -->
<!-- hello라고 요청하면 url /hello인 애가 호출되고 바로 HelloServlet.java에서 바로 새로운 객체가 생성되고,
이때는 init-param을 설정해주지 않았기 때문에 init-param이 실행되지 않는다. -->
<form action="HelloServlet" method="post">
<input type="hidden" name="command" value="postHello"/>
<input type="submit" value="Hello"/>
</form>
</body>
</html>
init-param으로 실행하기
<home.html>
<h1>Welcome</h1>
<!-- 방법1 -->
<a href="controller.do?command=getHello">Hello</a>
<!-- web.xml에서 controller.do했을때 설정한 hello라는 이름의 servlet객체가 만들어지고 init-param이 담겨있다. -->
<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" version="4.0">
<display-name>Jsp05_HelloServlet_practice</display-name>
<welcome-file-list>
<welcome-file>home.html</welcome-file>
</welcome-file-list>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:oracle:thin:@localhost:1521:xe</param-value>
</context-param>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.hello.controller.HelloServlet</servlet-class>
<init-param>
<param-name>driver</param-name>
<param-value>oracle.jdbc.driver.Oracle.Driver</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/controller.do</url-pattern>
</servlet-mapping>
</web-app>
728x90
반응형
'Web > Jsp_servlet' 카테고리의 다른 글
RSS/JSTL/XML Tag Library (0) | 2020.08.26 |
---|---|
[Servlet]성적처리프로그램_(Vanilla JS) (0) | 2020.08.26 |
[Servlet]SCOPE_page_request (0) | 2020.08.14 |
[JSP]로그인만들기_02 (0) | 2020.08.13 |
[JSP]로그인만들기_01 (0) | 2020.08.13 |