[JSP/Servlet] @WebServlet 안되는 에러

DANI·2023년 12월 4일

JSP/Servlet

목록 보기
9/9
post-thumbnail

🚫 @WebServlet 안되는 에러

<?xml version="1.0" encoding="UTF-8" ?>
<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_6_0.xsd"
         version="6.0"
         metadata-complete="true">

    <!-- 서블릿 이름은 유일해야함 -->

    <servlet>
        <servlet-name>hello-servlet</servlet-name>
        <servlet-class>servlets.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello-servlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>board-servlet</servlet-name>
        <servlet-class>servlets.BoardServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>board-servlet</servlet-name>
        <url-pattern>/board</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>login-servlet</servlet-name>
        <servlet-class>servlets.LoginServlet</servlet-class>
        <init-param>
            <param-name>key1</param-name>
            <param-value>value1</param-value>
        </init-param>
        <init-param>
            <param-name>key2</param-name>
            <param-value>value2</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>login-servlet</servlet-name>
        <url-pattern>/member/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>join-controller</servlet-name>
        <servlet-class>controllers.JoinController</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>join-controller</servlet-name>
        <url-pattern>/member/join</url-pattern>
    </servlet-mapping>


    <filter>
        <filter-name>filter-ex01</filter-name>
        <filter-class>filters.ex01</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter-ex01</filter-name>
        <url-pattern>/member/login</url-pattern>
    </filter-mapping>


    <filter>
        <filter-name>filter-ex02</filter-name>
        <filter-class>filters.ex02</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter-ex02</filter-name>
        <url-pattern>/member/login</url-pattern>
    </filter-mapping>


    <filter>
        <filter-name>filter-common</filter-name>
        <filter-class>filters.CommonFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter-common</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

💾 HiController 파일

package controllers;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hi")
public class HiController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("<h1>안녕하세요</h1>");
    }
}

🚫 404 에러 발생..


🔑 해결방안

💾 web.xml 파일

<?xml version="1.0" encoding="UTF-8" ?>
<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_6_0.xsd"
         version="6.0"
         metadata-complete="true">

metadata-complete="true" : metadata-complet="true"를 포함하게 되면 스캔해야 하는 시간을 줄이게 된다는 것이다. 즉 클래스들을 스캔을 하지 않아 내가 설정한 annotations들을 읽어들이지 않는다.

metadata-complete="true"의 디폴트값은 false이다.

참고 : https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=woosuk288&logNo=220282261776&parentCategoryNo=&categoryNo=19&viewDate=&isShowPopularPosts=false&from=postView

0개의 댓글