如何在Servlets中插入JSPfunction?

如何使用Servlet访问具有JSP的HTML用法,而不必将所有面向客户端的页面称为* .jsp?
我宁愿这样做而不是使用所有的response.write()东西,因为我认为当它是干净的“HTML”时它更容易阅读和维护。
这是公平的评估吗?

编辑:我想要的是让Servlet将内容输出到屏幕而不必重定向到.jsp文件。
通过这种方式,我可以编写所有JSP内容,但是当需要显示它时,用户看到的URL页面基本上是“ http://blah.com/posts/post-id ”,这是地址servlet而不是“ http://blah.com/posts.jsp?pos=post-id ”。
但我仍然会在外部.jsp中编写所有表示逻辑。

只需将JSP隐藏在/WEB-INF文件夹中,这样任何人都无法直接访问它并创建一个请求转发到此JSP文件的servlet。 不要进行重定向 ,否则您会看到新的URL反映在地址栏中。 例如

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String postId = request.getPathInfo(); // Do your business thing here. Any results can be placed in request scope. Eg request.setAttribute("post", post); // post is a bean containing information you'd like to display in JSP. // Then forward request to JSP file. request.getRequestDispatcher("/WEB-INF/posts.jsp").forward(request, response); } 

将此servlet映射到/posts/*url-pattern

/WEB-INF/posts.jsp使用taglibs来控制页面流,使用EL来访问数据。 例如

 

${post.title}

- ${post.message}

最后,只需通过http://example.com/posts/postid调用servlet。 /postid部分将由HttpServletRequest#getPathInfo() 。 您需要自己解析值并使用它来处理业务。

我不完全确定你在这里问的是什么。 您可以通过ge servlet来编写HTML,但这根本不干净。

另一种方法是让servlet通过模板引擎(如Velocity或Freemarker)创建HTML。 如果function较少,模板中的语法可能更适合您的特定应用程序。

回到古代(想想’98 ……),这被称为“模型2架构”:servlet接收请求,处理它,并将请求交给处理视图的JSP页面。

有关如何完成此操作的示例,请参阅此文章 ,或者只是搜索“JSP Model 2”。

编辑:为此,您可以使用RequestDispatcher.include()而不是前一篇文章中描述的forward() 。 其余的应该仍然适用。

如果我理解正确你想隐藏用户的* .jsp扩展名,对吧?

在这种情况下,当您的Servlet重定向到jsp页面时,它会执行以下操作:

 RequestDispatcher disp = request.getRequestDispatcher("hidden.jsp"); disp.forward(request,response); 

通过使用Request Dispatcher而不是重定向,您可以在servlet名称后面“隐藏”.jsp扩展名。 但是,如果您的JSP页面重定向到另一个JSP页面,这将无法正常工作。 如果要显示.jsp文件,请使用response.encodeURLresponse.sendRedirect

我认为你正在寻找前端控制器模式 – 这是“JSP Model 2”Web应用程序(如@andri提到的)和几乎所有(数百?)Java Web框架的基础。