其他分享
首页 > 其他分享> > 配置Servlet通过url-pattern映射到一个JSP页面

配置Servlet通过url-pattern映射到一个JSP页面

作者:互联网

JSP页面,通过url-pattern映射,直接当成Servlet来用。

前言

前些日子,需要从业务数据库里面提取一些数据,以Json的格式返回给第三方系统。开始想用Tomcat+JSP这样简单的组合就行了,但转念一想,现在还用JSP可能有点Low,对外开放不太好看。

虽然,我认为,编程能力的强弱是对算法理解和优化,以及对业务细分后的精确规划和合理布局。只是,现在很多青轻人认为编程能力的强弱取决于你所用的技术是否牛比,是否最新,是否高级。有这种想法也正常,除了对技术的渴望外,也有当下市场就业方面的因素利导所致。

见识太多项目因用了Spring ORM 框架 后续陷入开发低效和迭代业务修改困难,以及一些新人代码造成的内存泄漏。小项目一般就不用这个玩意。

怎样处理好呢?回想下PHP里有很多URL重写和文件后缀切换的框架,但这里要访问的是oracle,而php对oracle驱动访问接口支持的不太稳定 也不好用。用JAVA比较好。这里的关键是:只要能把jsp后缀去掉就可以了。

一番搜索后,找到 urlrewritefilter 这个库。用了这个库,当客户浏览器访问  xxx.do?xxx 时,就被重定向为  xxx.jsp?xxx 。

接着,所有的业务都写在JSP,然后在服务器上update一下代码,重启也省掉,开发效率高,修改容易,启动飞快,CPU和内存的资源占用极低。

 

一、新建一个Tomcat工程。打开 web.xml 加入如下配置

	<filter>
		<filter-name>UrlRewriteFilter</filter-name>
		<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>UrlRewriteFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>


	<error-page> 
		<error-code>404</error-code>  
		<location>/error.html</location>  
	</error-page> 

二、到官网 http://tuckey.org/ 下载 urlrewritefilter,或者 Maven

<dependency>
    <groupId>org.tuckey</groupId>
    <artifactId>urlrewritefilter</artifactId>
    <version>4.0.3</version>
</dependency>

三、新建urlrewrite.xml放在WEB-INF下,内容如下

<urlrewrite>
	<rule>
		<from>/(\w*).do(\w*)</from>
		<to type="forward">/$1.jsp$2</to>
		
		<!-- 其实就是 htaccess 的语法,后面有提到  -->
	</rule>
</urlrewrite>

 

四、新建一个 test.jsp 内容如下

<%@ page trimDirectiveWhitespaces="true" %>
<%@ page language="java" import="java.util.*" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

<%
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	
	out.print("hello:" + request.getParameter("p"));
%>

五、启动服务器,打开网页 http://localhost:8080/test.do?p=good ,就能看到效果。

访问 http://localhost:8080/rewrite-status  (或  http://localhost:8080/应用/rewrite-status) 还能看到相关rewrite信息

 

六、好奇之下,查一下 urlrewritefilter.jar 的源码,看看写的是什么。

发现

* UrlRewriteFilter 发现两个 final 变量
   public static final String DEFAULT_WEB_CONF_PATH = "/WEB-INF/urlrewrite.xml";
   public static final String DEFAULT_MOD_REWRITE_STYLE_CONF_PATH = "/WEB-INF/.htaccess";
   
   说明此库可以支持 .htaccess 文件
   
* reloadConf 函数 间歇性的 判断 config 文件是否更新。

  再往里,就是 File.lastModified


* org.tuckey.web.filters.urlrewrite.dtds 包下有多个文件,可以直接引用,以防被墙。
   
* UrlRewriteWrappedResponse.urlRerwiter.processEncodeURL 把用户请求的URL,按规则转换为 outputUrl

  包里面的 核心逻辑 和相当一部分 代码就是 花费 在这个函数及其后续解释上,如果不用 htaccess (全部)语法可能会少很多代码。
  
  这个包提供了一个 Java 解释 htaccess 的源码参考。

* 使用 getNewChain 函数 负责生成 新的chain,最后执行  chain.doFilter 交由 Tomcat 后续操作。

 

标签:WEB,urlrewrite,url,pattern,htaccess,JSP,tuckey,urlrewritefilter
来源: https://blog.csdn.net/RoadToTheExpert/article/details/115306081