在用DWR时常看到/dwr/engine.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>
之后想想原理也简单,说白了就是:
通过定义servlet把js当成文件发给浏览器。
下面我们模拟一个例子
一、配置web.xml文件
<servlet>
<servlet-name> javascriptservlet </servlet-name>
<servlet-class> JavaScriptServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> javascriptservlet </servlet-name>
<url-pattern> *.js </url-pattern>
</servlet-mapping>
这样请求js文件时,就不是找工程下的js,而是请求交给servlet。
二、实现servlet
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文件,把它以文件的形式发回给客户端浏览器。
三、在页面中调用
<script language= "javascript " src="xxx.js ">
</script>
注:思想来源于网络(部分代码也来源于网络)

2798





