java - JavaEE Dynamic Web App 中的 Init-param 返回 null

标签 java jakarta-ee servlets web.xml

嗨,如果有人可以查看我的代码,也许会看到我没有看到的东西,这是我的类作业的实验室。谢谢!

我正在使用 eclipse 在动态 Web 项目中编写一个简单的 servlet。实验要求之一是从 Servlet 中的 web.xml 获取 init 参数。

当我尝试获取 servlet 中 init-param 的值时。它不断返回 null。

任何人都看到我没有看到的错误:

我使用命令:

this.getServletConfig().getInitParameter("title");

在 a00730628.controller 包中的 ConvertServlet 类中,并在 doPost 函数中。我也尝试了 init 函数,但那里得到了 null,所以我认为我的 xml 中有错误。我使用的是3.0版本和Tomcat 7.26

这是我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<display-name>lab10</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>



<servlet>

<servlet-name>ConvertServlet</servlet-name> 

<servlet-class>a00730628.controller.ConvertServlet</servlet-class>



<init-param>

  <param-name>title</param-name>

  <param-value>Temperature Converter Result</param-value>

</init-param>

</servlet>

</web-app>

编辑添加了我的 Servlet 代码:

package a00730628.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;

import a00730628.util.TemperatureConverter;
import a00730628.view.Lab10Html;

/**
 * Servlet implementation class ConvertServlet
 */
@WebServlet("/convert")
public class ConvertServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final int CEL_2_FAR = 0;
    private static final int FAR_2_CEL = 1;

    private String resultTitle = "";

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ConvertServlet() {
        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().println("<a href='index.html'>Please make a post request from here</a>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        try {
            resultTitle = this.getServletConfig().getInitParameter("title");
            if (resultTitle == null) {
                response.sendError(500, "Title param is null ... wa wa wa");
                return;
            }
            int type = Integer.parseInt(request.getParameter("type"));
            double number = Double.parseDouble(request.getParameter("number"));
            double converted;
            String result = "";
            switch (type) {
                case CEL_2_FAR:
                    converted = TemperatureConverter.celsiusToFarenheit(number);
                    result = String.format("%f celsius = %f farenheit", number, converted);
                    break;
                case FAR_2_CEL:
                    converted = TemperatureConverter.farenheitToCelsius(number);
                    result = String.format("%f farenheit = %f celsius", number, converted);
                    break;

            }
            response.getWriter().print(Lab10Html.getLab10Html(resultTitle, result));
        } catch (NumberFormatException e) {
            response.sendError(400, "Please enter a number like 42. Number format error: "+ e.getMessage());
        }


    }

}

最佳答案

您正在 servlet 中使用注释。要使用注释添加 init 参数,请遵循以下语法并删除 web.xml 中的 servlet 配置。

@WebServlet(name = "convert", urlPatterns = {"/convert"},
  initParams = {@WebInitParam(name="title", value="Temperature Converter Result")}
)

如果您不想使用注释,请从 servlet 类中删除 @WebServlet("/convert")

关于java - JavaEE Dynamic Web App 中的 Init-param 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9949650/

相关文章:

java - 以下代码的复杂度是多少?

java - 值(value)比较让我困惑,无法正常工作

java - 将字节数组从 servlet 监听器传递到 Controller

java - netbeans 中最简单的 servlet 和 web.xml

java - 更好地理解 Java 中的递归

java - Hibernate @id 复合

java - Spring 电子邮件和换行字符

java - 浏览器特定的 session 管理

java - 浏览并选择 Excel 文件并在 java 中从中创建工作簿对象

java - 我可以构造一个具有毫秒分辨率的 jodatime.Duration 对象吗?