我把一些class文件打成jar包
包层次为:
package aw.org.struts.taglib.html;
所有的class文件都在html包下,现在我想在html包里放一个js文件
那么在画面怎么能够访问到这个js文件?
这样
<script Language="JavaScript" src="./aw/org/struts/taglib/html/xxx.js"></script>
写根本就找不到,该如何是好哈?

解决方案 »

  1.   

    做一个servlet,拦截所有的.js请求,把js读出来,当成文件返回给response
      

  2.   

    难道你这个包里还有html文件?如果有的话,就跟使用那些html文件一样去使用js文件吧。
      

  3.   

    js是展现层的东西,总归放在webmodel下的某个目录比较好,有什么理由要把他放在java类的包里面,愿闻其详
      

  4.   

    做一个servlet,拦截所有的.js请求,把js读出来,当成文件返回给response???servlet 能拦截所有的js请求吗? 难道所有的js请求都是ajax吗?servlet能拦截到 document.write吗?
      

  5.   

    所有的class文件都在html包下,现在我想在html包里放一个js文件???
    这个不知道lz怎么想
    你把js放在web的目录下面,然后用你的web引用不行么
      

  6.   

    <script Language="JavaScript" src="./aw/org/struts/taglib/html/xxx.js"></script>
    ==>
    <script Language="JavaScript" src="/aw/org/struts/taglib/html/xxx.js"></script>
      

  7.   

    为什么JS也打进包里,怕别人窃取你的JS里的代码吗?
      

  8.   

    参考一下DWR的源代码吧
    DWR中,engine.js util.js也打在jar中
      

  9.   

    html文件放在一个文件夹下,然后在此文件夹下建立一个js文件夹,把js文件放进去就ok了。不过这样的话可能要修改html文件
      

  10.   

    是这样的,我的目的是把一些组件封装到一个jar包中
    例如:只能输入日期的文本框 等
    这样在每个项目中只需要引用这个jar包,其他的什么都不用管了
    不必再写那些js了。
    TO hbwhwang(catmiw的ID已经停用,现在用这个) 
    这个方法我也想过,但是正如nationally(自由鸟) 所说的
    怕影响性能,如果画面组件很多的话那么在打开的时候会出现很多问题
    所以想来想去还是感觉只有把js也放到jar包中是最可取的
    再次感谢大家的关心
      

  11.   

    楼主你没明白我的意思吧。
    我再说一次,然后把代码给你写出来:
    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="aw/org/struts/taglib/html/xxx.js">
    </script>
    注意:地址是包名。
      

  12.   

    To:hbwhwang(catmiw的ID已经停用,现在用这个) 我试过了,但还是不行啊,找不到js文件哈另外这个JavaScriptServlet 类放到什么位置?
    他不放到jar包里吧?
    有点晕了
      

  13.   

    JavaScriptServlet 放到classes或者一起打包jar放到lib都可以啊
      

  14.   

    To:hbwhwang(catmiw的ID已经停用,现在用这个) 
    但是从哪里调用这个servlet呢?
      

  15.   

    <script language="javascript" src="aw/org/struts/taglib/html/xxx.js">
    </script>src="aw/org/struts/taglib/html/xxx.js"
    这句等于向服务器发了一个请求,这个请求就交给这个servlet了啊。不是你人工调用的,呵呵
      

  16.   

    To:hbwhwang(catmiw的ID已经停用,现在用这个) 但是我在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>这段的时候启动tomcat 就会出错哈
    在web.xml文件中已经存在了一个
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>  <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    这个,我把你给我的那段放到它下面这样是不是不可以哈?
    该怎么配置这个servlet?
      

  17.   

    js应该放到web目录去,不要和class文件混在一起
      

  18.   

    To:hbwhwang(catmiw的ID已经停用,现在用这个) 
    我用javascriptservlet继承ActionServlet 就可以了吧?
    == 我试一下哈
      

  19.   

    xinshou1979330(Success.java):
    你好像不懂servlet?
      

  20.   

    To:hbwhwang(catmiw的ID已经停用,现在用这个) 
    恩,做的web项目太少了,不是很了解
    刚才说的那个依然不好用哈
      

  21.   

    我的msn:[email protected]上不了qq哈
    谢谢了
      

  22.   

    good servlet! good job!
      

  23.   

    不用那么麻烦,用war文件来部署WEB应用
      

  24.   

    To:hbwhwang(catmiw的ID已经停用,现在用这个) 
    要不把你的例子粘贴到这里吧,如果有时间的话
    谢谢先了。
      

  25.   

    兄弟啊,我前面已经把例子贴在这里了。我想看这个帖子的大部分兄弟都理解了我的例子和做法。
    你不能理解的原因并不是我的问题,而是你不懂SERVLET,不知道SERVLET的运行原理。这样我没办法帮你啊,你得自己去学SERVLET
      

  26.   

    但我现在是这么做的哈
    不知道为什么没有调用那个servlet
      

  27.   

    同意hbwhwang(catmiw的ID已经停用,现在用这个) ( ) 的想法
    其实就是自定义标签而以。
      

  28.   

    serlvet不会用?晕死,难道都是一开始学什么struts,hibernate的??
    从这个意义上还真是框架害人啊,汗
    JSP,servlet,jdbc,jndi,jta,这些基础J2EE技术都应该深入了解才对
      

  29.   

    把javascript语句和html一起在标签里输出
      

  30.   

    两个方法,一个是是相当于一个文件资源管理器,文件压缩在jar(也可以是其它的压缩包)中,服务器启动时候,一个servlet将压缩包里的资源释放到合适位置上,这个最简单,一般也不会影响原有的开发结构;
    另外一个是dwr那样的,一个servlet来管理js请求,这样做的好处是,不仅可以管理现有的“静态的”js文件,还可以动态生成js;