代码清单14:FilterDispatcher.findStaticResource()方法
protected void findStaticResource(String name,HttpServletRequest requeset,HttpServletResponse response) throw IOException{
if(!name.endsWith(".class")){//忽略class文件
//遍历packages参数
for(String pathPrefix: pathPrefixes){
InputStream is = findInputStream(name,pathPrefix);//读取请求文件流
if(is != null){
......(省略部分代码)
//set the content-type header
String contentType = getContentType(name);//读取内容类型
if(contentType != null){
response.setContentType(contentType);//重设内容类型
}
.......(省略部分代码)
try{
//将读取到的文件流以每次复制4096个字节的方式循环输出
copy(is,response.getOutputStream());
}finally{
is.close();
}
reuturn
}
}
}
}
如果用户请求的资源不是以/struts开头——可能是.jsp文件,也可能是.html文件,则通过过滤器链继续往下传送,直到到达请求的资源为止。
如果getMapping()方法返回有效的ActionMapping对象,则被认为正在请求某个Action,将调用Dispatcher.serviceAction(request, response, servletContext, mapping)方法,该方法是处理Action的关键所在。上述过程的源代码如清单15所示。