Tag: servlets

Java Servlets – Ajax请求带有混合响应

我得到了一些奇怪的结果,几乎同时向同一个java servlet发送多个异步AJAX调用。 例如,假设我使用jQuery同时发送两个AJAX请求。 //ajax call foo $.post(‘LookupServlet’, { method: ‘findFoo’ }; //ajax call bar $.post(‘LookupServlet’, { method: ‘findBar’ }; 在我的servlet中,它调用给定的方法。 该方法将响应写入流。 奇怪的是,foo有时会得到bar的响应。 反之亦然。 或者有时一个ajax调用正在获得两个响应。 或者一个请求获得响应而另一个请求不响应。 在其他服务器端语言中我以前从未见过这样的东西,我甚至都不知道它是可能的。 有没有人有任何关于为什么会这样的理论? Java servlet如何在同时请求可以获得交叉响应的情况下运行?

Java Servlet不会停止推送通知

我有一个servlet,它将HTML5服务器发送的事件发送到jsp客户端。 servlet每秒向客户端发送一次数据。 jsp客户端实例化一个新的事件源并接收数据。 当窗口即将关闭时,jsp客户端在“beforeunload”事件中关闭eventsource(如下面的代码所示)。 但是,我注意到即使客户端关闭了事件源并且浏览器退出,服务器也会继续发送数据。 至于有关eventsource的文档,使用eventsource.close()足以阻止客户端重新连接到服务器,服务器将停止发送任何进一步的推送通知。 编辑:我在此链接上阅读了StackOverflow 上的类似问题。 但是,答案是在聊天中讨论的,因此无法访问它。 任何人都可以帮助我理解为什么即使在eventsource.close()和浏览器退出后服务器也没有停止发送推送通知? 我是否写了任何其他代码来通知服务器在客户端退出后停止发送数据? 感谢帮助。 这是我简化的服务器代码: import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; /** * Servlet implementation class ServletForSSE */ @WebServlet(“/ServletForSSE”) public class ServletForSSE extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ […]

Spring MVC 4.2+ CORS返回403

我创建了一个新的简单的Spring MVC应用程序(使用4.2.1.Release,现在切换到4.2.7.Release)。 该应用很简单: WEB.XML: proxy org.springframework.web.servlet.DispatcherServlet 1 dispatchOptionsRequest true contextConfigLocation classpath*:my-cool-context.xml proxy /* 语境: 和控制器 @Controller @RequestMapping(“/”) @CrossOrigin public class MySupercoolController { @CrossOrigin @RequestMapping(path=”test”, method = RequestMethod.POST) @ResponseBody private ResponseEntity executePostProxy(HttpServletRequest request){ return new ResponseEntity(“TEST”, HttpStatus.OK); } } 现在 – 控制器本身正在工作并返回我的文本,因此控制器被加载到上下文中。 但是该端点的preflightRequest正在获得403 Forbidden响应,并且没有设置CORS响应heaeders。 我正在使用JBOSS,但我已经validation了OPTIONS请求到达Spring(正在执行FrameworkServlet doOptions方法,通过调试器检查)。 在Spring MVC中我还应该为CORS配置什么吗? BTW上下文CORS配置和Annotation配置 – 我试图让它工作,所以我尝试使用xml,注释和两者。

HttpServletResponse.setStatus()工作一次,再次调用时什么都不做 – 在Java 8 / Tomcat 9.0.0和Java 10 / Tomcat 9.0.8之间进行更改?

我有一个在Tomcat 9下运行的Java servlet,作为正常流程的一部分,它会多次调用HttpServletResponse#setStatus() 。 当使用Java 8(1.8.0u144,由Tomcat报告为1.8.0_144-b01 )在Tomcat 9.0.0.M26上运行时,这很好用。 当在带有Java 10.0.1的Tomcat 9.0.8.0上运行时(由Tomcat报告为10.0.1+10 ),似乎在响应对象上调用setStatus()实际上只会导致响应状态设置一次 ,之后HTTP状态无法再更改。 但是,通过HttpServletResponse #setHeader()发送到客户端的其他标头似乎不受此影响; 即使setStatus()不再执行任何操作,setHeader()也会成功添加标头。 没有发送可能导致HTTP标头终止的中间输出数据。 这是一个最小的工作示例: package org.example; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(“/HttpResponseStatusTestServlet”) public class HttpResponseStatusTestServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append(“Testing “); response.setStatus(505); response.setStatus(506); response.getWriter() .append(“Served […]

何时提交或刷新servlet响应?

根据javadoc: in- request.getRequestDispatcher(“/Test”).forward(request,response); 应该在将响应提交给客户端之前调用forward(在刷新响应主体输出之前)。响应缓冲区中的未提交输出在转发之前自动清除。 当这个响应被提交或被刷新时,我感到困惑? 这是printwriter println写的。

JAVA Tess4j doOCR()不工作,exception“内存访问无效”

我在eclipse中的动态Web项目中工作,我创建了一个包含以下内容的TesseractOCR类: public class TesseractOCR { public TesseractOCR() { } public String doOCR(String file) { System.setProperty(“jna.library.path”, “32”.equals(System.getProperty(“sun.arch.data.model”)) ? “lib/win32-x86” : “lib/win32-x86-64”); File imageFile = new File(“C:\\Users\\Sherein Dabbah\\Downloads\\ca096-d7a6d799d7a1d798d799d7a72.jpg”); Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping Tesseract1 instance1 = new Tesseract1(); instance.setLanguage(“heb+eng”); // Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping // File tessDataFolder = LoadLibs.extractTessResources(“tessdata”); […]

java.lang.NullPointerException Hibernate与Ehc​​ache一起使用

我将Hibernate 4.1.2与Ehcache 2.4.3一起使用(在下载hibernate时与hibernate一起发布)。 我的hibernate.cfg.xml: com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://localhost:1433;databaseName=Stock_indices xxx xxx true org.hibernate.dialect.SQLServerDialect update 5 20 300 50 30 true true org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory ehcache-entity.xml ehcache-entity.xml: mapping.xml 但是,我得到了这个例外: java.lang.NullPointerException at org.hibernate.cache.ehcache.internal.util.HibernateUtil.loadAndCorrectConfiguration(HibernateUtil.java:64) at org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory.start(SingletonEhCacheRegionFactory.java:91) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:281) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) ………… 看来hibernate无法加载配置? 我该如何解决这个问题? (serlvet在没有使用Ehcache的情况下工作正常)。 我的servlet类: package stockdataservlet; import java.io.IOException; import java.math.BigDecimal; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; […]

JSP / Servlet设计问题 – 通过JNDI全局提供请求/响应

在PHP中,总是能够从代码的任何部分访问当前请求或响应。 这个概念是PHP编程的基础。 请求数据,响应数据,会话数据(等)始终存在 ! 这在Java Servlets中不会发生! 为了能够访问代码中的HttpServletRequest,HttpServletResponse,HttpSession(等),您需要将它们作为函数变量传递。 这意味着您无法对本质上“知道”所有这些内容的Web框架进行编码,并消除了传递它们的复杂性。 所以,我设计了这个解决方案: 创建anf注册ServletRequestListener。 requestInitialized事件将当前的HttpServletRequest绑定到JNI上下文,给出当前Thread的名称(Thread.currentThread()。getName()); 在requestDestroyed事件解除绑定上面的JNI资源以进行清理。 这样,可以从代码的任何位置访问当前请求/响应,因为它们始终存在于JNI上下文中,并且可以通过提供当前线程的名称来检索。 所有已知的servlet容器都为每个请求实现单线程模型 ,因此请求无法混淆(当然,不能忘记清理它们)。 此外,每个Web应用程序的JNI资源在默认情况下是分开的 ,因此不存在混淆它们的问题或者可能由访问其他Web请求的Web应用程序引起的安全问题。 有点扭曲,但又好又简单…… 你怎么看?

从AJAX调用异步Servlet

我想要完成的并不是太复杂,但是由于我不精通AJAX,所以我遇到了一些麻烦。 当它实现时,我将有一个JSP,它有一个调用异步Servlet的按钮。 servlet将运行一个长时间运行的任务,并通过在完成部分任务时向表中添加行来向用户提供动态反馈。 在我尝试编写最终版本之前,我正在做一个概念validation,以了解它将如何工作。 但是,我遇到了麻烦。 当我在单击按钮时使用AJAX调用时,该函数在调用常规同步servlet时按预期工作。 但是,只要我使servlet异步,就不会显示更新。 是否有人能够提供一些有关出错的信息? 我的JSP看起来像这样: $(document).ready(function() { $(‘#mybutton’).click(function() { $.get(‘someservlet’, function(responseJson) { $.each(responseJson, function(index, item) { $(”).appendTo(‘#somediv’); $(”).text(item.row1).appendTo(‘#somediv’); $(”).text(item.row2).appendTo(‘#somediv’); $(”).text(item.row3).appendTo(‘#somediv’); $(”).text(item.row4).appendTo(‘#somediv’); }); }); }); }); Click to add things 我的异步Servlet doGet()方法如下所示: response.setContentType(“application/json”); response.setCharacterEncoding(“UTF-8”); final AsyncContext asyncContext = request.startAsync(); final PrintWriter writer = response.getWriter(); asyncContext.setTimeout(10000); asyncContext.start(new Runnable() { @Override public void run() […]

Servlet:处理许多可选参数

只是想知道是否有一种更优雅或标准的方式来处理可选参数,或者你是否必须检查每一个是否为空。 我有10多个可选参数,所以它有点难看。 理想情况下,我想要像bash命令: getopts 。 public class MapImageServlet extends HttpServlet { … constructor and other methods … protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // OPTIONAL PARAMETERS if(request.getParameter(“boarderSize”) != null){ double boarderSize = Double.valueOf(request.getParameter(“boarderSize”); } if(request.getParameter(“boarderThickness”) != null){ double boarderThickness = Double.valueOf(request.getParameter(“boarderThickness”); } if(request.getParameter(“boarderColor”) != null){ double boarderColor = Double.valueOf(request.getParameter(“boarderColor”); } … […]