java调用外部servlet_java-如何映射“根” Servlet,以便其他脚本仍可运行?

java-如何映射“根” Servlet,以便其他脚本仍可运行?

我正在尝试构建一个调用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中使用以下映射:

MainServlet

/*

我遇到的问题是,它匹配所有内容,因此,当调度程序转发到“ /WEB-INF/main.jsp”时,它将匹配url模式,因此Servlet将再次运行。 这将导致循环运行,直到死于java.lang.StackOverflowError。

在不阻止其他脚本可运行的情况下,如何匹配根目录?

8个解决方案

46 votes

使用空模式,例如

MainServlet

Servlet 3.0规范对此做了澄清:

空字符串(“”)是一种特殊的网址格式,它精确地映射到   应用程序的上下文根

因此它至少应该在3.0容器上工作,并且我已经验证了它可以在Jetty 8上工作

nilskp answered 2020-01-12T06:46:21Z

29 votes

在应用程序引擎上,使用web.xml的welcome-file元素对我有用。 这是我的:

RootServlet

com.foo.RootServlet

RootServlet

/foo

foo

Jeb answered 2020-01-12T06:46:41Z

7 votes

最初的问题没有提及他们正在尝试在App Engine上映射根servlet-在Tomcat(据我所知,以及其他servlet容器)上很容易,但是App Engine不是普通的servlet容器。

我用servlet构建Web应用程序的通常方法是扩展HttpServlet,添加带有标题,内容,错误,消息等的“页面”对象,并将其输出转发到JSP模板。 在App Engine中工作绝对是一场噩梦。

JSP文件开头不能带有“ /”来“命名”。

JSP文件不能位于子目录中

Servlet不能使用“ /” url-pattern映射到应用程序的根目录

这是我的web.xml(为简便起见进行编辑),终于可以使用了。

Home

my.domain.HomeSv

template

/template.jsp

Home

/home

home

关于验证所有这些,我还没有特别科学-但现在看来这对我有用,对此我感到非常高兴。

Sam Lowry answered 2020-01-12T06:47:28Z

4 votes

您可以使用JSTL或其他方式,使用以下代码在根目录中创建一个名为index.jsp的欢迎文件。

因此,在web.xml文件中,您将具有以下内容:

index.jsp

因此,任何请求根目录的人都将被重定向到/ main。 现在您的servlet可以映射到main了。

MainServlet

/main

Vincent Ramdhanie answered 2020-01-12T06:47:57Z

1 votes

尝试仅从模式中删除'*',即

/

Gennady Shumakher answered 2020-01-12T06:48:19Z

1 votes

使用URLrewrite-> [http://tuckey.org/urlrewrite/]在另一个线程URL模式中提到了用于web.xml中servlet映射的解决方案。

Tomasz answered 2020-01-12T06:48:39Z

0 votes

您是否尝试过以下方法? (请注意,缺少的/是通配符,是您的配置捕获所有内容的原因。)

MainServlet

/index.jsp

(根据仅/的评论进行编辑。)

Stu Thompson answered 2020-01-12T06:49:04Z

0 votes

您不能重定向到WEB-INF。 Servlet容器将永远不会为该文件夹中的文档请求提供服务。

如果您希望在根上下文(“ [http://www.domainname.com/”的“ /”)下可以使用您的应用程序(不仅仅是servlet,而是整个应用程序),则需要进行设置 它的上下文条目-不是servlet映射。

使用Tomcat,您可以添加一个新的映射(在大约3个可能的位置之一)。

matt b answered 2020-01-12T06:49:33Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值