在简单的 servlet 代码上找不到基本名称 javax.servlet.LocalString 的捆绑包



我正在尝试学习使用servlet和JSP。我想测试一下它是如何通过NetBeans(使用Glassfish服务器(工作的。我创建了一个web项目(JavaAntforWeb(,并添加了一个servlet。我没有对它进行大量修改,因为我只是在测试。我部署了它,index.jsp也工作了,但当我尝试通过映射访问servlet时,我得到了一个HTTP500错误。

异常jakarta.servlet.ServletException:实例化servlet类测试时出错。MyDateServlet

根本原因java.lang.ExceptionInInitializeError

根本原因java.util.MissingResourceException:找不到基本名称javax.servlet.LocalStrings、locale en_US 的捆绑包

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>MyDateServlet</servlet-name>
<servlet-class>test.MyDateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyDateServlet</servlet-name>
<url-pattern>/MyDateServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

MyDateServlet.java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author FE
*/
public class MyDateServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet MyDateServlet (Servlet version) </title>");            
out.println("</head>");
out.println("<body>");
out.println("<h1>Today's date is:  " + request.getContextPath() + "</h1>");
out.println(new java.util.Date());
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}

这是一个非常简单的代码,修改量很小,但我不太确定为什么会出现错误。我的java已经更新,我目前正在库中使用JavaEE7neneneba API。

您已经混合了Servlet技术的主要版本。

几年前,Oracle将其Java EE规范和技术捐赠给了Eclipse基金会。这些被重新命名为雅加达EE

作为转换的一部分,包名称从javax.*更改为jakarta.*。我在你的问题中看到了这两个,所以我知道你的API版本和库中有一个主要的混乱。选择其中一个,但不能同时选择两者。

您需要使API、库/依赖项和部署容器都保持一致。您需要使用带有javax.命名的旧版本,或者使用`jakarta.*命名的新版本。如果你刚开始购买新产品,我会推荐后者。

搜索以了解有关此转换的更多信息。它在许多地方被多次报道,包括行业媒体、YouTube和Jakarta.EE网站。

虽然我不能100%确定这种过渡不匹配是你麻烦的原因,但我敢打赌。

最新更新