如何使用 WebFlux 将请求路由到不同的 servlet
我正在尝试将某些旧的肥皂服务从一个应用程序(Spring WebMVC,boot,tomcat)迁移到另一个应用程序(Spring WebFlux,boot,netty).这些服务是使用Apache CXF编写的. 因此,在原始项目中,它们曾经工作正常,并且使用了以下配置: // imports @Configuration public class SoapWebServiceConfig { @Bean(name = "cxf") public SpringBus springBus() { var loggingFeature = new LoggingFeature(); loggingFeature.addSensitiveProtocolHeaderNames(Set.of("Server", "Accept", "Date")); loggingFeature.setPrettyLogging
26 2024-04-23
编程技术问答社区
Servlet 中的请求和会话
我在Web中的请求和会话中有非常简单的问题.当我从带有不同选项卡的同一浏览器或通过新窗口请求一个同一页面时,会话ID和会话创建时间相同. 我从Internet Explorer中完成了这一点.但是,当使用其他浏览器(例如Google Chrome)并访问同一页面时,则在其他会话ID和会话创建时间.就我的理解而言,HTTP请求是无状态的. 因此,在我的情况下,它似乎在同一浏览器中与不同的http请求在同一浏览器中并不是通过容器创建新的servlet创建的新线程.所以我得出结论: 如果请求是从同一浏览器发送带有不同选项卡的同一浏览器或当时通过另一个新窗口发送的,则请求始终将相同的线程用于具有相同会话ID的Servlet操作.如果请求是从不同的浏览器发送的,则新的HTTP请求将带有新的会话ID.因此,我的问题是无状态的吗?如果请求是从不同的浏览器发送的?如果我在春季声明scope="request">和scope="session">,那么它也遵循相同的情况?如果我的理解是错
28 2024-04-22
编程技术问答社区
Servlet 会话行为和 Session.invalidate
假设我有一个Web.xml中定义的servlet的Web应用程序. 然后我将其部署在tomcat上. 然后我打开浏览器,然后转到该servlet的链接,被调用. 然后我关闭浏览器窗口. 会话的行为?在这种情况下,它是如何创建,破坏的? 如果此servlet与所有Web应用程序"分离",并且仅使用post&get获取参数,因此,它根本不需要会话,如果一个使用session. )? 解决方案 Servlet容器通常使用(1)http cookie或(2)在每个URL中添加一个额外的参数jsessionid. 当用户访问此站点并且已经不存在会话时,将为他创建一个新的会话,包括相应的HttpSession.如有必要,可以将用户重定向到登录页面. Session.invalidate的效果基本上是:"为此用户丢弃当前会话.如果他在网站上访问另一个页面,将创建一个新的会话". 到目前为止,我知道,会话无效通常用于实现注销功能. 我不会在您
38 2024-04-22
编程技术问答社区
如何跟踪会话创建
问候 我有一个用弹簧框架制成的应用程序,并部署在apache,tomcat 我在Tomcat Manager上看到该应用程序中有许多未使用的会话 我想追踪何时创建此会话以及谁在创建它们,如何这样做? 解决方案 制作HttpSessionListener,在Web.xml中注册(或使用Servlet 3.0). 每当创建会话时,都会触发sessionCreated(..)方法. 其他解决方案 您可以安装lambdaprobe或fork psiprobe 您这样的详细信息.两者都是开源产品,使用情况与Tomcat Manager非常相似. Lambdaprobe似乎不再维护. 但是请参阅" psiprobe"会话列表屏幕截图,您可以看到每个会话的年龄和IP. http://psi-probe.googlecode.com/svn/wiki/protaut/session-list.png
10 2024-04-22
编程技术问答社区
HttpSession 中的信息过多
嗨,您如何看待这个问题? 我们确实在HttpSession中确实有太多信息,因为计算了许多信息,并且需要一些大图来存储在请求之间. . 使用Memcache之类的任何缓存是否合适?还是与增加JVM的内存相同? 担心在请求之间将其存储在DB中.如果我们得到什么,您会使用什么 OUTOFMEMORY错误? 谢谢. 解决方案 我认为真正的观点是您数据的寿命. 考虑Httpsession的这两个特征: 在群集中,容器负责复制 httpsession.这很好(您不必自己管理),但是如果这会导致太多交流,则可能是危险的……如果您的应用程序没有集群,请忘记这一点. httpsession的寿命可以是几分钟或几个小时,即用户保持活动状态.这非常适合具有寿命(连接信息,偏好,授权...)的信息.但是它不适合从一个屏幕到另一个屏幕有用的数据,我们将其称为瞬态+数据. 如果您有聚类需求,则数据库会处理它.但是要当心,您不能在内存中缓存任何东西. 存储
12 2024-04-22
编程技术问答社区
为什么 Apache servlet 是单例?
HttpServletRequest request; HttpServletResponse response; public void doGet(HttpServletRequest request , HttpServlet response){ this.request = request; this.response = response; } 如果此servlet一次收到多个请求会发生什么? 我们面临着响应不匹配的问题.这是一个问题吗? 解决方案 这是一个问题,永远不要建议将httpservletrequest request/httpservletresponse响应作为实例变量.实际上,Servlet正在实现单线模型,这意味着仅创建一个Servlet实例.和每个请求的一个线程.因此,如果他们的要求很多,那么THR必须是许多线程,并且每个线程共享相同的Servlet实例,它将创建数据不匹配或数据不一致
14 2024-04-22
编程技术问答社区
我需要保存一些图片,如何将 ByteArrayInputStream 转换为 FileInputStream?
请求标题: Accept:*/* Accept-Encoding:gzip, deflate Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Content-Length:61425 Content-Type:multipart/form-data; boundary=----WebKitFormBoundarysqFOqeLTqOafwiDl Cookie:JSESSIONID=F98C35E6649DC6997616A2CCB70A946A; save=F98C35E6649DC6997616A2CCB70A946A Host:192.168.0.105:8080 Origin:http://192.168.0.105:8080 Referer:http://192.168.0.105:8080/list User-Agent:Mozilla/5.0 (Macintosh; In
22 2024-04-22
编程技术问答社区
如何在 struts2-core 2.3.16.1 上访问 ServletRequestAware?
我将Struts2版本从2.3.14更改为2.3.16.1,似乎最新版本不支持ServletRequestAware和ServletResponseAware,我该怎么办?我在网上找不到任何东西. org.apache.struts struts2-core 2.3.16.1 jar 代码 import org.apache.struts2.interceptor.ServletRequestAware; public class MyExample implements ServletRequestAware, ServletResponseAware { 错误 package org.apache.st
14 2024-04-22
编程技术问答社区
URL 中的两个连续点将 URL 导航向后移动一步
我对在URL中使用模式点 - 肺的使用(访问Apache Tomcat WebApps文件夹中的Servlet应用程序)的使用情况很少.使用点滴度 - 溶质(/..;/)将URL恢复到一个步骤. 原始问题(仅点点模式)是目录遍历漏洞,该漏洞已在最新版本中与Tomcat 6.0.18,domainname/../manager/html归一化为domainname/manager/html(404错误).但是在6.0.37中,我们可以用dot-dot-spemicolon与domainname/..;/manager/html重新产生相同的漏洞,然后我们可以访问tomcat内部文件夹(例如admin url),并提示我tomcat Manager用户名和密码的凭据.这里domainname是客户端URL访问了tomcat中部署的servlet应用程序,并且客户端URL在httpd.conf中配置为 DocumentRoot /usr/local
16 2024-04-22
编程技术问答社区
HttpServlet 类中的 doGet()/doPost() 方法与超类 GenericServlet 的 service() 方法的关联在哪里?
下面的图像描述了servlet架构. servlet架构 它说 httpservlet 类无需实现服务()方法,因为它被 genericservlet class所照顾. httpservlet 类只能实现doget()和dopost()方法. 怀疑 在此图层次结构中,doget()和dopost()的签名在哪里,即如何在grenicservlet类中触发doget()/dopost()/dopost()/dopost()的实现,因为即使是抽象签名doget()和dopost()在genericservlet类中不存在. 问题 我有一个信念,在Service()方法()方法中都有一个嵌套的调用.这是正确的看法还是以其他方式起作用? 解决方案 您的怀疑几乎是正确的,对doGet(),doPost()的调用,而其他方法则在HttpServlet类中,它扩展了GenericServlet.这是从Servlet Api Jar的3.1版中获取的(请参阅
24 2024-04-22
编程技术问答社区
如何在具有 HTML 结构的 PrintWriter 中向 jsp 发送 HttpServletResponse
我试图将HTML代码中的表发送到JSP 使用 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("")..... 然后使用响应.sendredirect(JSP名称)将表发送到JSP; ,但这从来没有与我一起使用,我怀疑印刷作者对Servlet JSP通信进行了特定的操作. 更新:更清楚 在一个JSP中,我有各种参数,我将所有参数都发送到servlet. 这个; servlet构建了一个表格,其中所有捕获request.getParameter的参数. 当使用out.println构建HTML表时: response.setContentType(" text/html"); printwriter out = response.getWriter(); out.println(""); out.pr
14 2024-04-22
编程技术问答社区
HttpSession session=request.getSession(false); ruturning null
我的代码是 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub HttpSession session=request.getSession(false); if(session==null){ response.sendRedirect(request.getContextPath()); }else{ doPost(request,response); } } 此Servlet的URL模式为/loginservlet. 我编写了此代码,以便如果用户登录并通过在URL上输入Enter来提出get请求,则必须将请求转发到dopost() 否则,如果
26 2024-04-22
编程技术问答社区
部署中丢失:在某些 Tomcat 配置中,session.getAttribute() 返回 NULL
我正在遇到几个问题,这些问题是我第一次看不见的.这个故事很简单,但是我想解决方案是一些真正的配置/部署问题/不一致的背后. 我已经定义了一个JSP和两个servlet. JSP将某些内容放入会话中,servlet应该获取数据并操纵数据.主要症状是,在看到Chrome和Firefox中的JSP时,Servlet看不到会话数据.有趣的是,使用Eclipse内部浏览器以及使用Internet Explorer(在Win7上工作)时,JSP/Servlet确实共享数据. . 这里有一些很长的描述,以及有关本地配置的一些信息(以及后续症状)(而且我相信存在问题):我已经在C:\ labs \ eclipse和Eclipse和Eclipse下安装了Eclipse(Helios) c:\ labs \ tomcat下的打开包装的tomcat(7.0.12).我还安装了启动tomcat的sysdeo插件. 首先,当我使用sysdeo eclipse插件按钮启动tomcat时,然后尝试
10 2024-04-22
编程技术问答社区
如何使用杰里科 HTML 解析器解析 XML
我是Java和Servlet的新手,目前正在尝试使用Jericho XML解析器解析XML. 例如,我想从每个链接标签中获得链接,但剂量不显示任何内容,总数为27(只能获得正确的总数,没有字符串). 任何知道如何的人,请教我. 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.net.MalformedURLException; import java.net.URL; im
10 2024-04-22
编程技术问答社区
如何使用 servlet 在 mysql 数据库中对密码进行散列和加盐处理?
这是我从我的servlet中拥有的 Random random = new Random(); String salt = Integer.toString(random.nextInt(1000000000 - 1 + 1) + 1); String sql = "insert into users (user_name, salt, password) " + "values (?, ?, ?)"; c = DriverManager.getConnection( url, username, password ); PreparedStatement pstmt = c.prepareStatement( sql ); pstmt.setString( 1, userName ); pstmt.setString( 2, salt); pstmt.setStri
22 2024-04-22
编程技术问答社区
会话超时时间
有没有办法找出用户的会话保持有效的时间(直到耗尽)? ? 我想在页面上显示这次. 我知道如何设置超时,但找不到如何进行当前时间. 解决方案 我认为您应该在浏览器中使用普通JavaScript跟踪时间,并使用每个AJAX/WebSocket重置. 您无法在服务器上跟踪它,因为要检查您需要提出请求的时间,这将更新会话. 其他解决方案 有一个 getlastAccessedtime()在会话对象上,可能会有所帮助.
24 2024-04-22
编程技术问答社区
未为上下文根请求发送 Tomcat 会话 cookie
我有一个我想要基于时间的会话的Web应用程序,因此在另一个选项卡上重新加载页面可以保持相同的内容. 因此,在web.xml中我有: any /* 30 sid 1800 根据我的上下文名称,将cookie设置为适当的到期,其路径为/app/. 现在,如果我向/app/或/app/main之类的URL提出请求,则会传递cookie.但是,/app的根上下文路
10 2024-04-22
编程技术问答社区
在网络应用程序之间共享对象时发生类转换错误
注意:这不是交叉播音(尽管这与我的其他问题有关在同一tomcat的WebApps之间共享对象) 我有2个在两个上下文中运行的WebApps:C1,C2(均在根之后).我在C1中放置了一个startuplistener来共享一个变量,而C2中的另一个可以检索它.问题是,如果我共享一个内置数据类型的对象(例如hashmap,integer,...)是可以的,但是不能施放自定义数据类型.例如,如果我有一个命名用户的自定义类,并传递该类型的对象,则会发生ClassCastror. 我在C1中的startuplistener是: public void contextInitialized(ServletContextEvent sce) { User user = new user("name"); Integer exampleInt = 1; ServletContext context =
10 2024-04-22
编程技术问答社区
禁用 Servlet HttpSession cookies
在Web应用程序中,用户登录时,使用HttpSession s = request.getSession(true);创建a HttpSession 这将在浏览器上创建一个用jsessionid的cookie. 但是,如果在浏览器上禁用cookie,我该如何进行登录? 解决方案 如果cookie被禁用.您应该使用URL重写机制进行会话跟踪. 代码示例: 其他解决方案 登录的主要目的是识别用户.用户的基本信息存储在cookie中,该信息基本上是包含jsessionId的文本文件.这是我们想要的jsessionid,而不是饼干本身.因此,我们可以握住jsessionId并将其与URL融合,我们仍然能够访问Httpsession对象中的内容.
20 2024-04-22
编程技术问答社区
在点击 jsp 页面按钮时调用 servlet
我想在JSP按钮上拨打Servlet Controller.我无法使用表单提交按钮,因为我对其进行了其他操作.除了Ajax的电话外,还有其他方法可以打电话给Servlet吗?我想知道,是否有任何选项,例如以下代码 Go to servlet 解决方案 是, servlet的 doget方法被映射到可以用URL直接访问的特定URL上.使用Dopost 方法是不可能的. 例如: 如果我有一个称为TestServlet的servlet,它具有url-pattern testme, 然后,我可以使用这样的Achor标签访问此Servlet: Go to servlet web.xml Te
16 2024-04-22
编程技术问答社区