java - 从页面名称中删除 .jsp

标签 java jsp jakarta-ee servlets

我的 Web 应用程序中有一些 jsp 页面,我的 web.xml 中有以下代码(针对每个 jsp 页面):

<servlet>
    <servlet-name>login</servlet-name>
    <jsp-file>/login.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

此设置从我的页面 url 中删除了 .jsp,我可以打开 /login 就像 /login.jsp

实际上这个设置使我的 jsp 页面就像一个编译过的 servlet。

是否可以在不为每个页面编写此设置的情况下对我的所有 jsp 页面执行此操作?我需要某种 url 重写。

最佳答案

您需要创建一个公共(public)过滤器并处理请求并转发到各自的 jsps 如果您使用的是旧版本的 servlet,我有带注释的 writer,可以在 web.xml 中编写。 通用过滤器 com.filters.CommonFilter

<filter-mapping>
    <filter-name>CommonFilter</filter-name>
    <url-pattern>*.*</url-pattern>
</filter-mapping>

这里所有的请求都被转发到各自的jsps。 例如.. 如果 url 是/login ,它将被转发到/login.jsp ,或者如果它是/home 那么到/home.jsp ...所有的 url 都被视为 jsp 文件,但是你可以根据您的要求

package com.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

@WebFilter("*")  // give your url mapping  eg..//you can write for "/yoururlspec/*"
public class CommonFilter implements Filter {

    @Override
    public void init(FilterConfig config) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        String path="";
        if (request.getRequestURI().length() > request.getContextPath().length())
        {path=request.getRequestURI().substring(request.getContextPath().length()+1, request.getRequestURI().length());
        req.getRequestDispatcher(path+".jsp").forward(req, res);
        }
    }

    @Override
    public void destroy() {
    }
}

关于java - 从页面名称中删除 .jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030168/

相关文章:

java - 二维数组中的最小数字无法正常工作

java - SQSListener 与 ThreadpoolExecutor

java - 为了使用 Java 提交表单,在表中使用输入框的最佳方式是什么?

java - 我应该对 j2ee 应用程序服务器配置文件实现源代码控制吗?

java - 使用Java更新Tomcat的server.xml文件

java - 无法使用 java 11 在 Spring Boot 中加载日志记录资源文件

java - 如果属性文件中的值可能会发生变化怎么办?

javascript - 如何替换html中的doctype?

java - 如何在 Struts 2 中使用 Ajax 调用获得成功结果后重定向到另一个 JSP

java - 将多个并发数据库操作合并到一个批处理中