您的位置:首页 > 产品设计 > UI/UE

关于对html静态文件访问解析以及RequestDispatcher.include

2010-04-07 18:09 567 查看
客户端对静态文件html和图片的访问其实都是用缺省servlet来完成相应的!

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


这个就是缺省servlet的定义!就是那些不能解析的访问路径都由这个servlet解析!,具体的也就是访问html会通过getservletOutputStream返回ServletOutStream对象

然后由流原封不动的直接输出源文件流!!如果有乱码 可以在这两点考虑解决!

1、因为这个时候编码由html决定!所以检查html页面的编码是否合适

2、自定义一个servlet!

在这个servlet里进行调用html其实本质上时调用defaultServlet!

public class testServlet  extends HttpServlet
{
public void service(....)
{
response.setCharactorEncoding("gbk");
Printer out=response.getWriter();
RequestDispatcher rd=request.getRequestDispatcher   ("/test.html");
rd.include(request,response);
}
}


因为Tomcat的缺省servlet首先检查当前HttpServletRequest对象有没有PrinterWriter对象!如果已经调用则使用当前的PrinterWriter对象输出到客户端!!这时就可以间接设置字符编码了!!

下面再介绍下RequestDisptcher的include......

使用include方法进行转向时,servlet容器仍然保持其初始的Url路径和参数信息!!

也就是说如果在被调用者程序中检索访问路径时是调用者的路径!而不是被调用的!!

例如:HttpServletRequest.getRequestURL()!

另外

ServletRequest 接口中定义了 getRequestDispatcher()方法

ServletContext接口中也有这个方法

传递给这个方法的路径参数必须是以“/”开头表示当前web应用程序的根目录

区别在与

ServletRequest的这个方法的参数除了可以采用“/”开头的路径字符串 还可以采用非“/”开头的相对路径!!

但RequestDispatcher只能包含当前web应用程序的资源!!所以forward和include方法只能在同一个web应用程序中传递请求!!

这两个方法都可视web-inf文件夹下的资源文件!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐