繁体   English   中英

如何从JSP调用servlet方法?

[英]How to call a servlet method from a JSP?

我的Servlet中有以下方法。

private String process(HttpServletRequest arg0, HttpServletResponse arg1) {
    return ("a key");
} 

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    process(arg0, arg1);
}

在web.xml中,添加了以下代码

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>iusa.ubicacel.actions.map.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>

在inicio.jsp中添加了以下内容

<script type="text/javascript" src="<%=request.getContextPath()%>/MyServlet"></script>

在上面的src标记中,我想从MyServlet的处理方法中添加google map api url(我将从servlet中的数据库中检索)。我从评论中了解到我的方法是错误的。有人可以告诉我如何仅使用此jsp和servlet即可正确执行此操作。

使用JSP编写servlet的最佳实践是遵循MVC模式:您的servlet将是控制器,JSP是视图,而模型将由您的域对象组成,这些域对象通过请求属性从servlet传递到JSP页面。

我不认为您现在拥有的完全是错误的。 但这仅适用于需要从servlet生成所有javascript代码的特殊情况(这几乎不是真正的要求)。 假设这是您的真实要求(也许您从数据库中读取了整个javascript内容),则可以定义一个呈现JS内容的servlet(也可以将其映射为/main.js或其他内容)对JSP页面透明的动态生成)。

最有可能的是,您只需要一堆小项目即可在运行时动态生成(例如Google Maps网址,API密钥或您存储在数据库中的任何内容)。 如果是这种情况,则可以在.js文件中静态定义您的JavaScript代码,并允许使用某些构造函数参数(或其他参数)进行初始化。

在此设置中,您的servlet将读取数据库中的request.setAttribute("googleMapsUrl", url) ,然后通过调用request.setAttribute("googleMapsUrl", url)将其传递给视图,然后调用requestDispatcher.forward(...)将控制权传递给JSP。

在JSP中,您现在需要在src中包含静态脚本,然后可以使用另一个script标签根据绑定到请求的动态值来初始化代码:

<c:url value="/static.js" var="scriptUrl"/>
<script type="text/javascript" src="${scriptUrl}"></script>
<script type="text/javascript">
    // let's assume your static script defines an object called `MyGoogleMapsDriver`...
    var googleMapsDriver = new MyGoogleMapsDriver('${googleMapsUrl}');
</script>

我希望这有帮助。

您不需要它,应该访问数据,以便:

Servlet保存数据-> request.setAttribute( “ MyObject”,data);

JSP中之后,加载需要-> request.getAttribute( “ MyObject” )的数据

对不起,我的英语,祝你好运。

注意 :我不建议您这样做,但这是问题的直接答案。 有关更多信息,请查看注释。


如果您只是想添加处理方法返回的字符串,则需要执行以下操作:

  1. 使您的方法publicstatic
  2. 然后编写以下脚本: <%= MyServletName.process(request, response); %> <%= MyServletName.process(request, response); %> 这将输出处理方法的结果。

最后,您将获得以下内容:

<script src="<%= MyServletName.process(request, response); %>"></script>

requestresponse变量在此范围内可用。

重要提示 :您试图通过这种方式实现的目标看起来像是一个糟糕的设计 由于各种原因,在此答案中进行了评论。 检查@LuiggiMendoza和@DaveNewton的评论。

以下是需要考虑的一些要点:

  1. 编写片段很容易,但绝不建议这样做。 请参阅: 如何避免JSP文件中的Java代码?

  2. 从JSP调用Servlet方法是错误的设计 Servlet方法旨在处理HTTP方法。 它们并非旨在处理特定情况。

  3. 您尝试做的事情是反模式 ,您没有分离问题。 JSP页面应该是结构和呈现信息的视图。 该信息应进行预处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM