我有一个JSP Web服务器,页面都以.jsp扩展名结尾。
如何在不借助非Java技巧(例如,apache重写)的情况下将其隐藏在我的Web服务器URL中?
例如: 而不是键入http://www.sample.com/search.jsp?xxx 用户只需输入 http://www.sample.com/search?xxx
答案 0 :(得分:10)
您可以像这样创建一个servlet映射:
<servlet-mapping>
<servlet-name>MappingServlet</servlet-name>
<url-pattern>path/*</url-pattern>
</servlet-mapping>
必须编辑url-pattern以满足您的需要。当然,您需要创建servlet以将url映射到实际的jsp。大多数MVC框架都使用这种技术。
答案 1 :(得分:5)
UrlRewrite是一个非常灵活的基于Java的框架独立解决方案。
这比web.xml
中的Servlet映射更好,因为它在您可以做的事情上太有限,并且比基于Apache的解决方案更好,因为它是您的Web应用程序的一部分,因此您不需要放置Apache位于应用程序服务器前面。
答案 2 :(得分:4)
在web.xml
文件中使用此servlet映射。
<servlet>
<servlet-name>search</servlet-name>
<jsp-file>/search.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>search</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>
答案 3 :(得分:2)
将.jsp映射为servlet,但使用&lt; jsp-file&gt;标记而不是&lt; url-mapping&gt;标签
<servlet>
<servlet-name>myjsp</servlet-name>
<jsp-file>/myjsp.jsp</jsp-file>
</servlet>
答案 4 :(得分:1)
如果您选择Apache重写规则,而不是应用程序服务器映射/过滤器(就像我一样),您可能还想做更多的事情,而不仅仅是寻找“^([0-9a-zA-Z] +) $“
如果apache面向并提供非jsp资源,您可能需要确认url不是目录或存在的文件。并确认JSP存在,并执行pass而不是重定向,并附加任何可能的查询字符串。
RewriteCond %{REQUEST_URI} !^/.*\.(jsp)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.jsp -f
RewriteRule ^(.+)$ /$1.jsp [PT,QSA,L]
为了确保用户只能通过/ search而不是/search.jsp看到这个,那么你想要重写反向
RewriteRule ^(.+)\.jsp$ $1 [R=301,QSA,L]
RewriteRule ^(.+)index$ $1 [R=301,QSA,L]
对于搜索引擎优化的目的,这是一个好主意,以便搜索引擎不会因为你在多个网址上复制内容而感到沮丧。
答案 5 :(得分:1)
我有一个位于data / feed.jsp的jsp 将此添加到我的web.xml意味着我可以在data / feed ...
访问它<servlet>
<servlet-name>feed</servlet-name>
<jsp-file>/data/feed.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>feed</servlet-name>
<url-pattern>/data/feed</url-pattern>
</servlet-mapping>
答案 6 :(得分:0)
RewriteEngine On
RewriteRule ^([0-9a-zA-Z]+)$ $1.jsp
在.htaccess中应该将所有网址重写为.jsp。因此,正如您所描述的那样,search.jsp将只是搜索。
答案 7 :(得分:0)
我不是JSP专家,但我认为你可以在web.xml中定义URL映射,为你的servlet和jsps提供别名。