@Controller)@Scope("session").Serializable以便在服务器重新启动时可以物理存储它们Serializable,这意味着它所引用的所有服务(其他spring bean)也将被序列化.它们通常是代理,引用了交易管理器,实体管理器工厂等.ApplicationContext通过实现来保持对引用的引用并不是不太可能ApplicationContextAware,因此这可以有效地意味着整个上下文被序列化.并且鉴于它拥有许多连接 - 即不能通过思想序列化的东西,它将在腐败状态下恢复.到目前为止,我大多忽略了这些问题.最近我想到声明我所有的spring依赖项transient并readResolve()通过静态实用程序类将它们重新WebApplicationContextUtils导入,并将请求/ ServletContext保存在ThreadLocal.这很乏味,但它保证了,当反序列化对象时,它的依赖关系将与当前应用程序上下文"保持同步" .
是否有任何公认的做法,或任何序列化春季背景部分的指南.
请注意,在JSF中,托管bean(~controller)是有状态的(与基于动作的Web框架不同).所以也许我的问题更多的是JSF,而不是spring-mvc.
我在jsp页面中看到以下错误 -
javax.servlet.jsp.PageContext cannot be resolved to a type
javax.servlet.jsp.JspException cannot be resolved to a type
Run Code Online (Sandbox Code Playgroud)
我看过一篇关于此的帖子,并尝试了一些建议的事情.BalusC提供了很好的输入 - JSTL1.2和Standard.jar不能一起使用.我做了这个,它解决了一段时间的问题 - 但它再次出现.我不确定我是否还有罐头碰撞.我已经将所有jar定义为Maven中的依赖项.以下是我指定pom.xml的依赖项 -
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.38</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId> …Run Code Online (Sandbox Code Playgroud) 我有这段代码:
resp.addHeader("Content-Disposition", "inline; filename=" + fileName);
Run Code Online (Sandbox Code Playgroud)
当文件名是"a_b_c.doc"或"abc.doc"时,正确显示下载文件的名称.但是,当文件名是"abc .doc"时,下载文件的名称只是"a".
我们怎么解决这个问题?
这就是我的WebFilter样子
@WebFilter("/rest/*")
public class AuthTokenValidatorFilter implements Filter {
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
final Enumeration<String> attributeNames = servletRequest.getAttributeNames();
while (attributeNames.hasMoreElements()) {
System.out.println("{attribute} " + servletRequest.getParameter(attributeNames.nextElement()));
}
final Enumeration<String> parameterNames = servletRequest.getParameterNames();
while (parameterNames.hasMoreElements()) {
System.out.println("{parameter} " + servletRequest.getParameter(parameterNames.nextElement()));
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在网上找到如何获得HTTP headers来自请求的价值.
我没有找到任何东西,所以我试图枚举servletRequest.getAttributeNames()和servletRequest.getParameterNames() …
如何在JSP中获取由Servlet转发的请求URL?
如果我在JSP中运行以下代码,
System.out.println("servlet path= " + request.getServletPath());
System.out.println("request URL= " + request.getRequestURL());
System.out.println("request URI= " + request.getRequestURI());
Run Code Online (Sandbox Code Playgroud)
然后我得到JSP的服务器端路径.但是我想在浏览器的地址栏中看到URL.我可以在转发到JSP的Servlet中获取它,但我希望在JSP中获取它.
我有一个带有HTML表单的JSP页面:
<form action="SERVLET">
<input type="text" name="name"/><br>
<input type="text" name="group"/>
<input type="text" name="pass"/>
<input type="submit" value="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
如何在servlet中获取这些数据并将它们添加到数据库中?
这是我的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}'是预期的.
有什么问题,如何更正此错误?
Forward():这可以通过Request&ServeletContext以两种方式完成.将servlet中的请求转发到服务器上的另一个资源(servlet,JSP文件或HTML文件).转发是在服务器端完成的,没有客户端的知识.
当您调用转发请求时,请求将被发送到服务器上的另一个资源,而不会通知客户端其他资源将处理该请求.此过程完全在Web容器中进行.
只是
include:将在我们当前的文件中包含另一个文件
forward:将当前请求转发到转发页面
org.apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CollegeWebsite]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:962)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1603)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:469)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:332)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:597)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.UnsupportedClassVersionError: com/Servlets/AddCourse : Unsupported major.minor version 51.0 (unable to load class com.Servlets.AddCourse)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2893)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
at org.apache.catalina.startup.WebAnnotationSet.loadClass(WebAnnotationSet.java:480)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:130)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:66)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:381)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:858)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:345)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 11 more …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一些方法可以在两个或更多Servlet之间共享变量或对象,我的意思是一些"标准"方式.我认为这不是一个好习惯,但是构建原型是一种更简单的方法.
我不知道它是否取决于所使用的技术,但我将使用Tomcat 5.5
我想分享一个简单类的对象的Vector(只是公共属性,字符串,整数等).我的目的是拥有像DB一样的静态数据,显然它会在Tomcat停止时丢失.(它只是用于测试)