Java @使用xml中的init参数的WebServlet

Java @使用xml中的init参数的WebServlet,java,servlets,web.xml,init-parameters,Java,Servlets,Web.xml,Init Parameters,我正在检查web servlet的新注释,但我不明白的是,如何从易于修改的位置传递初始参数(init param)。是的,我找到了注解@WebInitParam,但这意味着您必须将值写入代码中,我想这没有抓住web.xml中易于更改的要点 那么这里有什么交易?在这种情况下不要使用@WebServlet?是的,您可以 在常量文件中 public static String SOME_STRING= "stringVal"; 然后将其导入servlet import static somethin

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

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

是的,您可以

在常量文件中

public static String SOME_STRING= "stringVal";
然后将其导入servlet

import static something.Constants.SOME_STRING;

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

现在,您只需更改
常量即可满足所有需要。

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

Servlet:

@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>"
        );
    }
}
flip=getInitParameter(“flip”)
的值设置为
flop
,如
web.xml
中所指定



顺便问一下,我想知道这是JBoss的一个特性还是标准它是标准的,请参阅第8.2.1章“web.xml的模块化”。

注释的要点实际上是允许您更灵活地接受参数(即使您的参数是常量)

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

[hostname]/my-service/api?myParameter1=myValue1&myParameter2=myValue2
@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");

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

[hostname]/my-service/api?myParameter1=myValue1&myParameter2=myValue2
@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,然后用于发出HTTP请求,那么您就可以实现所需的功能。

是否可以动态加载某个字符串?非最终?我粘贴了我的。你可以通过删除最终修改器来分配它们。我所做的是我有一个配置xml,我在部署时使用了一个servlet,它通过指定启动时的加载来运行。在这个servlet中,所有的fied都在填充。你是在问在web应用程序启动后对web.xml所做的更改是否对servlet可见吗?John O:不,再次阅读q。我很困惑,@WebServlet不应该取代对web.xml的需求吗?我不确定这个用例到底有多有效