<filter>
<filter-name>AsynServlete</filter-name>
<filter-class>com.kad.app.action.AsynServletT</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AsynServlete</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>

http://localhost:8080/AppService/asyncServlet/testAsyn?

用上边地址请求, 爆错,

严重: Servlet.service() for servlet [applicationContext] in context with path [/AppService] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.FilterChain]: Specified class is an interface] with root cause
org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.FilterChain]: Specified class is an interface
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:)

奇怪了这个异步以前用着很正常的, 就因为我注释了一下再 打开, 出了问题......这个问题磨蹭到下午..............

起先是部署到resin 里边,程序爆错. 中间担心resin 的支持servlet 3.0 跟tomcat 有区别. 我想换成另一种不在web.xml  filter 的方式,  
@WebServlet(asyncSupported=true,urlPatterns="/asyncComplete")   这种多方便 不用一个个写过滤的, 结果这种方式也也需要继承一个接口HttpServlet.

还是换成webserlet的方式吧...

后来发现web filter 过滤的方式,过滤url-pattern 后边的/需要加上*号   .还是建议 用webservlet的方式

这种异步有两种实现方式,一个是另起一个异步线程,另一种是线程池,请求过来的链接放到线程池里边处理,这种一般应用于并发比较大的情况.

为了保留过滤的方式 在此记录上过滤的方式  先配置web.xml 设置一条过滤规则

com.kad.app.action.AsynServlet  这个是项目内接受异步请求的类
<filter>
<filter-name>AsynServlete</filter-name>
<filter-class>com.kad.app.action.AsynServlet</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AsynServlete</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 还得把servlet 下加上

<servlet>
<servlet-name>applicationContext</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-common.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>

下边

/*package com.kad.app.action;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.AsyncContext;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet; import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.google.common.eventbus.Subscribe;
import com.google.gson.Gson;
import com.kad.app.action.eventregservice.MessageEventReg;
import com.kad.app.redis.impl.RedisImpl;
import com.kad.dev.manage.DevNoOne;
import com.kad.guavaevents.messge.RTUnLockMessage;
import com.kad.netty.service.kdNettyServer; @Controller
@RequestMapping("/asyncServlet")
public class AsynServlet implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub }
@RequestMapping(value="/testAsyn")
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
// System.out.println("start");
PrintWriter out = response.getWriter();
AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(5000);
asyncContext.addListener(new MyAsyncListener());
Work work=new Work(asyncContext,request);
new Thread(work).start();
response = asyncContext.getResponse();
// PrintWriter out1 = response.getWriter(); out.print("异步执行中");
}
@Override
public void destroy() {
} class Work implements Runnable
{ private AsyncContext asyncContext;
private ServletRequest request;
public Work(AsyncContext asyncContext,ServletRequest request)
{
this.asyncContext = asyncContext;
this.request = request;
// EventBusCenter.register(this);
} @Override
public void run()
{ ServletResponse response = asyncContext.getResponse();
PrintWriter out;
try {
out = response.getWriter();
out.println("后台线程执行完成");
out.close();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} String devid =request.getParameter("devid"); // PrintWriter out = response.getWriter();
boolean sign=false;
DevNoOne dev= DevNoOne.devone;
RedisImpl redis =new RedisImpl();
while(true){
try {
// out.println("后台线程执行完成");
Thread.sleep(100);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String mess=null;
mess= redis.get(devid);
if(mess!=null) {
if(request.getAsyncContext() != null && asyncContext.getTimeout()>0){
// try {
ServletResponse response = asyncContext.getResponse();
PrintWriter out = response.getWriter();
out.println("后台线程执行完成");
out.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
asyncContext.complete();
break;
}
}
}
}
}
} */

这种似乎是一种土方子....  中间还必须加

一下是第二种方式  简单明了,继承 extends HttpServlet   ,重写doGet 或doPost 也就是你用get方法请求就重写doget ,用post 就重写dopost  
下边程序异步work类里边逻辑没写好,不影响测试.最后的报错跟异步无关.先写上来.调试过程中间有个报错 用post方式请求. 半道出家基础不牢靠啊...
 Status  - HTTP method POST is not supported by this URL

这是指重写了doget 没重写dopost导致......

package com.kad.app.action;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; @WebServlet(asyncSupported=true,urlPatterns="/asyncweb")
public class AsynWebServlet extends HttpServlet{ /**
*
*/
private static final long serialVersionUID = 1L; /* @Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
// request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
System.out.println("start");
PrintWriter out = response.getWriter(); AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(500000);
asyncContext.addListener(new MyAsyncListener());
Work work=new Work(asyncContext,request);
new Thread(work).start();
out.print("异步执行中"); }*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("start");
PrintWriter out = response.getWriter(); AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout();
asyncContext.addListener(new MyAsyncListener());
Work work=new Work(asyncContext,request);
new Thread(work).start();
out.print("异步执行中");
} class Work implements Runnable
{ private AsyncContext asyncContext;
private ServletRequest request; public Work(AsyncContext asyncContext,ServletRequest request)
{
this.asyncContext = asyncContext;
this.request = request;
} @Override
public void run() { if(request.getAsyncContext() != null && asyncContext.getTimeout()>){
try {
ServletResponse response = asyncContext.getResponse();
PrintWriter out = response.getWriter();
out.println("后台线程执行完成");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
asyncContext.complete();
} }
} }

周日传到服务器上

出现了500 错误,

HTTP Status  – Internal Server Error

Type Exception Report

Message Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:)
javax.servlet.http.HttpServlet.service(HttpServlet.java:)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:)
javax.servlet.http.HttpServlet.service(HttpServlet.java:)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal

服务器内部错误, 最终是因为 本地测试用的数据库的表名与线上的表名名字大小写存在不同...linux 对大小写很敏感....

eclipse Filter web.xml 问题解决 异步请求@WebServlet的更多相关文章

  1. eclipse 保存web.xml 和 loading description from 问题的解决

    Eclipse 版本为 2019-06 (4.12.0) 发现开启的时候一直有loading description from ***  ,这个loading description 是web项目加载 ...

  2. struts2设置index.action为主页(另:web.xml编辑卡死问题解决)

    本来是弄拦截器的问题,结果弄主页的时候,还是发现了问题. 公司网站的项目里面,是用index.action作为主页的,访问WEB-INF里面的html文件.可是我设置的却不成功,追根到底,一个原因,s ...

  3. eclipse wtp 没有自动生成 web.xml

    因此,运行servlet 时出错了. 网上查了一下,好像说确实不会自动生成,但是运行应该没有问题的. 幸亏找到了手动生成web.xml的方法,也就不纠结了. http://crunchify.com/ ...

  4. Servlet 3.0 规范(二)注解驱动和异步请求

    Servlet 3.0 规范(二)注解驱动和异步请求 在 Servlet 3.0 时支持注解启动,不再需要 web.xml 配制文件. 一.Servlet 3.0 组件 Servlet 容器的组件大致 ...

  5. web.xml配置遇到的问题

    web.xml<listener>            <listener-class>org.springframework.web.context.ContextLoad ...

  6. web.xml整理

    web.xml,部署描写叙述符文件(专业术语).是在Servlet规范中定义的.是web应用的配置文件(Servlet 3.0已開始放弃使用web.xml,转而使用annotation注解来配置项目) ...

  7. 绝对路径${pageContext.request.contextPath}用法及其与web.xml中Servlet的url-pattern匹配过程

    以系统的一个“添加商品”的功能为例加以说明,系统页面为add.jsp,如图一所示: 图一  添加商品界面 系统的代码目录结构及add.jsp代码如图二所示: 图二   系统的代码目录结构及add.js ...

  8. (转)绝对路径${pageContext.request.contextPath}用法及其与web.xml中Servlet的url-pattern匹配过程

    以系统的一个“添加商品”的功能为例加以说明,系统页面为add.jsp,如图一所示: 图一  添加商品界面 系统的代码目录结构及add.jsp代码如图二所示: 图二   系统的代码目录结构及add.js ...

  9. web.xml中对post请求的乱码问题解决

    直接在web.xml中添加如下代码: <filter> <filter-name>encodingFilter</filter-name> <filter-c ...

随机推荐

  1. 恭喜PBD终于有了自己的物理解释和模型

    之前的position based dynamic 总给人一种野路子的感觉,没有物理意义,没有对应的物理模型一切基于几何的方法. 感觉就是犀稀里哗啦将一堆堆约束按梯度方向迭代解算. 最新muller的 ...

  2. redis读书笔记

    1.redis两种存储机制(持久化) Redis的存储机制分为:Snapshot和AOF 都先将内存存储在内存中. (1)Snapshot当数据累计到一定的阈值,就会触发dump将数据一次性写入到数据 ...

  3. C6.cpp

    可以将 一个array对象赋给另一个对象 对于下标值出现负数的情况下可以解释为在头指针的位置处向前移动对应的字节 可以使用vector.at(n_elem)来获取元素等价于vector[n_elem] ...

  4. redis在实践中的一些常见问题以及优化思路

    1.fork耗时导致高并发请求延时 RDB和AOF的时候,其实会有生成RDB快照,AOF rewrite,耗费磁盘IO的过程,主进程fork子进程 fork的时候,子进程是需要拷贝父进程的空间内存页表 ...

  5. jQuery+php+Ajax文章列表点击加载更多功能

    jQuery+php+Ajax实现的一个简单实用的文章列表点击加载更多功能,点击加载更多按钮,文章列表加载更多数据,加载中有loading动画效果. js部分: <script type=&qu ...

  6. 时效性:NABCD分析结果

    N:失物招领,表白墙,二手跳骚群,里面的信息都没有真正的利用起来,好多有用的信息,全部被覆盖,同时,也有好多信息,使用户不想看到的,时效性,是个重大的问题. 例如:暑假放假,我背着书包拿着行李,等候火 ...

  7. 关联tomcat源代码

    1.进入tomcat官网下载对应版本源代码文件 2. 3..ctrl+鼠标左键 点击Cookie对象 4. 5.

  8. 如何在vs2015中编译并配置tesseract4.0

    1)安装相关软件: 下载ccpan,把路径放到path(右击电脑,选择“属性”,选择左边的“高级系统设置”,选择“环境变量”,找到“系统变量”里面的“path”,点击“编辑”,选择右边的“新建”,输入 ...

  9. 序列号多个input输入demo

    <input class="inputs" type="text" maxlength="4" /> <input cla ...

  10. Json、JavaBean、Map、XML之间的互转

    思路是JavaBean.Map.XML都可以用工具类很简单的转换为Json,进而实现互相转换 1.Map.XML与Json互转 mvn依赖 <dependency> <groupId ...