Java Web应用程序中的URL映射

时间:2014-04-29 09:03:52

标签: java spring jsp

在一个简单的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>

4 个答案:

答案 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 servletHTMLVersion

 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);
    }
}