我正在尝试引用@WebServletContextListener的Servlet 3.0 教程 。 但是,我无法在我的javaee-web-api-6.0.jar依赖(我正在使用maven)中find这样的注释。 那么,@ @WebServletContextListener在哪里呢?
似乎缓慢的Tomcat 7启动问题可以通过在web.xml中将“metadata-complete”设置为“true”来解决,如下所示: <?xml version="1.0" encoding="UTF-8"?> <web-app metadata-complete="true" id="WebApp_ID" version="3.0"… 问题是Tomcat在启动时扫描注解,这显着降低了速度。 我的时间从25秒减less到5秒。 (更多信息: Tomcat和Servlet 3.0 Webconfiguration ) 但是,我在我的代码中有一些注释,如: @ManagedBean @RequestScoped @Override … 我很困惑 – 将我的代码工作后,我已经设置元数据完整=“真”? 我必须删除注释并将所有内容移到web.xml中吗?
问题描述 Servlet-3.0 API允许分离请求/响应上下文,并在稍后进行回答。 但是,如果我尝试写入大量的数据,如: AsyncContext ac = getWaitingContext() ; ServletOutputStream out = ac.getResponse().getOutputStream(); out.print(some_big_data); out.flush() 对于Tomcat 7和Jetty 8,它可能实际上会阻塞 – 而且会阻塞在简单的testing用例中。教程build议创build一个处理这种设置的线程池 – 巫婆通常对传统的10K架构是相反的。 但是,如果我有10,000个打开的连接和10个线程的线程池,即使只有1%的低速连接的客户端或只是阻塞的连接阻塞线程池,并完全阻止彗星响应或减速显著。 预期的做法是获得“写入就绪”通知或I / O完成通知,并继续推送数据。 这怎么可以使用Servlet-3.0 API来完成,也就是说我怎么得到: I / O操作的asynchronous完成通知。 通过写入就绪通知获取非阻塞I / O。 如果Servlet-3.0 API不支持这种情况,那么是否有任何特定于Web服务器的API(如Jetty Continuation或Tomcat CometEvent)可以asynchronous处理这些事件,而不用使用线程池伪造asynchronousI / O。 有人知道吗? 如果这是不可能的,你可以通过参考文档来确认吗? 示例代码中的问题演示 我附上了模拟事件stream的代码。 笔记: 它使用ServletOutputStream抛出IOException检测断开连接的客户端 它发送keep-alive消息,以确保客户仍然在那里 我创build了一个线程池来“模拟”asynchronous操作。 在这样的例子中,我明确定义了大小为1的线程池来显示问题: 启动应用程序 从两个terminal运行curl http://localhost:8080/path/to/app (两次) 现在用curd -dm=message […]
是否可以使用注释来设置JAX-RS应用程序? (使用Servlet 3.0和JAX-RS Jersey 1.1.0) 我试过,没有运气。 似乎需要使用一些web.xml 。 configurationA(正在工作,但有web.xmlconfiguration) web.xml中 … <servlet> <servlet-name>org.foo.rest.MyApplication</servlet-name> </servlet> <servlet-mapping> <servlet-name>org.foo.rest.MyApplication</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> … Java的 @ApplicationPath("/") public class MyApplication extends Application { … } configurationB(不工作,抛出exception) @ApplicationPath("/") @WebServlet("/*") // <– public class MyApplication extends Application { … } 后者似乎坚持认为,应用程序将是一个Servlet的子类(这个例外没有猜测) java.lang.ClassCastException: org.foo.rest.MyApplication cannot be cast to javax.servlet.Servlet 问题 为什么web.xml定义起作用,但注释没有? 有什么不同? 有没有办法让它工作,例如有没有web.xml的JAX-RS应用程序?
在我的应用程序中,我有一个在web.xml中定义的servlet: <servlet> <display-name>Notification Servlet</display-name> <servlet-name>NotificationServlet</servlet-name> <servlet-class>com.XXX.servlet.NotificationServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>NotificationServlet</servlet-name> <url-pattern>/notification/*</url-pattern> </servlet-mapping> 移动到使用Tomcat 7后,我想使用@WebServlet注释来完成这项工作。 这是我做的方式: @WebServlet( name="NotificationServlet", displayName="Notification Servlet", urlPatterns = {"/notification"}, loadOnStartup=1) public class NotificationServlet extends HttpServlet { 它不起作用。 有人能告诉我我做错了什么吗?
我在这里读到,不应该将文件保存在服务器中,因为它不是可移植的,事务性的并且需要外部参数。 但是,鉴于我需要一个tomcat(7)的tmp解决scheme,并且我有(相对)对服务器机器的控制,我想知道: 什么是保存文件的最佳地点? 我应该将其保存在/WEB-INF/uploads (在这里build议)还是在$CATALINA_BASE (见这里 )或…下的某个地方? JavaEE 6教程从用户 (:wtf 🙂 获取path 。 注:文件不得以任何方式下载。 我应该如何设置一个configuration参数? 我会欣赏一些代码(我宁愿给它一个相对path – 所以它至less是Tomcat便携式) – Part.write()看起来很有前途 – 但显然需要一个绝对path 我会对这种方法与数据库/ JCR存储库的缺点进行阐述感兴趣 不幸的是,@BalusC的FileServlet专注于下载文件,而他在上传文件方面的答案跳过了保存文件的部分。 一个易于转换为使用DB或JCR实现(如jackrabbit )的解决scheme将是更可取的。