个简单的Servlet容器.ppt

上传人:xt****7 文档编号:4145162 上传时间:2020-01-01 格式:PPT 页数:19 大小:642.36KB
返回 下载 相关 举报
个简单的Servlet容器.ppt_第1页
第1页 / 共19页
个简单的Servlet容器.ppt_第2页
第2页 / 共19页
个简单的Servlet容器.ppt_第3页
第3页 / 共19页
点击查看更多>>
资源描述
一个简单的Servlet容器 贝毅君浙江大学软件学院 Servlet 一个简单的Servlet容器外观模式优化Servlet容器 Servlet Servlet是一种服务器端的Java应用程序 具有独立于平台和协议的特性 可以生成动态的Web页面 它担当客户请求 Web浏览器或其他HTTP客户程序 与服务器响应 HTTP服务器上的数据库或应用程序 的中间层 Servlet是位于Web服务器内部的服务器端的Java应用程序 与传统的从命令行启动的Java应用程序不同 Servlet由Web服务器进行加载 该Web服务器必须包含支持Servlet的Java虚拟机 publicvoidinit ServletConfigconfig throwsServletException publicvoidservice ServletRequestrequest ServletResponseresponse throwsServletExcetion IOException publicvoiddestroy publicvoidServletConfiggetServletConfig publicStringgetServletInfo 上述5个是Servlet接口中声明的5个方法 其中init service 和destroy 方法和servlet生命周期相关 Servlet生命周期 当实例化某个servlet类后 servlet会调用其init 方法将其初始化 Servlet容器只会调用该方法一次 Servlet接受任何请求之前 必须要经过争取的初始化 当servlet的一个客户端请求到达后 servlet容器会调用相应servlet的service 方法 并将servletRequest和servletResponse作为参数传入 在Servlet对象的整个生命周期里面 service 方法会被多次调用 在将Service实例从服务中移除前 servlet容器会调用destroy 方法 一般当servlet容器关闭或servlet容器要释放内存时 才会将servlet实例移除 Servlet生命周期 Servlet实例PrimitiveServlet publicclassPrimitiveServletimplementsServlet publicvoidinit ServletConfigconfig throwsServletException System out println init publicvoidservice ServletRequestrequest ServletResponseresponse throwsServletException IOException System out println fromservice PrintWriterout response getWriter out println Hello Rosesarered out print Violetsareblue publicvoiddestroy System out println destroy publicvoidStringgetServletInfo returnnull publicvoidServletConfiggetServletConfig returnnull Servlet示例demo PrimitiveServlet在每个方法内部增加后台打印 利用打印的后台信息可以跟踪servlet的生命周期调用 本章实现的servlet容器仅仅用到了service 方法 验证生命周期的输出推荐使用完整的tomcat运行 一个简单的servlet容器 改造HttpServer 仅仅需要改造HttpServer中await 方法response sendStaticResource 替换为下述代码 if request getUri startsWith servlet ServletProcessor1processor newServletProcessor1 processor process request response else StaticResourceProcessorprocessor newStaticResourceProcessor processor process request response Url类型为http XXX servlet xxx为访问servlet 不带 servelt 路径访问静态资源 因为servlet的service方法会从servlet容器中接受一个ServletRequest实例和一个ServletResponse实例 因此它们必须作为参数传入的servlet的service 方法中 Request需要实现ServletRequest接口 Reponse也需要实现ServletResponse接口 改造Request和Response ServletProcessor StaticResourceProcessor类用于处理对静态资源的请求 process过程仅仅重新调用response sendResource方法 ServletProcessor类对servlet资源进行http请求 下述为没有补货异常的process过程代码 Stringuri request getUri StringservletName uri substring uri lastIndexOf 1 URL urls newURL 1 URLStreamHandlerstreamHandler null FileclassPath newFile Constants WEB ROOT 类载入器查找目录称为仓库Stringrepository newURL file null classPath getCanonicalPath File separator toString urls 0 newURL null repository streamHandler 类载入器URLClassLoaderloader newURLClassLoader urls ClassmyClass loader loadClass servletName 实例化servlet对象并调用service 方法Servletservlet Servlet myClass newInstance servlet service ServletRequest request ServletResponse response 为什么需要URLStreamHandler对象 这里存在什么问题 通过java classpath lib servlet jar ex02 pyrmont HttpServlet1可以执行该容器 然后可以测试应用程序 浏览器输入http localhost 8080 servlet PrimitiveServlet的时候可以看到浏览器仅仅输出Hello Rosearered 为什么 一个简单的servlet容器 servlet Servlet myClass newInstance servlet service ServletRequest request ServletResponse response 在service方法里面 程序员可以通过向下转型获取自定义的Request和Reponse实例并调用其公共方法parse 或sendStaticResource 如果将公共方法设置为私有方法 在service内部实际上还是可以直接调用的 而且它们不能被其它类调用 所以该方法不好 Protect方法也有service直接调用的问题 所以也并不完美 在这里有个完美的解决方案 外观模式 外观模式 外观模式定义了一个高层的接口 让子系统更加容易使用 外观不只是简化了接口 也将客户从组件的子系统中解耦 Tomcat利用RequestFacade封装Request接口的属性方法 将ServletRequest方法排除 外观模式 RequestFacade publicclassRequestFacadeimplementsServletRequest privateServletRequestrequest null publicRequestFacade Requestrequest this request request publicObjectgetAttribute Stringattribute returnrequest getAttribute attribute publicEnumerationgetAttributeNames returnrequest getAttributeNames 构建返回request的方法request getXXXXX 改造结果 改造servletProcessor servlet Servlet myClass newInstance servlet service ServletRequest request ServletResponse response servlet Servlet myClass newInstance RequestFacaderequestFacade newRequestFacade request ResponseFacadereponseFacade newResponseFacade response servlet service ServletRequest requestFacade ServletResponse reponseFacade 如何改造 运行结果 运行结果 本章的Servlet容器既可以处理静态资源请求 也可以处理简单的Servlet请求 Servlet接口以及相关背景知识外观模式及其应用 总结
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!