我想创建一个jsp页面或servlet,它将以两种方式工作。
用户访问自己的个人资料页:
http//something.com/profile/
或者访问朋友页面:
http://something.com/profile/FriendsName
他们也可以通过一个明确的url访问自己的页面,比如:
http://something.com/profile/YourName
我有一个servlet映射设置,如下所示,将任何请求映射到/profile到我的jsp,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模式不匹配的部分的值。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毫无帮助,但我认为它有助于设计。

10-04 21:24
查看更多