Tag: servlets

捕获所有HTML输入内容以进行操作的Catch-all servletfilter只能间歇性地工作

我需要一个servletfilter来捕获所有输入,然后修改输入,在每个表单中插入一个特殊的标记。 想象一下,filter与所有请求相关联(例如url-pattern=* )。 我有捕获内容的代码,但似乎RequestWrapper不足以捕获所有输入。 某些输入返回零字节,然后我无法将该内容“流”回给用户。 例如,我们仍在使用Struts 1.3.10,并且任何Struts代码都没有正确“捕获”,我们得到零字节内容。 我相信这是因为Struts如何处理前锋。 如果请求中涉及转发,我想知道下面的捕获代码是否有效。 以下是所有代码,您是否有一种方法可以捕获用于流式传输给用户的任何类型的内容。 Filter mybrokenCaptureHtml.TokenFilter Filter /* package mybrokenCaptureHtml; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; public class TokenFilter implements Filter { @Override public void destroy() { } public […]

Java从Servlet读取未解码的URL

我们假设我有像’=&?/;#+%’这样的字符串作为我url的一部分,让我们这样说: example.com/servletPath/someOtherPath/myString/something.html?a=b&c=d#asdf 其中myString是上面的字符串。 我编写了关键部分,因此URL看起来像 example.com/servletPath/someOtherPath/%3D%26%3F%2F%3B%23%2B%25/something.html?a=b&c=d#asdf 到现在为止还挺好。 当我在servlet中并且我读取request.getRequestURI() , request.getRequestURL()或request.getPathInfo() ,返回的值已经被解码,所以我得到像strilng一样 someOtherPath/=&?/;#+%/something.html?a=b&c=d#asdf 我无法区分真正的特殊字符和编码字符。 我通过完全禁止上面的字符解决了特殊的问题,这在这种情况下有效,但我仍然想知道有没有办法在servlet类中获取未解码的URL。 另一个编辑:当我昨晚遇到这个问题时,我太累了,无法注意到真正发生的事情,这更奇怪! 我有servlet映射,比如/ servletPath / *之后,我可以放任何我想要的东西,并根据路径的其余部分让我的servlet响应, 除非路径中有%2F。 在那种情况下, 请求永远不会访问servlet ,我得到404! 如果我把’/’代替%2F它可以正常工作。 我正在Linux上运行Java 1.6.0-04上的Tomcat 6.0.14。

我的简单java HTTPS服务器仅适用于localhost

我有一个用Java实现的简单HTTPS测试服务器,如下所示。 它接受客户端连接并发回一段有关套接字的文本。 问题是它使用https://localhost:8888在浏览器上本地工作,但是当我使用我的机器的真实IP(129.46.xx.xx:8888)时,它不适用于远程浏览器。 问题来自哪里? 测试时,不要忘记生成样本证书并提供以下信息。 编辑 :有趣的是,当我在Ubuntu 12.04上运行它时,我可以连接到它。 但不是在Windows上运行时! import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.security.KeyStore; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLSocket; public class HttpsEchoer { public static void main(String[] args) { String ksName = “myks.jks”; char ksPass[] = “mypass”.toCharArray(); char ctPass[] = “mypass”.toCharArray(); try { […]

如何重置JSESSIONID

在用户进行身份validation时重置会话cookie被认为是一种很好的安全做法。 如何用Java做到这一点? 到目前为止我的尝试是成功的,但我想知道是否有更好的方法: public static HttpSession resetSessionId(HttpSession session, HttpServletRequest request) { session.invalidate(); session = request.getSession(true); return session; }

使用将值从jsp传递到servlet

我有jsp页面 – Go to servlet 和servlet – @WebServlet(name=”/https://stackoverflow.com/questions/11840751/pass-values-from-jsp-to-servlet-using-a-href/servlet123″, urlPatterns={“/https://stackoverflow.com/questions/11840751/pass-values-from-jsp-to-servlet-using-a-href/servlet123”}) public class https://stackoverflow.com/questions/11840751/pass-values-from-jsp-to-servlet-using-a-href/servlet123 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void foo() { } } 我应该在Go to servlet中写什么来传递值(比如valueToPass或者可能将值作为参数添加到https://stackoverflow.com/questions/11840751/pass-values-from-jsp-to-servlet-using-a-href/servlet123 ? 我可以使用jsp中的链接调用https://stackoverflow.com/questions/11840751/pass-values-from-jsp-to-servlet-using-a-href/servlet123特定方法(如foo() )吗? 编辑: 如何在URL中调用servlet? 我的页面层次结构如下 – WebContent |– JSPtest | |– callServletFromLink.jsp |– WEB-INF : : 我想在文件夹https://stackoverflow.com/questions/11840751/pass-values-from-jsp-to-servlet-using-a-href/servlet123 > control中调用https://stackoverflow.com/questions/11840751/pass-values-from-jsp-to-servlet-using-a-href/servlet123 […]

@WebServlet注释无法识别; init不运行

我正在努力学习注释。 我目前有一个在Tomcat中启动应用程序时运行init()的webapp。 以下代码有效…… web.xml中: MainServlet com.company.Main 1 Main.java: import java.io.IOException; import javax.servlet.*; import javax.servlet.annotation.WebServlet; //@WebServlet(name=”MainServlet”, value=”/main.jsp”, loadOnStartup=1) public class Main extends GenericServlet { public Main() { } @Override public void init() { System.out.println(“Hello!”); } @Override public void destroy() { System.out.println(“Bye!”); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { } } 但是,当我取消注释@WebServlet注释并注释掉web.xml中的servlet条目时,init方法不会运行。 […]

AppEngine gzip压缩

我正在尝试从GAE服务器gzip响应,但在Content-Encoding中收到null。 我有以下代码: connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod(“POST”); connection.setRequestProperty(“Content-Type”, “application/json; charset=utf-8″); //”application/json; charset=utf-8” connection.setRequestProperty(“Accept-Encoding”, “gzip”); connection.setRequestProperty(“User-Agent”, “gzip”); connection.setUseCaches (false); connection.setDoInput(true); connection.setDoOutput(true); //write //read System.out.println(“Content-Encoding ” + connection.getContentEncoding()); 我已经读过,GAE服务器会自动压缩。 那可能是什么问题呢?

Servlet:SEVERE:为servlet分配exception

下面的堆栈跟踪是我尝试访问servlet时得到的,这似乎从Tomcat管理器运行良好。 11 Sep, 2012 11:50:12 AM org.apache.catalina.core.ApplicationContext log INFO: Marking servlet LoginServlet as unavailable 11 Sep, 2012 11:50:12 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Allocate exception for servlet LoginServlet java.lang.Error: Unresolved compilation problems: The import javax.servlet cannot be resolved The import javax.servlet cannot be resolved The import javax.servlet cannot be resolved The import javax.servlet cannot be resolved […]

是否真的需要关闭servlet PrintWriter out stream?

我写了一个简单的servlet如下: public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); // [do stuff with the PrintWriter] out.close(); } } 是否有必要关闭PrintWriter流出? 如果我不关闭流会影响到什么进一步?

root(“/”)上的spring mvc网站

我想将spring mvc控制器映射到root( /** )路径(而不是像“/ something”这样的子文件夹),同时使用mvc:resources创建exception(对另一个方法开放)。 这应该是该框架的基础知识,但显然是一个非常复杂的问题。 我的app-servlet.xml有这些明显的映射exception: 我有这个控制器: import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping(“/**”) public class MainController { @RequestMapping(method = RequestMethod.GET) public String service(final HttpServletRequest request) { final String servlet_path = request.getServletPath(); System.out.println(String.format(“%s %s”, new Date().toString(), servlet_path)); return “test”; } } 现在,当我点击“/”或“/ test”或“/ test / page”时,我得到如下输出: Fri Aug 03 […]