我的 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/