标签: servlets

你如何以正确的方式从JavaScript获取contextPath?

使用基于Java的后端(即servlet和JSP),如果我需要来自JavaScript的contextPath,建议的模式是什么,为什么?我可以想到一些可能性.我错过了吗?

1.将SCRIPT标记刻录到将其设置在某个JavaScript变量中的页面中

<script>var ctx = "<%=request.getContextPath()%>"</script>
Run Code Online (Sandbox Code Playgroud)

这是准确的,但在加载页面时需要执行脚本.

2.在一些隐藏的DOM元素中设置contextPath

<span id="ctx" style="display:none;"><%=request.getContextPath()%></span>
Run Code Online (Sandbox Code Playgroud)

这是准确的,并且在加载页面时不需要任何脚本执行.但是在需要访问contextPath时确实需要DOM查询.如果您非常关心性能,则可以缓存DOM查询的结果.

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));
};
Run Code Online (Sandbox Code Playgroud)

加载页面时不需要执行任何脚本,也可以根据需要缓存结果.但这只有在您知道上下文路径是单个目录时才有效 - 而不是根目录(/)或多个目录down(/mypath/iscomplicated/).

我倾向于哪种方式

我喜欢隐藏的DOM元素,因为它不需要在页面加载时执行JavaScript代码.只有当我需要contextPath时,我才需要执行任何操作(在这种情况下,运行DOM查询).

javascript jsp servlets

62
推荐指数
4
解决办法
13万
查看次数

在web.xml中的Session TimeOut

我试图了解Web.xml中会话超时的会话配置的真正目的.

<!-- Session Configuration -->
<session-config>
        <session-timeout>60</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

现在让我告诉你我的问题.

我的应用程序是导入/上传.txt文件,由于需要导入数百万条记录,因此该文件的使用时间超过1小时.但是,虽然我的应用程序仍在导入正在进行的.txt文件,但会话在1小时后超时.应用程序在后台执行某项任务时,此类应用程序不应超时.

java web.xml servlets java-ee

62
推荐指数
7
解决办法
25万
查看次数

我可以从lib中的JAR内部提供JSP,还是有解决方法?

我在Tomcat 7中将一个Web应用程序部署为WAR文件.该应用程序构建为一个多模块项目:

  • core - 打包为JAR,包含大部分后端代码
  • core-api - 打包为JAR,包含对核心的接口
  • webapp - 打包为WAR,包含前端代码并依赖于核心
  • customer-extensions - 可选模块,打包为JAR

通常,我们可以将JSP文件放在webapp项目中,并相对于上下文引用它们:

/WEB-INF/jsp/someMagicalPage.jsp
Run Code Online (Sandbox Code Playgroud)

问题是我们如何处理特定于客户扩展项目的JSP文件,这些文件不应始终包含在WAR中.不幸的是,我看不到JAR文件中的JSP.尝试classpath:jsp/customerMagicalPage.jsp在JspServlet中找不到的文件,因为它使用了ServletContext.getResource().

传统上,我们"解决"了maven解包客户扩展JAR,定位JSP,并在构建它时将它们放入WAR中.但理想的情况是,您只需在Tomcat中的爆炸WAR中放置JAR并发现扩展 - 这适用于除JSP之外的所有内容.

反正有没有解决这个问题?标准方式,特定于Tomcat的方式,黑客还是变通方法?例如,我一直在考虑在应用程序启动时解压缩JSP ...

java jsp tomcat servlets tiles

61
推荐指数
2
解决办法
3万
查看次数

如何从ServletFilter中的ServletResponse中获取HTTP状态代码?

我正在尝试报告从我的webapp返回的每个HTTP状态代码.但是,状态代码似乎无法通过ServletResponse访问,或者即使我将其转换为HttpServletResponse也是如此.有没有办法在ServletFilter中访问这个值?

java servlets http-status-codes servlet-filters

60
推荐指数
6
解决办法
8万
查看次数

为什么我们使用web.xml?

web.xml有什么用?我们为什么要使用?

<filter>
        <filter-name>wicket.mysticpaste</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>com.mysticcoders.WicketApplication</param-value>
        </init-param>
    </filter>

 <filter-mapping>
  <filter-name>wicket.mysticpaste</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>
Run Code Online (Sandbox Code Playgroud)

这个文件管理器和文件管理器有什么作用?

java web.xml servlets java-ee

60
推荐指数
2
解决办法
10万
查看次数

从url字符串创建模拟HttpServletRequest?

我有一个服务在HttpServletRequest对象上做一些工作,特别是使用request.getParameterMap和request.getParameter来构造一个对象.

我想知道是否有一种直接的方式来获取提供的URL,以字符串的形式,比如说

String url = "http://www.example.com/?param1=value1&param";
Run Code Online (Sandbox Code Playgroud)

并轻松将其转换为HttpServletRequest对象,以便我可以使用单元测试进行测试?或者至少只是为了让request.getParameterMap和request.getParameter正常工作?

java servlets mocking

60
推荐指数
3
解决办法
9万
查看次数

使用Tomcat 7的@WebServlet注释

在我的应用程序中,我有一个servlet,在web.xml中定义如下:

<servlet>
    <display-name>Notification Servlet</display-name>
    <servlet-name>NotificationServlet</servlet-name>
    <servlet-class>com.XXX.servlet.NotificationServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>NotificationServlet</servlet-name>
    <url-pattern>/notification/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

在使用Tomcat 7之后,我想使用@WebServlet将完成这项工作的注释.
这是我做的方式:

@WebServlet( name="NotificationServlet", displayName="Notification Servlet", urlPatterns = {"/notification"}, loadOnStartup=1)
public class NotificationServlet extends HttpServlet {
Run Code Online (Sandbox Code Playgroud)

它不起作用.有人可以告诉我我做错了什么吗?

annotations servlets servlet-3.0 tomcat7

60
推荐指数
2
解决办法
8万
查看次数

编译错误:包javax.servlet不存在

我有一个包,我导入javax.servlet.*和javax.servlet.http.*当我尝试在命令提示符下编译它时,我得到错误

包javax.servlet不存在

我使用JDK 1.7.0和Tomcat 6.0.

java servlets compiler-errors compilation

60
推荐指数
5
解决办法
17万
查看次数

servletcontext.getRealPath("/")是什么意思,什么时候应该使用它

在以下代码段中:

ServletContext context = request.getServletContext();
String path = context.getRealPath("/");
Run Code Online (Sandbox Code Playgroud)

是什么/在方法getRealPath()代表什么呢?我应该什么时候使用它?

java servlets realpath

60
推荐指数
1
解决办法
11万
查看次数

HttpServletResponse sendRedirect永久

这将使用临时 302 HTTP状态代码重定向请求:

HttpServletResponse response;
response.sendRedirect("http://somewhere");
Run Code Online (Sandbox Code Playgroud)

但是可以使用永久的 301 HTTP状态代码重定向它吗?

java servlets

58
推荐指数
1
解决办法
6万
查看次数