2012-03-30 81 views
2

嗨,如果有人可以看我的代码,也许看到我不是的东西,这是为我的班级任务的实验室。谢谢!JavaEE中的Init-param动态Web应用程序返回null

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

当我尝试在我的servlet中获取init-param的值时。它保持返回null。

任何人看到什么不对,我不是:

IM使用命令:

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

在课堂上ConvertServlet是在a00730628.controller包中的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()); 
     } 


    } 

} 
+0

对不起,不包括,但没有我没在初始化 – 2012-03-30 21:37:27

+0

调用super.init(配置)我要添加servlet代码到我的文章 – 2012-03-30 21:42:32

+0

它结束了在功能的doPost我 – 2012-03-30 21:45:17

回答

4

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

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

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

+0

真棒谢谢你! = D我要让我的截止日期 – 2012-03-31 19:17:41

+0

工作就像一个魅力!我只是在xml中添加了servlet映射并删除了注释。现在我知道你必须使用一个或另一个!非常感谢 – 2012-03-31 19:25:26

0

如果您使用的是Tomcat 7,那么使用注释(如果您尝试在servlet中使用annotaion,例如@WebServlet(“/ welcome”)),并使用web.xml显示initParameter,则返回null。所以如果你想通过web.xml显示Init参数,然后删除注释,它将工作。

相关问题