这是我的web.xmlxsd
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
Run Code Online (Sandbox Code Playgroud)
这是servlet节点
<servlet>
<servlet-name>spring1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param> <!-- here is a problem -->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
</servlet>
Run Code Online (Sandbox Code Playgroud)
在标记的行上xml验证器说
cvc-complex-type.2.4.a:从元素'init-param'开始发现无效内容.其中一个'{" http://java.sun.com/xml/ns/javaee ":启用," http://java.sun.com/xml/ns/javaee ":async-supported," http:/ /java.sun.com/xml/ns/javaee ":运行为," http://java.sun.com/xml/ns/javaee ":安全角色引用," HTTP://java.sun .com/xml/ns/javaee ":multipart-config}'是预期的.
有什么问题,如何更正此错误?
可以通过servlet代码中的方法检索DD元素<context-param>和<init-param>两者getInitParameter().
现在的问题是,它如何区分<context-param>和<init-param>?
我是servlets的新手.我使用("name")init在init()方法中获得了DD中的参数getInitParameter.我在doGet()方法中尝试了很多来访问init参数,但它总是返回null.
我试过了
getServletContext().getInitParametr("name")
与
getServletConfig().getInitParametr("name")
但他们都回来了null.我可以在中获取init参数doGet()吗?
我目前的理解是web.xml中的init-params必须放在servlet变量的主体中,如下所示:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>MyServlet</servlet-class>
<init-param>
<description>debug</description>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但如果我将init-param带到servlet体外,那么当我调用getInitParam()时它不再识别它
只是想知道是否可能,因为我有3个servlet,我想分享常见的init参数
<listener>
<listener-class>config</listener-class>
</listener>
<servlet>
<servlet-name>ProcessReg</servlet-name>
<servlet-class>ProcessReg</servlet-class>
<init-param>
<param-name>text</param-name>
<param-value>HelloWorld1</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
public class config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext servletContext = event.getServletContext();
String text1 = servletContext.getInitParameter("text");
Run Code Online (Sandbox Code Playgroud)
在方法中 contextInitialized(ServletContextEvent event),如果有两个servlet,例如,让我们说第二个servlet的名称是,Servlet2并且它可以说已经init - param调用text了值HelloWorld2.
怎么listener 知道服用ProcessRegservlet?
如何param从Servlet2?
我有一个看起来像这样的过滤器:
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>org.TestFilter</filter-class>
<init-param>
<param-name>timeout</param-name>
<param-value>30</param-value>
</init-param>
</filter>
Run Code Online (Sandbox Code Playgroud)
因为我们正在谈论ServletFilter和Servlets.基本上,我已经在我的servlet中并执行了doFilter的第一部分.所以容器必须知道init参数.我没有权限更改Filter类.
是否可以在给定HttpServletRequest对象的情况下获取init-parameter值?
我能想到的唯一解决方案是将web.xml作为资源读取并尝试手动查找值.但感觉有更好的解决方案.
我正在检查Web Servlet的新注释,但是我不明白如何init-param从易于修改的位置传递初始参数()。是的,我找到了注解@WebInitParam,但这意味着您必须将值写入代码中,我想这没有抓住web.xml中易于更改的要点。
那这里怎么办?@WebServlet在这种情况下不使用?