시작
제일먼저 만들고싶은 웹페이지가 필자가 속해있는 야구팀(Mysterya)에 관한 웹페이지 이기때문에 package
명은 com.Mysterya.web
으로 생성하고 진행하였다.
학습하고 실험은 모두 Test
에서 진행하고 이후에 필요한 부분을 활용하여 새로이 class를 생성하고 명명하려한다.
진행
서블릿 클래스를 구현하기위해 HttpServlet
클래스를 상속받는다.
package com.Mysterya.web;
import jakarta.servlet.http.HttpServlet;
public class Test extends HttpServlet{
}
Tomcat v9
까지는 상속받을 경우 자동으로 javax.servlet.http.HttpServlet
을 import하지만Tomcat v10
부터는 jakarta.servlet.http.HttpServlet
를 import하는것으로 바뀌었다.
package com.Mysterya.web;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class Test extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
}
}
이후 service
함수를 Override
하기위해 service를 입력후 자동입력을하면 쉽게 불러와준다.
필요한 항목도 import해준다. //TODO
구문과 super
구문은 필요없기에 삭제해준다.
편의를 위해 기본으로 arg0
, arg1
로 되어있는 변수를 reqs
,resp
로 바꿔주었다.
기본적인 문자열출력을 위해 writer
를 사용하였다. 파일읽어 binary로 전달하는게 아니고, 다국어(한글)을 사용하기에 stream
이아니라 writer
를 사용하였다.
-stream 사용
package com.Mysterya.web;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class Test extends HttpServlet{
@Override
protected void service(HttpServletRequest reqs, HttpServletResponse resp) throws ServletException, IOException {
OutputStream os = resp.getOutputStream();
PrintStream out = new PrintStream(os, true);
out.println("hello");
}
}
-writer사용
package com.Mysterya.web;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class Test extends HttpServlet{
@Override
protected void service(HttpServletRequest reqs, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("안녕");
}
}
import 줄이 길어지기에 java.io.*
이런식으로 import해도 되기는 하지만 그냥 진행하려고한다.
WEB-INF/web.xml
안에 <servlet></servlet>
, `
임의로 ~/hello
를 입력했을 때 매핑을 해보았다.
```HTML
<web-app>
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.Mysterya.web.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
```
이를 Annotation
으로 쉽게 사용할 수 있다.
package com.Mysterya.web;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class Test extends HttpServlet{
@Override
protected void service(HttpServletRequest reqs, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("안녕");
}
}
Servlet 3.x
이상에서 가능한 방법이며 webapp/WEB-INF/web.xml
에서 metadata-complete="false"
로 수정해주어야 한다
이 값이 true
이면 모든 설정이 web.xml
에 있으니 여기서 찾으라는 의미지만 우리는 각각에 Annotation
을 해줄거기 때문에 false
로 변경해준다.
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0"
metadata-complete="false">
Annotation
이 겹치게 되면 어느것이 먼저나오는지는 모르겠는데 꼬이게되므로 주의하자
마지막으로 콘텐츠 형식과 인코딩 형식을 지정해준다.
package com.Mysterya.web;
import java.io.*
import jakarta.servlet.*
import jakarta.servlet.http.*
//servlet /hello로 치면 이문서를 불러온다
@WebServlet("/hello")
public class Test extends HttpServlet {
@Override
protected void service(HttpServletRequest reqs, HttpServletResponse resp) throws ServletException, IOException {
//이문서는 UTF-8로 작성되었다.
resp.setCharacterEncoding("UTF-8");
//이문서의 타입은 text/html이고 UTF-8로 읽어라
resp.setContentType("text/html; charset=UTF-8");
//전달받는 입력값을 UTF-8로 받겠다.
reqs.setCharacterEncoding("UTF-8");
}
request
와 response
는 서버입장이 아니라 사용자입장에서 생각해야 편하다.
'JSP' 카테고리의 다른 글
4. get, post (0) | 2022.03.22 |
---|---|
2. 톰캣, 이클립스 설치 (0) | 2022.03.21 |
1. 공부의 시작 (0) | 2022.03.20 |