Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaweb应用程序中的URL映射_Java_Spring_Jsp - Fatal编程技术网

javaweb应用程序中的URL映射

javaweb应用程序中的URL映射,java,spring,jsp,Java,Spring,Jsp,在一个简单的JavaWeb应用程序中,我们可以以与Spring的InternalResourceViewResolver类似的方式进行JSP和HTML URL映射,在Spring的InternalResourceViewResolver中,我们使用前缀和后缀来映射URL 映射应按以下步骤进行:- mysite.com/home ==> /index.html mysite.com/help ==> /help.html mysite.com/view/form ==> /jsp

在一个简单的JavaWeb应用程序中,我们可以以与Spring的InternalResourceViewResolver类似的方式进行JSP和HTML URL映射,在Spring的InternalResourceViewResolver中,我们使用前缀和后缀来映射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/form.jsp
格式页
/视图/表格
但是这里没有前缀和后缀属性

我们如何像上面那样概括jsp和html映射

编辑:

Spring示例:

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>


您可以在(第115ff页,即PDF中的137ff页)中找到servlet映射的规则。您可以将
*
用作前缀或后缀,但不能在路径内部使用。由于您的映射(作为一般规则;可以手动创建特定的映射,但我认为这不是您想要的),因此您需要使用另一种解决方案(如Spring;dispatcher servlet正是因为此限制而创建的)或者提供您自己的默认servlet来为您执行此操作。

我以前(12年前)所做的是创建自定义dispatcher servlet并使其处理所有操作

<servlet-mapping>
     <servlet-name>Controller</servlet-name>
     <url-pattern>/</url-pattern>
</servlet-mapping>
您可能会受到启发,或者寻找适合您的web框架。

现在, 若您想访问这个视图,那个么它应该像mysite.com/view/form一样,而不是像mysite.com/jsp/form.jsp一样

在web.xml中创建url模式,如下所示

 <url-pattern>/</url-pattern>

以下是我所做的,很多答案都很好,但我需要一个纯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);
    }
}

你想问什么?可以直接访问
web inf
之外的资源。JSP文件是在服务器中预编译的。我不想直接访问它们,目前我正在以
mysite.com/JSP/form.JSP
的形式访问JSP页面。现在,我想使用此URL
mysite.com/view/form
访问同一页面。您需要在发布时将其映射到
web.xml
。这不管用吗?是的,它管用,但我需要一个在Spring中的一般规则,请参见编辑部分中的示例。您可以检查servletfilters@Kaushik-你需要更多信息吗?
 <url-pattern>/</url-pattern>
@Controller
@RequestMapping("/view/form")
public class FormController {

 /* actual Code here 
 */
}
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);
    }
}