如何将参数从漂亮的 URL 传递到 JSP 页面?
Posted
技术标签:
【中文标题】如何将参数从漂亮的 URL 传递到 JSP 页面?【英文标题】:How to pass on parameters from pretty URL to JSP pages? 【发布时间】:2013-01-18 16:29:08 【问题描述】:我试图同时做两件事,但我似乎找不到可以同时做这两件事的答案。
我正在尝试这个:
我希望以/user/parameter
结尾的 URL 映射到我可以访问参数的 JSP 页面 user.jsp。
我找到了使用这种方法将参数从 web.xml 文件传递到 JSP 的方法
<init-param>
<param-name>someParam</param-name>
<param-value>itsValue</param-value>
</init-param>
我找到了创建 URL 过滤器并将它们映射到 Java Servlet 的方法。
我需要的是一个组合。另外,我在将 URL 参数传递给 Servlets 时发现的内容也不是很详细,因此也非常欢迎提供一个很好的参考!
【问题讨论】:
【参考方案1】:我希望以 /user/parameter 结尾的 URL 映射到 JSP 页面 user.jsp,我可以在其中访问参数。
在/user/*
上映射一个servlet,并使用HttpServletRequest#getPathInfo()
提取路径信息。
例如
@WebServlet("/user/*")
public class UserServlet extends HttpServlet
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
String pathInfo = request.getPathInfo(); // "/parameter"
// ...
request.getRequestDispatcher("/WEB-INF/user.jsp").forward(request, response);
基本上就是这样。使用常用的String
方法,如substring()
和/或split()
,将路径信息分解为可用部分。
【讨论】:
【参考方案2】:使用 base-url servlet 解析 URL 并执行条件 servlet 转发到适当的 JSP。
request.getRequestDispatcher().forward(JSPurl)
假设您有一个 URL 分支 /sales/
。在此 URL 分支下,您将允许 /implemented/usersales.jsp
为以下 URL 提供服务:
以及由/implemented/products.jsp
提供服务的以下网址
- /sales/groceries/products/section
- /sales/groceries/meat/products/region
- /sales/groceries/vegetables/beans/products/region
您将有一个 web.xml servlet 映射,用于将 servlet 类 org.myorg.SalesHandler 映射到 /sales/。
在 org.myorg.SalesHandler servlet 类中的服务方法覆盖中, 分析 URL 模式(使用正则表达式或其他方式),然后使用有条件地转发请求
request.getRequestDispatcher().forward(JSPurl)
JAX-RS
但是当我们有 jax-rs 时,你为什么要这样做呢?
How to forward from a JAX-RS service to JSP?.
JAX-RS 乍一看可能令人望而生畏,但实际上实现起来非常简单直观。
【讨论】:
以上是关于如何将参数从漂亮的 URL 传递到 JSP 页面?的主要内容,如果未能解决你的问题,请参考以下文章
如何从Spring表单传递参数到@RequestParam?