在一个简单的Java Web应用程序中,我们可以使用与Spring的InternalResourceViewResolver类似的方式进行JSP和HTML URL映射,我们使用前缀和后缀来映射URL。
映射应按如下方式进行: -
mysite.com/home ==> /index.html
mysite.com/help ==> /help.html
mysite.com/view/form ==> /jsp/form.jsp
mysite.com/view/user ==> /jsp/user.jsp
我知道我们可以在web.xml中进行JSP映射,如: -
<servlet>
<servlet-name>formpage</servlet-name>
<jsp-file>/jsp/form.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>formpage</servlet-name>
<url-pattern>/view/form</url-pattern>
</servlet-mapping>
但这里没有前缀和后缀属性。
我们如何推广上面的jsp和html映射?
修改
春天的例子:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
答案 0 :(得分:0)
您可以在specification document中找到servlet映射的规则(第115页,PDF中的137ff)。您可以使用*
作为前缀或后缀,但不能使用路径。作为你的映射(作为一般规则;特定的可以手动创建,但我认为这不是你想要的)是不可能的,你需要使用另一个解决方案(如Spring;调度程序servlet正是因为这个而创建的)限制)或提供你自己的默认servlet来为你做这件事。
答案 1 :(得分:0)
我曾经做过的(12年前)是我创建了自定义调度程序servlet并使其处理所有操作。
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
然后我的控制器有外部configuration file和映射规则:
<mapping>
<pattern>^/$</pattern>
<action>cz.abclinuxu.servlets.html.view.ViewIndex</action>
</mapping>
Controller servlet和HTMLVersion
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
URLMapper urlMapper = URLMapper.getInstance(URLMapper.Version.HTML);
if ( urlMapper.redirectDeprecated(request, response) )
return;
AbcAction action = urlMapper.findAction(request, response, env);
if (action == null)
return;
您可能会受到启发或寻求为您完成此任务的Web框架。
答案 2 :(得分:0)
现在, 如果你想访问视图应该像mysite.com/view/form而不是myysite.com/jsp/form.jsp
在web.xml中创建url模式,如下所示
<url-pattern>/</url-pattern>
在控制器中
@Controller
@RequestMapping("/view/form")
public class FormController {
/* actual Code here
*/
}
答案 3 :(得分:0)
这就是我所做的,很多答案都很好,但我需要一个纯Java Web应用程序解决方案,这就是我所做的: -
我创建了一个Servlet过滤器,doFilter
方法如下: -
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String uri = ((HttpServletRequest) request).getRequestURI();
String path = uri.replace(
((HttpServletRequest) request).getContextPath(), "");
if (path.startsWith("/view/")) {
String rd = path.replace("/view/", "/jsp/") + ".jsp";
request.getRequestDispatcher(rd).forward(request, response);
} else {
chain.doFilter(request, response);
}
}