3

我正在检查 Web servlet的新注释,但我不明白如何init-param从容易修改的位置传递初始参数 ()。是的,我找到了注释@WebInitParam,但这意味着您必须将值写入代码,我想这错过了在 web.xml 中轻松更改的重点。

那么这里有什么交易?在这种情况下不要使用@WebServlet

4

3 回答 3

5

一个有趣的用例,事实证明你可以(我的配置:JBoss 7.1.1):

小服务程序:

@WebServlet(name="fooServlet", urlPatterns="/foo")
public class FooServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String flip = getInitParameter("flip");
        resp.getWriter().println("<html>" +
            "<head><title>" + getServletName() + "</title></head>" +
            "<body>From " + getServletName() + ": " + flip + "</body>" +
            "</html>"
        );
    }
}

里面web.xml(注意名称相同,没有<servlet-class>指定):

<servlet>
    <servlet-name>fooServlet</servlet-name>
    <init-param>
        <param-name>flip</param-name>
        <param-value>flop</param-value>
    </init-param>
</servlet>

的值flip = getInitParameter("flip")设置为flop,如web.xml!


顺便说一句,我想知道这是 JBoss 的功能还是标准功能。它是标准的,请参阅Servlet 3.0 规范,第 8.2.1 章“web.xml 的模块化”。

于 2013-09-26T09:06:08.220 回答
0

注解的意义在于让你更灵活地接受参数(即使你的参数是常量值)。

如果您需要参数的常量值,您可以在某处定义这些值,然后构造一个 URL,该 URL 将您的值包含在查询字符串中。然后,您可以使用该 URL 向您的服务发出 HTTP 请求。例如,您可以构造一个如下所示的 URL:

[hostname]/my-service/api?myParameter1=myValue1&myParameter2=myValue2

然后,您可以使用此 URL 向GET您的服务发出请求,如下所示:

@WebServlet(
        name = "MyServletName",
        description = "MyDescription",
        urlPatterns = {"/my-service/api"},
        initParams={
            @WebInitParam(name="myParameter1", value="Not provided"),
            @WebInitParam(name="myParameter2", value="Not provided")
        }
    )
public class MyServlet extends HttpServlet {


    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException 
    {

      String parameter1 = request.getParameter("myParameter1");   
      String parameter2 = request.getParameter("myParameter1");

...

@WebInitParam仅用于在未提供这些参数的值的情况下定义默认参数值。因此,如果您在某处有用于构造 URL 的常量,然后使用该 URL 来发出 HTTP 请求,您就可以实现您正在寻找的东西。

于 2019-05-23T02:09:01.113 回答
-2

是的你可以。

在你的常量文件中

public static String SOME_STRING= "stringVal";

然后在servlet中导入

import static something.Constants.SOME_STRING;

@WebInitParam(name=SOME_STRING ,.....)

现在您只Constants为满足您的所有需求而更换。

于 2013-09-26T08:42:06.337 回答