Tag: servlets

使用自定义身份validation筛选器时,使用getRemoteUser()访问用户名

简短版本:当我使用自定义身份validationfilter时,如何让HttpServletRequest.getRemoteUser()返回用户名? 长版: 我正在修改当前使用声明性安全性(web.xml和tomcat-users.xml)的Tomcat应用程序,而不是使用自定义(由我编写)身份validationfilter(从javax.servlet.Filter派生)。 关于如何做到这一点有很多信息,看起来非常简单。 但是,现有的应用程序调用HttpServletRequest.getRemoteUser() ,我假设除非我在我的filter中设置此属性,否则它将返回null。 我找不到有关如何在filter中填充getRemoteUser()属性的任何信息(没有setRemoteUser() )。 我发现那里的post建议将请求对象包装在filter中。 如果必须,我会这样做,但我希望有一种侵入性较小的方法来实现这一目标。 有人可以帮忙吗?

在jsp中处理浏览器的“后退”按钮

我有一个jsp搜索页面(Search.jsp)和一个结果页面(Result.jsp),它们都可以选择搜索条件。 然后将参数传递给java控制器文件(Controller.java)以构建查询字符串并执行查询搜索。 查询字符串和搜索结果将传递给Result.jsp进行显示。 目前,我使用servletContext来记住已处理的查询字符串,如果用户使用Result.jsp来选择搜索条件,Controller.java会将此类条件附加到现有查询字符串。 如果我使用Result.jsp进行一些搜索。 例如,查询字符串将在Result.jsp页面上显示((Query1) AND Query2) AND Query3 。 然后使用浏览器的后退按钮返回上一个显示页面。 对于同一示例,查询字符串显示(Query1) AND Query2 。 然后,如果我再次搜索。 将使用查询字符串(((Query1) AND Query2) AND Query3) AND Query4 。 我知道这是我当前的实现所期望的,因为Result.jsp不会对已处理的查询字符串进行任何修改。 但是,我想当用户使用浏览器的Back按钮时,例如,查询字符串在页面上显示为(Query1) AND Query2 ,并执行搜索,查询字符串应为((Query1) AND Query2) AND Query4其中查询字符串是根据Result.jsp页面上当前显示的查询字符串加上当前选择构建的。 我怎样才能做到这一点? 这听起来很简单,但我已经尝试了几种使用Result.jsp来更新查询字符串的方法,但仍然无法正确使用它。 因此,我想知道使用方法可能是错误的。 我想听听你的建议。 提前致谢。

使用HTML在JSP中调用java scriptlet

我试图找到一种方法来使用HTML表单在JSP中调用一段java code 上面的代码在JSP中。 我希望在提交时运行scriptlet 我知道代码看起来很糟糕,但我只想掌握这个概念……以及如何去实现它。 谢谢

为什么生成的PDF在Internet Explorer中正常显示,而在FireFox或Chrome中却没有?

我使用lowagie / iTextPDF在Java中生成PDF并且在Firefox和Chrome中显示输出时出现问题,但IE8显示它们很好。 Firefox和Chrome显示乱码,如下所示: %PDF-1.4% 20 ob​​j streamx 1B1C #@ 0# Tm>}Zh nO?8 1 a y ӓB $ :9XC a. / f { $ o – $?ӨӨ^ c / ‘E j }WT / Y <? 5* endstream endobj 4 0 obj >> / MediaBox [0 0 612 1008] / Rotate 90 >> endobj 1 0 […]

如果servlet类在加载后由容器创建了多少个实例? 辛格尔顿?

如果servlet类在加载后由容器创建了多少个实例? 它只有一个>

此URL虽然执行doGet 但不支持HTTP方法GET

public class RoarHistoryUpdate extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ super.doGet(request, response); System.out.println(“do Get”); response.setContentType(“text/html”); response.getOutputStream().print(“Success”); } } 这是我的Servlet。 它在web.xml中注册,如下所示: RoarHistoryUpdateServlet RoarHistoryUpdateServlet de.ulm.uni.vs.avid.roary.servlets.RoarHistoryUpdate RoarHistoryUpdateServlet /Roary/UpdateServlet 当我转到URL http://localhost:8080/Roary-JSP/Roary/UpdateServlet它说HTTP Status 405 – HTTP method GET is not supported by this URL 有趣的是我得到了记录到我的控制台。 所以它实际上找到了doGet -method。 我使用的是GlassFish Server开源版3.1.2.2

获取应用程序服务器下的真实(虚拟)主机名

我有一个在Jetty下运行的应用程序,我希望应用程序返回自引用绝对URL(生成RSS源时,因此客户端必须能够在没有“当前URL”上下文的情况下工作)。 问题是我不知道应该在哪个主机名下部署应用程序,并且它很可能会部署在虚拟主机环境中,其中多个主机名映射到同一个IP地址。 我尝试过使用HttpServletRequest.getLocalName() ,但是返回已接收请求的IP地址的解析主机名[1](通常是本地主机文件中设置的内容),而不是URL中的主机名。 HTTP请求中指定的客户端。 基本上我想得到CGI下的环境变量SERVER_NAME但它看起来不像Java API提供的那样。 任何帮助将不胜感激。 [1]只有我很幸运 – 在某些设置上它只返回IP地址。

如何在servlet中处理编码的unicode文本?

我正在从外部源访问我的servlet URL。 其中一个参数是印地文文本。 外部源正在编码它。 编码值是。 %E0%A4%AA%E0%A4%BE%E0%A4%A0%E0%A5%8D%E0%A4%AF%20%E0%A4%AD%E0%A4%BE%E0%A4%97 我可以通过wireshark在TCP转储中看到它。 但我没有在servlet应用程序中获取此编码字符串。 我试图通过getParameter()方法得到它。 它返回一些随机字符。 因为我没有得到正确的值,所以如果我尝试使用我的servlet类解码它 URLDecoder.decode(myString, “UTF-8”); 然后它返回一些随机字符,像这样 – विषय वसॠतॠ请建议我如何在servlet中读取此编码文本并解码回原始值。

Struts 1使用Multipart / Form-Data Enctype进行失败的表单validation后丢失请求参数

我有一个简单的Struts表单。 它有一些文本字段和一个文件字段。 enctype是我表单上的multipart/form-data 。 我在actionform的validation方法中validation。 如果文本字段为空,则返回所需的错误。 与可见字段一起,在处理表单并返回到JSP时,我传递了一些需要作为请求参数的隐藏字段。 JSP需要这些请求params 。 当没有validation错误时,一切都很有效,因为在操作中使用ActionRedirect类返回请求params 。 但如果返回错误,我会丢失请求params 。 (我可以在actionform validate方法或操作中访问它们)。 如何确保请求params在multipart表单中的validation错误时被传回? 有什么办法吗? 下面的动作映射(稍加编辑用于混淆): 我的JSP表单行:

尽快停止/取消断开连接的GET请求线程

我正在使用jetty,版本7.0.1,如果这很重要。 有时我在服务器上有一些很长时间运行的任务,如果客户端断开连接我想取消/停止(如果是GET请求,不是例如POST文件上传)。 似乎情况并非如此,任务继续完成。 也许我可以使用ServletRequestListener.requestDestoryed监听器来获取此类任务的通知,但建议的方法是什么来停止请求线程? 如何释放数据库连接,文件句柄或运行任务(执行程序服务)等资源? 尽快停止此类任务的建议方法是什么?