将js文件打入jar包中,通过定义servlet把js当成文件发给浏览器

1 做一个servlet,可以处理所有以   .js结尾的请求。在web.xml中我们这样定义它: 
    <servlet> 
        <servlet-name> javascriptservlet </servlet-name> 
        <servlet-class> com.unnamed.training.spring.util.JavaScriptServlet </servlet-class> 
    </servlet> 
    <servlet-mapping> 
        <servlet-name> javascriptservlet </servlet-name> 
        <url-pattern> *.js </url-pattern> 
    </servlet-mapping> 
比如你向服务器请求: "http://www.xxx.com/aw/org/struts/taglib/html/xxx.js ",服务器不是真的到root/aw目录中去找这个js文件了,而是把这个请求交给这个servlet处理了。 

2、这个servlet可以这样写: 
package   com.unnamed.training.spring.util; 

import   javax.servlet.*; 
import   javax.servlet.http.*; 
import   java.io.*; 

public   class   JavaScriptServlet   extends   HttpServlet   { 
        public   void   doGet(HttpServletRequest   request,   HttpServletResponse   response)   throws 
                        ServletException,   IOException   { 
                String   fileUri   =   request.getRequestURI(); 
                String   contextPath   =   request.getContextPath(); 
                if   (!contextPath.endsWith( "/ "))   { 
                        contextPath   =   contextPath   +   "/ "; 
                } 
                fileUri   =   fileUri.substring(contextPath.length(),   fileUri.length()); 

                //注意:此处未考虑并发访问异常 
                BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(getClass(). 
                                getClassLoader().getResourceAsStream(fileUri))); 
                PrintWriter   out   =   response.getWriter(); 

                response.setContentType( "text/javascript;   charset=GBK "); 
                String   line   =   null; 
                while   ((line   =   in.readLine())   !=   null)   { 
                        out.println(line); 
                } 

                in.close(); 
                out.close(); 
        } 

它的功能就是到jar包中去找   *.js文件,把它以文件的形式发回给客户端浏览器。 

3、在页面,我们可以这样调用: 
<script   language= "javascript "   src="http://zhhzhh-43.blog.163.com/blog/aw/org/struts/taglib/html/xxx.js "> 
</script> 
注意:地址是包名。


注:原来我一直当我使用dwr框架时,使用<%=request.getContextPath()%>/dwr/engine.js   时需要把改js文件,放入需要导入的目录中
后来发现,原来js文件在dwr.jar包中就有,而且dwr的部署在web.xml中的设置就是为了,让在网页上的引用能够找到该js文件,如下
<servlet-name>dwr-invoker</servlet-name>
      <display-name>DWR Servlet</display-name>
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

  <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>

当网页侦测到/dwr/*的请求时会调用 
org.directwebremoting.servlet.DwrServlet 这个类
这个类的源代码不得而知,但是应该如上面缩写,通过寻找js的路径,将js文件传回
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值