我正在检查web servlets 的新注释,但我不明白如何从容易修改的位置传递初始参数(init-param
)。是的,我找到了注释@WebInitParam
,但这意味着你必须在代码中写入值,我猜想错过了在web.xml中轻松更改的重点。
所以这里有什么交易?在这种情况下不要使用@WebServlet
吗?
答案 0 :(得分:5)
一个有趣的用例,事实证明你可以(我的配置: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>"
);
}
}
内部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 specification,第8.2.1章“web.xml的模块化”。
答案 1 :(得分:0)
注释的目的实际上是让您更灵活地接受参数(即使您的参数将是常数值)。
如果您需要参数的常量值,则可以在某个地方定义它们,然后构造一个在查询字符串中包含值的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,然后使用该常量来发出HTTP请求,则可以实现所需的内容。
答案 2 :(得分:-2)
是的,你可以。
在你的常量文件
中public static String SOME_STRING= "stringVal";
然后在servlet中导入
import static something.Constants.SOME_STRING;
@WebInitParam(name=SOME_STRING ,.....)
现在您只需更改Constants
即可满足您的所有需求。