Java @使用xml中的init参数的WebServlet
我正在检查web servlet的新注释,但我不明白的是,如何从易于修改的位置传递初始参数(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
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的需求吗?我不确定这个用例到底有多有效