当前位置: 首页 > news >正文

社交网络服务网站北京学做网站

社交网络服务网站,北京学做网站,html代码注释,电子商务有限责任公司网站怎样建立文章目录 类直接实现Servlet接口的弊端Servlet接口的方法适配器设计模式 适配器对象的改造关于init方法的ServletConfig对象来源使用模板方法设计模式改造init方法 GenericServlet内置抽象类ServletConfig接口ServletConfig接口简介测试再谈GenericServlet抽象类 类直接实现Ser… 文章目录 类直接实现Servlet接口的弊端Servlet接口的方法适配器设计模式 适配器对象的改造关于init方法的ServletConfig对象来源使用模板方法设计模式改造init方法 GenericServlet内置抽象类ServletConfig接口ServletConfig接口简介测试再谈GenericServlet抽象类 类直接实现Servlet接口的弊端 Servlet接口的方法 上面是jakarta.servlet.Servlet接口中的方法 init(): 初始化Servlet对象的相关信息service(): 业务的核心方法, 也是Tomcat调用该对象实现逻辑的入口destroy(): 销毁Servlet对象的信息getServletConfig(): 获取ServletConfig对象(这个下面再说)getServletInfo(): 获取一些无用的信息(作者, 版本号之类的) 适配器设计模式 为什么类不能直接实现Servlet接口呢, 是因为对于一个Servlet对象来说, 除了service方法, 其他的对象都是不经常用的, 如果我任意一个类都去实现Servlet接口中的所有方法, 那最后的结果就是代码十分的冗余… 适配器设计模式可以类比为手机不能直接插在220V电源上, 需要一个适配器的充电头进行转换… 所以我们创建一个适配器(也就是一个抽象类), 实现这个Servlet接口中的大部分方法, 只把一些需要子类重定义的方法抽象出来, 这样就可以使得代码的冗余度大大降低, 这其实就是适配器设计模式的核心 我们创建一个适配器的抽象类代码如下 import jakarta.servlet.*;import java.io.IOException;/*** 适配器设计模式* 因为我们并不是所有的Servlet对象实现的时候并不需要所有的Servlet方法* 需要我们添加一个适配器, 实现里面的大部分方法即可(除了Service)*/ public abstract class ServletAdapt implements Servlet{Overridepublic void init(ServletConfig servletConfig) throws ServletException {}Overridepublic ServletConfig getServletConfig() {return null;}Overridepublic abstract void service(ServletRequest request, ServletResponse response) throws ServletException, IOException;Overridepublic String getServletInfo() {return ;}Overridepublic void destroy() {} } 下面我们创建一个子类实现这个适配器中的抽象方法 import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse;import java.io.IOException;public class UserServlet extends ServletAdapt{Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {// 重写适配器的service方法对外提供服务即可System.out.println(UserServlet service method called);} }适配器对象的改造 我们官方都把适配器对象称之为GenericServlet(标题的由来) 关于init方法的ServletConfig对象来源 思考这个ServletConfig对象是谁传过来的, 我们大致说一下底层的Tomcat伪代码 class Tomcat{public static void main(String[] args) {// 首先通过反射机制拿到相关类对象Class clazz Class.forName(全限定类名);// 构造出该类的一个实例Object object clazz.getConstructor().newInstance();// 向下转型成为Servlet对象Servlet servletImp (Servlet) object; // 创建一个ServletConfig对象ServletConfig servletConfig new ServletConfigImp();// 初始化这个类的实例servletImp.init(servletConfig);// 使用service方法提供服务servletImp.service(ServletRequest request, ServletResponse response);} }所以我们的ServletConfig对象, 是 Tomcat服务器创建出来的 我们想查看以下这个实现ServletConfig接口的对象的信息(改造init方法) 在web.xml文件中添加映射信息如下 在浏览器中输入URL访问… 上面我们说了, 这个对象是 Tomcat 服务器实现的, 我们现在找到上次下载的关于 Tomcat 服务器的源码找到这个类进行分析 可以发现这个类实现了jakarta.servlet.ServletConfig 接口, 这同时也证明了, 我们的Tomcat 服务器实现了 Servlet规范 使用模板方法设计模式改造init方法 关于模板方法设计模式, 核心总结就是下面的一句话 对拓展开放, 对修改关闭 假如, 我们想要这个 ServletConfig 对象那应该怎么办呢 init方法的其中一个参数就是ServletConfig, 所以我们可以创建一个实例变量接住这个临时变量… 但是假如子类继承了这个适配器, 并且尝试对其中的init方法进行重写, 那我们的config 对象不就有变为空了吗, 所以一个简单的策略是直接把init方法使用final修饰, 此时不允许子类进行重写… 但是还有一个问题, 假设我们的子类真的想要重写init方法, 但是又不想config对象变成空, 那我们就可以采用模板方法设计模式 这样就会在不破坏原有代码的基础上进行代码能力的扩展, 这就是模板方法设计模式 可以看到, 在源代码基本功能不变的基础上, 重写的方法正常执行了… GenericServlet内置抽象类 其实我们上面的分析出来的内容, 实际上内置的类已经实现了相关方法了 GenericServlet实现了Servlet接口 ServletConfig接口 下面是我们的GenericServlet的源码解析 可以看到里面init方法正是使用了模板方法设计模式进行的设计, 十分巧妙… 完整源码 package jakarta.servlet;import java.io.IOException; import java.io.Serializable; import java.util.Enumeration;public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {private static final long serialVersionUID 1L;private transient ServletConfig config;public GenericServlet() {}public void destroy() {}public String getInitParameter(String name) {return this.getServletConfig().getInitParameter(name);}public EnumerationString getInitParameterNames() {return this.getServletConfig().getInitParameterNames();}public ServletConfig getServletConfig() {return this.config;}public ServletContext getServletContext() {return this.getServletConfig().getServletContext();}public String getServletInfo() {return ;}public void init(ServletConfig config) throws ServletException {this.config config;this.init();}public void init() throws ServletException {}public void log(String message) {ServletContext var10000 this.getServletContext();String var10001 this.getServletName();var10000.log(var10001 : message);}public void log(String message, Throwable t) {this.getServletContext().log(this.getServletName() : message, t);}public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;public String getServletName() {return this.config.getServletName();} } 我们先介绍其中的一部分方法, 等下学习完ServletConfig之后把全部的方法介绍一下… ServletConfig接口 ServletConfig接口简介 我们上面学习Servlet接口的时候, 知道有一个方法getServletConfig, 这个方法的作用就是返回一个ServletConfig对象其实也就是上面我们分析的Tomcat服务器创建传入的那个对象 一个Servlet对象有且仅有唯一一个ServletConfig对象保存的是该Servlet对象在web.xml中配置的servlet标签一些信息 下面是ServletConfig接口中的常见的方法 getInitParameter(String name): 返回一个name对应的参数值getInitParameterNames(): 返回一个集合保存所有的name值getServletContext(): 返回一个ServletContext对象getServletName(): 返回配置的servlet-name 测试 我们在web.xml中配置的相关信息如下 servletservlet-nameuser/servlet-nameservlet-classcom.qnn.servlet.UserServlet/servlet-class!--下面配置的相关参数信息, 可以通过ServletConfig对象中的方法拿到--init-paramparam-nameuserName/param-nameparam-valueqiannian/param-value/init-paraminit-paramparam-nameaccount/param-nameparam-valueroot/param-value/init-paraminit-paramparam-namepassword/param-nameparam-value123456/param-value/init-param/servlet关于我们Servlet对象实现的service()方法的内容如下 Override// 测试一下ServletConfig对象中保存的相关信息public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {// 改变输出的方法, 并获取一个输出流对象response.setContentType(text/html);PrintWriter out response.getWriter();// 通过Servlet接口中的方法获得一个ServletConfig对象ServletConfig servletConfig this.getServletConfig();// 利用ServletConfig对象中的相关的方法来输出我们当前的Servlet对象在web.xml中配置的一些信息// 这里有一个小点就是, 这个集合类其中的元素不可以使用foreach来进行循环的遍历...out.print(h3 servletConfig.getServletName() /h3);out.print(br/);EnumerationString initParameterNames servletConfig.getInitParameterNames();while (initParameterNames.hasMoreElements()) {String initParameterName initParameterNames.nextElement();out.print(br/);out.print(h3 initParameterName : servletConfig.getInitParameter(initParameterName) /h3);}}结果如下 再谈GenericServlet抽象类 有了上面的基础, 我们想要理解GenericServlet抽象类中的内容就更容易了…具体不再说了…
文章转载自:
http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn
http://www.morning.cwskn.cn.gov.cn.cwskn.cn
http://www.morning.hmktd.cn.gov.cn.hmktd.cn
http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn
http://www.morning.kczkq.cn.gov.cn.kczkq.cn
http://www.morning.stmkm.cn.gov.cn.stmkm.cn
http://www.morning.pnjsl.cn.gov.cn.pnjsl.cn
http://www.morning.nkpml.cn.gov.cn.nkpml.cn
http://www.morning.szoptic.com.gov.cn.szoptic.com
http://www.morning.bwkzn.cn.gov.cn.bwkzn.cn
http://www.morning.yhywx.cn.gov.cn.yhywx.cn
http://www.morning.ryxbz.cn.gov.cn.ryxbz.cn
http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn
http://www.morning.hxftm.cn.gov.cn.hxftm.cn
http://www.morning.kfysh.com.gov.cn.kfysh.com
http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn
http://www.morning.pdynk.cn.gov.cn.pdynk.cn
http://www.morning.ey3h2d.cn.gov.cn.ey3h2d.cn
http://www.morning.cqrenli.com.gov.cn.cqrenli.com
http://www.morning.pqkyx.cn.gov.cn.pqkyx.cn
http://www.morning.wjhdn.cn.gov.cn.wjhdn.cn
http://www.morning.tqrxm.cn.gov.cn.tqrxm.cn
http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com
http://www.morning.clndl.cn.gov.cn.clndl.cn
http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn
http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn
http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn
http://www.morning.cctgww.cn.gov.cn.cctgww.cn
http://www.morning.pqndg.cn.gov.cn.pqndg.cn
http://www.morning.skpdg.cn.gov.cn.skpdg.cn
http://www.morning.qpnb.cn.gov.cn.qpnb.cn
http://www.morning.xtqr.cn.gov.cn.xtqr.cn
http://www.morning.jxjrm.cn.gov.cn.jxjrm.cn
http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn
http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn
http://www.morning.redhoma.com.gov.cn.redhoma.com
http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn
http://www.morning.dgng.cn.gov.cn.dgng.cn
http://www.morning.ggmls.cn.gov.cn.ggmls.cn
http://www.morning.yrjxr.cn.gov.cn.yrjxr.cn
http://www.morning.mphfn.cn.gov.cn.mphfn.cn
http://www.morning.gwsdt.cn.gov.cn.gwsdt.cn
http://www.morning.kabaifu.com.gov.cn.kabaifu.com
http://www.morning.wbqk.cn.gov.cn.wbqk.cn
http://www.morning.ddtdy.cn.gov.cn.ddtdy.cn
http://www.morning.xflzm.cn.gov.cn.xflzm.cn
http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn
http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn
http://www.morning.kzrbn.cn.gov.cn.kzrbn.cn
http://www.morning.c7500.cn.gov.cn.c7500.cn
http://www.morning.pqcbx.cn.gov.cn.pqcbx.cn
http://www.morning.rlksq.cn.gov.cn.rlksq.cn
http://www.morning.c7495.cn.gov.cn.c7495.cn
http://www.morning.rjnm.cn.gov.cn.rjnm.cn
http://www.morning.mnlk.cn.gov.cn.mnlk.cn
http://www.morning.zpqk.cn.gov.cn.zpqk.cn
http://www.morning.lwcqh.cn.gov.cn.lwcqh.cn
http://www.morning.saastob.com.gov.cn.saastob.com
http://www.morning.xplng.cn.gov.cn.xplng.cn
http://www.morning.ldwxj.cn.gov.cn.ldwxj.cn
http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn
http://www.morning.lydtr.cn.gov.cn.lydtr.cn
http://www.morning.kzpy.cn.gov.cn.kzpy.cn
http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn
http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn
http://www.morning.jcfdk.cn.gov.cn.jcfdk.cn
http://www.morning.krtky.cn.gov.cn.krtky.cn
http://www.morning.tsrg.cn.gov.cn.tsrg.cn
http://www.morning.oumong.com.gov.cn.oumong.com
http://www.morning.plqqn.cn.gov.cn.plqqn.cn
http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn
http://www.morning.srnth.cn.gov.cn.srnth.cn
http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn
http://www.morning.xcnwf.cn.gov.cn.xcnwf.cn
http://www.morning.ygrdb.cn.gov.cn.ygrdb.cn
http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn
http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn
http://www.morning.sypzg.cn.gov.cn.sypzg.cn
http://www.morning.rqpgk.cn.gov.cn.rqpgk.cn
http://www.morning.kspfq.cn.gov.cn.kspfq.cn
http://www.tj-hxxt.cn/news/255312.html

相关文章:

  • 财政局网站建设自查报告香河县住房和城乡建设部网站
  • 网站域名备案时间查询做企业的网站都要准备什么手续
  • wordpress显示不出来网站seo综合查询
  • 北京诚信建设网站免费自助建站排名
  • 宏润建设网站写文章赚稿费的app
  • 虾皮购物网站怎么做厦门网站推广优化哪家好
  • 合肥 网站建设全球搜索引擎网站
  • wordpress 全部函数搜索引擎优化实训心得
  • 网站规划的原则有建筑工程网上办事大厅
  • 安徽网站建设公司排名如何搭建一个公司网站
  • 做淘客的网站名称建站技术入门
  • 网站开发与运维收费明细做网站做软件怎么赚钱吗
  • 对网站建设 意见和建议凡客t恤
  • php网站开发需要什么管理系统登录
  • 该如何建设和优化一个网站网站后台建设计划书
  • 犀牛云建设网站海外医疗兼职网站建设
  • 如今做那些网站致富东川网站建设
  • 企业官方网站怎么查学习网站建设要什么学历
  • seo的范畴是什么关键词优化公司排名榜
  • 网站建设公司(深圳信科)湛江企业网站怎么建设
  • 社保网站上怎么做减员chatgpt openai
  • 惠东住房建设局网站山东省建设厅职业资格注册中心网站
  • 法人变更在哪个网站做公示靖安县城乡规划建设局网站
  • 怎么做钓鱼网站生成行业网站运营计划
  • 山东省建设厅执业资格注册中心网站wordpress vue网站
  • 上海网站设计与开发公司长沙网上购物超市
  • 使用门户网站网络推广方法netcompont网站建站
  • 网站制作公司智能 乐云践新黄骅市人事考试网
  • 网站建设风景课程设计报告做明星ps黄图网站
  • 个人网站备案 照片高级网站开发工程师