【问题标题】:Java : different init parameters to same servlet based on different URL patterenJava:基于不同的 URL 模式对同一个 servlet 的不同初始化参数
【发布时间】:2014-07-14 12:52:57
【问题描述】:
是否可以将默认参数发送到相同的 servlet 但在 url-patterns 上不同。
就像我有一个 servlet /Add 不同的 url 模式,如 /AddPerson 或 /AddEmplyoee 将映射到 /Add servlet。但是我想在调用 /Add servlet 时传递一些参数。就像 /AddPerson 被称为发送类型 = 1 到 /Add Servlet 一样。当/AddEmplyoee 被调用时,发送类型= 2 到/Add Servlet。
我知道我可以使用<init-param> 标签将初始化参数传递给/Add servlet。
是否可以这样做,或者我想为每个不同的操作编写不同的 servlet?
【问题讨论】:
标签:
java
servlets
web.xml
【解决方案1】:
是的。它认为这是可能的。
如果(在 web.xml 中)您定义了 servlet AddPerson(使用 servlet-class=com.foo.Add)和一个 servlet AddEmplyoee (使用 same servlet-class)比您可以使用不同的 init 参数。例如
<servlet>
<servlet-name>AddPerson</servlet-name>
<servlet-class>com.foo.Add</servlet-class>
<init-param>
<param-name>myParam</param-name>
<param-value>MyVal1</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>AddEmplyoee</servlet-name>
<servlet-class>com.foo.Add</servlet-class>
<init-param>
<param-name>myParam</param-name>
<param-value>MyVal2</param-value>
</init-param>
</servlet>
具有以下映射:
<servlet-mapping>
<servlet-name>AddPerson</servlet-name>
<url-pattern>/addperson</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddEmployee</servlet-name>
<url-pattern>/addemployee</url-pattern>
</servlet-mapping>
如果我错了,你可以纠正我,但我认为,这最终会出现在两个单独的 servlet 中(都基于同一个类)。
【解决方案2】:
没有。 Servlet 生命周期不允许 Servlet 重新初始化每个请求(通过参数)。根据The Java EE Tutorial - Initializing a Servlet(已添加重点),
在 web 容器加载并实例化 servlet 类之后,在它传递来自客户端的请求之前,web 容器初始化 servlet。要自定义此过程以允许 servlet 读取持久配置数据、初始化资源和执行任何其他一次性活动,您需要覆盖 Servlet 接口的 init 方法。
至于将请求 uri 映射到参数,你当然可以自己做(使用 Map 和请求路径作为键)。