[英]What is the best way to communicate between a jsp page and a Servlet?
[英]What is the best way to create a Java Servlet or JSP that optionally includes content depending on URL parameters
我想创建一个可以两种方式工作的JSP页面或servlet。
用户访问他们自己的个人资料页面:
HTTP // something.com /资料/
或者他们访问他们的朋友页面:
http://something.com/profile/FriendsName
他们还可以通过明确的URL访问他们自己的页面,例如: http : //something.com/profile/YourName
我有一个servlet映射设置如下,将任何请求映射到/我的JSP将处理该请求。
<servlet>
<servlet-name>Profile</servlet-name>
<jsp-file>/profile.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>Profile</servlet-name>
<url-pattern>/profile</url-pattern>
</servlet-mapping>
然后我想我可以设置一个过滤器来解析HTTPServletRequest的URL,以便在/ profile /之后读取。
<filter>
<filter-name>profile-filter</filter-name>
<filter-class>ProfileFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>profile-filter</filter-name>
<url-pattern>/profile*</url-pattern>
</filter-mapping>
现在过滤器可以在HttpServletRequest中设置属性,我如何在JSP页面中拉出这些属性以检查是否指定了用户名并检查是否设置了自己的名称?
我将如何在ServletFilter中创建页面范围的bean,以便我可以在JSP页面中使用jspBean,如下所示:
<jsp:useBean id="profileInfo" scope="page" class="ProfileInfo" />
我认为过滤器只能人为地打破逻辑。 您可以非常轻松地确定URL部分的值,该值与web.xml中描述的url-pattern不匹配。 HttpServletRequest类有一个为您返回此值的方法,它被称为getPathInfo()
。 这是一个例子:
<%
String path = request.getPathInfo();
if (path == null || "".equalsIgnoreCase(path)) {
// The path was empty, display the current user's profile
} else {
// Display the named profile
}
%>
这对请求bean没有任何帮助,但我认为它有助于设计。
我没有完全关注这个问题,但是如果你想让一个jsp访问请求参数或属性,那就做:
<%
String parameter = request.getParameter("parameter");
String attribute = request.getAttribute("attribute");
%>
您还可以访问请求网址等...如果您需要对这些网址执行任何操作。
就个人而言,我建议您使用servlet来处理您的请求,并转发到您选择的jsp(可能在设置了jsp可以使用的会话信息之后)。
对这类事情使用服务器级过滤器和请求属性可能有点矫枉过正,但只有您了解项目的真实要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.