第8章 Servlet高级.docx

上传人:b****2 文档编号:24188279 上传时间:2023-05-25 格式:DOCX 页数:25 大小:765.39KB
下载 相关 举报
第8章 Servlet高级.docx_第1页
第1页 / 共25页
第8章 Servlet高级.docx_第2页
第2页 / 共25页
第8章 Servlet高级.docx_第3页
第3页 / 共25页
第8章 Servlet高级.docx_第4页
第4页 / 共25页
第8章 Servlet高级.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

第8章 Servlet高级.docx

《第8章 Servlet高级.docx》由会员分享,可在线阅读,更多相关《第8章 Servlet高级.docx(25页珍藏版)》请在冰豆网上搜索。

第8章 Servlet高级.docx

第8章Servlet高级

第8章Servlet高级

案例8-1实现第一个Filter程序

一、案例描述

1、考核知识点

名称:

实现第一个Filter程序

编号:

028008002

2、练习目标

Ø掌握实际开发中Filter程序的基本实现和使用。

3、需求分析

Filter被称作过滤器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。

在网站开发中,可以使用filter来进行路径过滤,对一些未登录用户进行拦截强制跳转到登录页面,对于主动登录的访问直接不用过滤直接跳转到登录页面。

本案例将演示如何编写简单的路径请求过滤跳转功能。

4、设计思路(实现原理)

1)创建LoginServlet类跳转到登录页面,

2)创建OrderServlet类编写跳转订单页面的功能,

3)创建MyFilter1类过滤器,对于未登陆用户进行过滤跳转到登录页面,

4)创建index.jsp网站首页面,有登录和查看订单链接功能,

5)创建login.jsp网站登录页面,

6)在web.xml中配置初始化参数和类的映射

7)通过浏览器访问index.jsp,展现页面servlet处理响应信息。

二、案例实现

编写LoginServlet,其代码如下:

publicclassLoginServletextendsHttpServlet{

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

req.getRequestDispatcher("/login.jsp").forward(req,resp);

}

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

doGet(req,resp);

}

}

编写OrderServlet,其代码如下:

publicclassOrderServletextendsHttpServlet{

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

req.getRequestDispatcher("/order.jsp").forward(req,resp);

}

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

doGet(req,resp);

}

}

编写MyFilter1,其代码如下:

publicclassMyFilter1implementsFilter{

publicvoidinit(FilterConfigfConfig)throwsServletException{

//过滤器对象在初始化时调用,可以配置一些初始化参数

}

publicvoiddoFilter(ServletRequestreq,ServletResponseresp,

FilterChainchain)throwsIOException,ServletException{

//用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用

HttpServletRequestrequest=(HttpServletRequest)req;

Stringusername=(String)request.getSession().getAttribute("username");

if(username==null){

request.getRequestDispatcher("/login.jsp").forward(request,resp);

return;

}

chain.doFilter(request,resp);

}

publicvoiddestroy(){

//过滤器对象在销毁时自动调用,释放资源

}

}

编写index.jsp,其代码如下:

您好,请登录   我的订单

欢迎访问本网站!

编写login.jsp,其代码如下:

用户名:


密码:


配置web.xml文件:

MyFilter1

cn.itheima.MyFilter1

MyFilter1

/OtherServlet/*

LoginServlet

cn.itheima.LoginServlet

LoginServlet

/UserServlet/Login

OrderServlet

cn.itheima.OrderServlet

OrderServlet

/OtherServlet/order

启动Tomcat服务器,在地址栏中输入http:

//localhost:

8080/chapter08/index.jsp,浏览器显示的结果如下图所示:

然后点击登录链接,查看请求链接地址,同时浏览器显示的结果如下图所示:

然后再返回网站首页index.jsp,点击我的订单链接,查看请求链接地址,同时浏览器显示的结果如下图所示(过滤器对路径进行了拦截跳转):

三、案例总结

1、要学会理解filter过滤器的基本使用和配置

2、本案例简单模仿了不同路径的拦截,对于登陆或者注册等用户请求路径直接过掉不进行过滤,而对于其他路径请求,比如查看订单以及其他商品查看等等都需要进行路径过滤,先查看用户是否已经登录,如果登录直接放行,否者进行拦截跳转到登录页面。

案例8-2Filter映射

一、案例描述

1、考核知识点

名称:

Filter映射

编号:

028008003

2、练习目标

Ø熟悉Filter映射的基本使用和注意点。

3、需求分析

编写filter过滤器很容易实现,但针对不同路径请求进行过滤配置时,配置filter映射也尤其重要,对于多种类似路径可以使用多个路径映射,也可以使用类似通配符路径映射。

本案例将模拟使用多种方式进行演示filter过滤器映射配置并显示配置效果。

4、设计思路(实现原理)

1)创建Servlet1和Servlet1;

2)创建MyFilter2类过滤器,

3)在web.xml中配置初始化参数和类的映射

4)通过浏览器分别访问Servlet1和Servlet2,查看页面效果。

二、案例实现

编写Servlet1,其代码如下:

publicclassServlet1extendsHttpServlet{

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

PrintWriterout=resp.getWriter();

out.write("HelloServlet1");

}

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

doGet(req,resp);

}

}

编写Servlet2,其代码如下:

publicclassServlet2extendsHttpServlet{

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

PrintWriterout=resp.getWriter();

out.write("HelloServlet2");

}

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

doGet(req,resp);

}

}

编写MyFilter2,其代码如下:

publicclassMyFilter2implementsFilter{

publicvoidinit(FilterConfigfConfig)throwsServletException{

//过滤器对象在初始化时调用,可以配置一些初始化参数

}

publicvoiddoFilter(ServletRequestreq,ServletResponseresp,

FilterChainchain)throwsIOException,ServletException{

//用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用

PrintWriterout=resp.getWriter();

out.write("HelloMyFilter2");

}

publicvoiddestroy(){

//过滤器对象在销毁时自动调用,释放资源

}

}

配置web.xml文件:

MyFilter2

cn.itheima.MyFilter2

MyFilter2

/*

Servlet2

cn.itheima.Servlet2

Servlet2

/Servlet2

Servlet1

cn.itheima.Servlet1

Servlet1

/Servlet1

启动Tomcat服务器,在地址栏中输入http:

//localhost:

8080/chapter08/Servlet1,浏览器显示的结果如下图所示:

再在地址栏中输入http:

//localhost:

8080/chapter08/Servlet2,浏览器显示的结果同样如上图所示,所有的路径访问都被filter过滤器拦截到。

修改web.xml中的配置文件,修改如下:

MyFilter2

cn.itheima.MyFilter2

MyFilter2

/Servlet*

Servlet2

cn.itheima.Servlet2

Servlet2

/Servlet2

Servlet1

cn.itheima.Servlet1

Servlet1

/Servlet1

启动Tomcat服务器,在地址栏中输入http:

//localhost:

8080/chapter08/Servlet1,浏览器显示的结果如下图所示:

再在地址栏中输入http:

//localhost:

8080/chapter08/Servlet2,浏览器显示的结果如下图所示:

以上使用/Servlet*的配置方式完全没有过滤效果,然后再次修改web.xml文件如下:

MyFilter2

cn.itheima.MyFilter2

MyFilter2

/User/*

Servlet2

cn.itheima.Servlet2

Servlet2

/Other/Servlet2

Servlet1

cn.itheima.Servlet1

Servlet1

/User/Servlet1

启动Tomcat服务器,在地址栏中输入http:

//localhost:

8080/chapter08/User/Servlet1,浏览器显示的结果如下图所示(路径被过滤器拦截):

再在地址栏中输入http:

//localhost:

8080/chapter08/Other/Servlet2,浏览器显示的结果如下图所示(路径没有被过滤拦截,直接放行):

三、案例总结

实际开发中在配置filter过滤器映射的时候,会针对一种类型的请求进行路径过滤,针对另一种请求路径直接放行,这就需要了解filter过滤器映射配置的一些方法技巧以及一些通配符的注意事项。

案例8-3Filter链

一、案例描述

1、考核知识点

名称:

Filter链

编号:

028008004

2、练习目标

Ø掌握Filter链的请求与响应的拦截执行拦截顺序以及filter映射配置的影响。

3、需求分析

在一个Web应用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一个URL进行拦截,但是多个filter映射配置影响到了请求处理的不同。

本案例将模拟使用两个filter进行请求的过滤拦截,查看请求和响应的执行顺序以及filter映射的实际影响。

4、设计思路(实现原理)

1)创建MyFilter3和MyFilter4类,

2)创建FilterChain类,

3)在web.xml中配置映射信息。

4)通过浏览器访问FilterChain,展现页面输出的信息。

二、案例实现

创建MyFilter3类,代码如下:

publicclassMyFilter3implementsFilter{

publicvoidinit(FilterConfigfConfig)throwsServletException{

//过滤器对象在初始化时调用,可以配置一些初始化参数

}

publicvoiddoFilter(ServletRequestreq,ServletResponseresp,

FilterChainchain)throwsIOException,ServletException{

//用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用

PrintWriterout=resp.getWriter();

out.write("MyFilter3before
");

chain.doFilter(req,resp);

out.write("MyFilter3after
");

}

publicvoiddestroy(){

//过滤器对象在销毁时自动调用,释放资源

}

}

创建MyFilter4类,代码如下:

publicclassMyFilter4implementsFilter{

publicvoidinit(FilterConfigfConfig)throwsServletException{

//过滤器对象在初始化时调用,可以配置一些初始化参数

}

publicvoiddoFilter(ServletRequestreq,ServletResponseresp,

FilterChainchain)throwsIOException,ServletException{

//用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用

PrintWriterout=resp.getWriter();

out.write("MyFilter4before
");

chain.doFilter(req,resp);

out.write("MyFilter4after
");

}

publicvoiddestroy(){

//过滤器对象在销毁时自动调用,释放资源

}

}

创建FilterChain类,代码如下:

publicclassFilterChainextendsHttpServlet{

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

PrintWriterout=resp.getWriter();

out.write("FilterChain
");

}

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

doGet(req,resp);

}

}

在web.xml中配置映射信息:

MyFilter3

cn.itheima.MyFilter3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1