JSP Servlet 서블릿

MINJU KIM·2023년 12월 12일

JSP

목록 보기
30/30

서블릿Servlet

서버 단에서 클라이언트의 요청을 받아 처리한 후 응답하는 역할.

특징

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트.
  • MVC 모델에서 컨트롤러 역할
  • 모든 메서드는 스레드로 동작
  • jakarta.servlet.http패키지의 HttpServlet 클래스를 상속받는다.

https://webfirewood.tistory.com/38

//HelloServlet.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>HelloServlet</title>
</head>
<body>
<h2>web.xml에서 매핑 후 JSP에서 출력하기</h2>
<p>
    <strong><%=request.getAttribute("msg")%></strong>
    <br/>
    <a href="./HelloServlet.do">바로가기</a>
</p>

</body>
</html>
//HelloServlet.java
package com.servlet;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("msg", "Hello Servlet...");
        req.getRequestDispatcher("/13/HelloServlet.jsp").forward(req, resp);
    }
}



//AnnoMapping.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Annotation Mapping</title>
</head>
<body>
<h2>Annotation으로 매핑하기</h2>
<p>
    <strong>${msg}</strong>
    <br/>
    <a href="<%=request.getContextPath()%>/13/AnnoMapping.do">바로가기</a>
</p>

</body>
</html>
//AnnoMapping.java
package com.servlet;


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 java.io.IOException;

@WebServlet("/13/AnnoMapping.do")
public class AnnoMapping extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("msg", "@Webservlet으로 매핑");
        req.getRequestDispatcher("/13/AnnoMapping.jsp").forward(req, resp);
    }
}



//DirectServletPrint.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>DirectServletPrint.jsp</title>
</head>
<body>
<h2>어노테이션으로 매핑 후 Servlet에서 직접 출력하기</h2>
<form method="post" action="../13/DirectServletPrint.do">
    <input type="submit" value="바로가기"/>
</form>
</body>
</html>
DirectServletPrint.java
package com.servlet;

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 java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/13/DirectServletPrint.do")
public class DirectServletPrint extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html; charset=UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<html>");
        writer.println("<head><title>DirectServletPrint</title></head>");
        writer.println("<body>");
        writer.println("<h2>서블릿에서 직접 출력합니다.</h2>");
        writer.println("<p>jsp로 포워드하지 않습니다.</p>");
        writer.println("<body>");
        writer.println("<html>");
        writer.close();
    }
}



//FrontController.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>FrontController.jsp</title>
</head>
<body>
<h2>한 번의 매핑으로 여러 가지 요청 처리하기</h2>
${resultValue}
<ol>
    <li>URI : ${ uri }</li>
    <li>요청명 : ${ commandStr }</li>
</ol>
<ul>
    <li><a href="../13/regist.one">회원가입</a></li>
    <li><a href="../13/login.one">로그인</a></li>
    <li><a href="../13/freeboard.one">게시판</a></li>
</ul>
</body>
</html>
//FrontController.java
package com.servlet;

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 java.io.IOException;

@WebServlet("*.one")
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
    String uri = req.getRequestURI();
    int lastSlash = uri.lastIndexOf("/");
    String commandStr = uri.substring(lastSlash);

    if(commandStr.equals("/regist.one")){
        registFunc(req);
    }else if(commandStr.equals("/login.one")){
        loginFunc(req);
    }else if(commandStr.equals("/freeboard.one")){
        freeboardFunc(req);

    }
    req.setAttribute("uri", uri);
    req.setAttribute("commandStr", commandStr);
    req.getRequestDispatcher("/13/FrontController.jsp").forward(req, resp);
}
    //페이지별 처리 메서드
    void registFunc(HttpServletRequest req){
        req.setAttribute("resultValue", "<h4>회원가입</h4>");
    }

    void loginFunc(HttpServletRequest req){
        req.setAttribute("resultValue", "<h4>로그인</h4>");
    }

    void freeboardFunc(HttpServletRequest req){
        req.setAttribute("resultValue", "<h4>자유게시판</h4>");
    }
}

결과



로그인과 게시판도 나오지만 생략.

0개의 댓글