这将redirect一个临时的 302 HTTP状态码的请求: HttpServletResponse response; response.sendRedirect("http://somewhere"); 但有可能redirect一个永久的 301 HTTP状态码?
我有一个服务,在HttpServletRequest对象上做了一些工作,特别是使用request.getParameterMap和request.getParameter构造一个对象。 我想知道是否有一个简单的方法来提供一个stringforms的url,说 String url = "http://www.example.com/?param1=value1¶m"; 并轻松地将其转换为HttpServletRequest对象,以便我可以用我的unit testing进行testing? 或者至less只是这样,request.getParameterMap和request.getParameter工作正常?
<init-param>和<context-param> !之间的区别是什么?
有人可以向我解释为什么ServletRequest.getParameterMap()返回types Map<String, String[]> ServletRequest.getParameter()只是返回Stringtypes 我不明白为什么地图会映射到更多的值。 TIA。
我试图用Java获取发布数据。 似乎应该是最简单的事情之一,对吗? 我的意思是,HttpServletRequest.getParameter必须做到这一点? 那么你怎样才能得到原始的数据? 我发现HttpServletRequest获取JSON POST数据,并使用Kdeveloper的代码从请求中提取发布数据。 它的工作,但是有一个问题:我只能得到这个post数据一次 。 下面是我从Kdeveloper的代码中创build的方法: public static String getPostData(HttpServletRequest req) { StringBuilder sb = new StringBuilder(); try { BufferedReader reader = req.getReader(); reader.mark(10000); String line; do { line = reader.readLine(); sb.append(line).append("\n"); } while (line != null); reader.reset(); // do NOT close the reader here, or you won't be able to get […]
Servlet和Filter有什么区别? 你build议用什么来授权页面?
我正在写一个代码,其任务是检索请求的URL或完整path。 我已经写了这个代码: HttpServletRequest request;//obtained from other functions String uri = request.getRequestURI(); if (request.getQueryString() != null) uri += "?" + request.getQueryString(); 所以,当我浏览http://google.com?q=abc ,确定(正确)。 但浏览https://google.com时出现问题。 uri的值是http://google.com:443google.com:443 ,所以程序不仅在使用HTTPS时。 并且request.getRequestURL().toString()的输出是相同的。 解决办法是什么?
我正在尝试使用SpringMVC编写一个Web应用程序。 通常情况下,我只是将一些制作好的文件扩展名映射到Spring的前端控制器,并且乐于生活,但是这一次我要使用类似REST的URL,而且没有文件扩展名。 将我的上下文path下的所有内容映射到前端控制器(我们称之为“ app ”)意味着我也应该处理静态文件,我宁愿不要这么做(为什么要重新创build另一个文件?),所以与tomcat默认servlet(我们称之为“ tomcat ”)似乎是要走的路。 我得到了这样的事情来做类似的事情 <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>tomcat</servlet-name> <url-pattern>*.ext</url-pattern> </servlet-mapping> 并为我的静态内容的每个文件扩展名重复后者。 我只是想知道为什么下面的设置,这对我来说是相当于上面的,不起作用。 <!– failed attempt #1 –> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>tomcat</servlet-name> <url-pattern>*.ext</url-pattern> </servlet-mapping> <!– failed attempt #2 –> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>tomcat</servlet-name> <url-pattern>/some-static-content-folder/*</url-pattern> </servlet-mapping> 任何人都可以点亮一下吗?
使用基于Java的后端(即servlet和JSP),如果我需要JavaScript的contextPath,那么为什么要这样做? 我可以想到一些可能性。 我错过了吗? 1.将一个SCRIPT标签烧写到设置在某个JavaScriptvariables中的页面中 <script>var ctx = "<%=request.getContextPath()%>"</script> 这是正确的,但在加载页面时需要执行脚本。 2.在一些隐藏的DOM元素中设置contextPath <span id="ctx" style="display:none;"><%=request.getContextPath()%></span> 这是准确的,并且在加载页面时不需要任何脚本执行。 但是当你需要访问contextPath的时候你需要一个DOM查询。 DOM查询的结果可以caching,如果你关心性能。 3.尝试通过检查document.URL或BASE标签来解决JavaScript问题 function() { var base = document.getElementsByTagName('base')[0]; if (base && base.href && (base.href.length > 0)) { base = base.href; } else { base = document.URL; } return base.substr(0, base.indexOf("/", base.indexOf("/", base.indexOf("//") + 2) + 1)); }; 加载页面时不需要执行任何脚本,并且如果需要,还可以caching结果。 但是,只有当你知道你的上下文path是一个单一的目录时,这个方法才有效,而不是根目录( / […]
我正在尝试构build一个调用类似于以下内容的JSP页面的Servlet: public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { req.getRequestDispatcher("/WEB-INF/main.jsp").forward(req, resp); } 我需要这个Servlet响应域的根(例如: http : //example.com/ ),所以我在web.xml中使用了下面的映射: <servlet-mapping> <servlet-name>MainServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> 我遇到的问题是这个匹配一切,所以当调度转发到“/WEB-INF/main.jsp”这匹配的url模式,所以再次运行的Servlet。 这导致一个循环运行,直到它与一个java.lang.StackOverflowError死亡。 如何在不阻止其他脚本运行的情况下匹配根目录?