您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何制作URL过滤器以使用Servlet路由动作?

如何制作URL过滤器以使用Servlet路由动作?

我看到3种方式:过滤器,基本servlet(通过主servlet的所有请求)或“ servlet映射”

这个例子重写URL

http://example.org/ <整数值>

http://example.org/user?id= <整数值>

http://example.org/1234-> http://example.org/user?id=1234
     <filter>
         <filter-name>Router</filter-name>
         <filter-class>org.example.Router</filter-class>
        <init-param>
             <param-name>param1</param-name>
             <param-value>valueOfparam1</param-value>
         </init-param>
     </filter>
     <filter-mapping>
         <filter-name>Router</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>

在init-param部分中,您可以指定路由规则

        public class Router implements javax.servlet.Filter {

    private static final Pattern REWRITE_PATTERN = Pattern.compile("(^[1-9]\\d*)$");

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException {
    //this method calling before controller(servlet), every request

        HttpServletRequest request = (HttpServletRequest) req;
        String url = request.getRequestURL().toString();
        String number = url.substring(url.lastIndexOf("/")).replace("/", "");

        Matcher m = REWRITE_PATTERN.matcher(number);
        if(m.find()) {
            RequestDispatcher dispatcher = request.getRequestDispatcher("user?id=" + m.group(1));
            dispatcher.forward(req, res);
        } else {
            fc.doFilter(req, res);
        }
    }

    @Override
    public void init(FilterConfig fc) throws ServletException {
        //here you may read params from web.xml
    }}

    public class BasicServlet extends HttpServlet {
       //route rules here, and rewrite
    }

    <servlet-mapping>
        <servlet-name>UserServlet</servlet-name>
        <uri-mapping>/user/*</uri-mapping>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>PostServlet</servlet-name>
        <uri-mapping>/post/*</uri-mapping>
    </servlet-mapping>
Jave 2022/1/1 18:13:34 有691人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶