哪个网站建设公司比较好扬州做网站公司

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

哪个网站建设公司比较好,扬州做网站公司,wordpress 角色 功能,无锡网站制作启航文章目录1. 前置知识2.servlet生命周期2.1 默认情况下#xff0c;服务器启动时#xff0c;servlet对象并没有被创建2.2 用户执行一次请求2.3用户执行第二次请求2.4 3,4,5,6….次请求2.5 关闭服务器3.servlet方法解析4.适配器模式改造servlet4.1不使用servlet模式4.2使用适配… 文章目录1. 前置知识2.servlet生命周期2.1 默认情况下服务器启动时servlet对象并没有被创建2.2 用户执行一次请求2.3用户执行第二次请求2.4 3,4,5,6….次请求2.5 关闭服务器3.servlet方法解析4.适配器模式改造servlet4.1不使用servlet模式4.2使用适配器模式5.GenericServlet6.ServletConfig详解7.ServletConfig接口有四个方法8.ServletContext9.HttpServlet1. 前置知识 服务器启动时servlet对象是否被创建出来 package com.sdnu.javaweb;import jakarta.servlet.;import java.io.IOException;/** 实现servlet接口** author Beyong* date 2023/03/03 20:44/ public class AServlet implements Servlet {public AServlet() {System.out.println(A的无参构造方法);}Overridepublic void init(ServletConfig servletConfig) throws ServletException {}Overridepublic ServletConfig getServletConfig() {return null;}Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}Overridepublic String getServletInfo() {return null;}Overridepublic void destroy() {} }package com.sdnu.javaweb;import jakarta.servlet.*;import java.io.IOException;/* 实现Servlet** author Beyong* date 2023/03/03 20:49/ public class BServlet implements Servlet {public BServlet() {System.out.println(B的无参构造方法);}Overridepublic void init(ServletConfig servletConfig) throws ServletException {}Overridepublic ServletConfig getServletConfig() {return null;}Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}Overridepublic String getServletInfo() {return null;}Overridepublic void destroy() {} }?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0servletservlet-nameaServlet/servlet-nameservlet-classcom.sdnu.javaweb.AServlet/servlet-class/servletservlet-mappingservlet-nameaServlet/servlet-nameurl-pattern/a/url-pattern/servlet-mappingservletservlet-namebServlet/servlet-nameservlet-classcom.sdnu.javaweb.BServlet/servlet-class/servletservlet-mappingservlet-namebServlet/servlet-nameurl-pattern/b/url-pattern/servlet-mapping /web-app在控制台发现没有执行构造方法说明服务器启动的时候构造方法没有执行。 如何使得服务器启动的时候创建servlet对象 在代码中添加 load-on-startup数字/load-on-startup数字越小则优先级越高。 2.servlet生命周期 package com.sdnu.javaweb;import jakarta.servlet.*;import java.io.IOException;/* 实现servlet接口** author Beyong* date 2023/03/03 20:44/ public class AServlet implements Servlet {public AServlet() {System.out.println(A的无参构造方法);}Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println(AServletinit method execute);}Overridepublic ServletConfig getServletConfig() {return null;}Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println(AServletservice method execute);}Overridepublic String getServletInfo() {return null;}Overridepublic void destroy() {System.out.println(AServletdestroy method execute );} }2.1 默认情况下服务器启动时servlet对象并没有被创建 2.2 用户执行一次请求 结论 用户在第一次请求的时候Servlet对象被实例化AServlet的构造方法被执行并且执行的是无参构造。AServlet对象被创建出来后AServlet马上执行init方法第一次请求时init方法执行后马上执行service方法 2.3用户执行第二次请求 控制台输出 AServlet’service method execute 2.4 3,4,5,6…次请求 后面的请求Servlet对象并没有创建而是使用之前的创建好的Servlet对象调用该对象的方法。 servlet对象是单例的但是servlet类不符合单例模式假单例。 无参构造方法只执行一次init方法也只执行一次即第一次。 只要用户发送请求service必然执行。
2.5 关闭服务器 服务器在关闭前执行servlet对象的destroy方法destroy方法执行结束后AServlet对象的才会被销毁AServlet对象内存才会释放。 3.servlet方法解析 构造方法 javaweb不建议手动编写构造方法因为手动编写构造方法容易导致错误所以init方法很有必要。init 很少有使用在初始化的时候使用初始化数据连接池线程池。service 一定要有处理用户的请求。destroy 进行资源关闭。 4.适配器模式改造servlet 4.1不使用servlet模式 接口 package com.sdnu.javaweb.adapter;/
* 接口* author Beyong* date 2023/03/04 11:08/ public interface MyInterface {void m1();void m2();void m3();void m4();void m5();void m6();void m7();void core(); }UserService: package com.sdnu.javaweb.adapter;/* 用户** author Beyong* date 2023/03/04 11:10/ public class UserService implements MyInterface{Overridepublic void m1() {}Overridepublic void m2() {}Overridepublic void m3() {}Overridepublic void m4() {}Overridepublic void m5() {}Overridepublic void m6() {}Overridepublic void m7() {}Overridepublic void core() {System.out.println(UserServicecore method execute!!!);} }CustomerService: package com.sdnu.javaweb.adapter;/* CustomerService** author Beyong* date 2023/03/04 11:13/ public class CustomerService implements MyInterface{Overridepublic void m1() {}Overridepublic void m2() {System.out.println(Customerm2 method execute);}Overridepublic void m3() {}Overridepublic void m4() {}Overridepublic void m5() {}Overridepublic void m6() {}Overridepublic void m7() {}Overridepublic void core() {} }不使用适配器模式下则代码每一个service都要取实现接口。 4.2使用适配器模式 接口 package com.sdnu.javaweb.adapter2;/* 接口* author Beyong* date 2023/03/04 11:24/ public interface MyInterface {void m1();void m2();void m3();void m4();void m5();void m6();void m7();void core(); }用户适配器 package com.sdnu.javaweb.adapter2;/* UserService适配器** author Beyong* date 2023/03/04 11:26/ public abstract class UserAdapter implements MyInterface{Overridepublic void m1() {}Overridepublic void m2() {}Overridepublic void m3() {}Overridepublic void m4() {}Overridepublic void m5() {}Overridepublic void m6() {}Overridepublic void m7() {}public abstract void core(); }顾客适配器 package com.sdnu.javaweb.adapter2;/* 客户适配器** author Beyong* date 2023/03/04 11:28/ public abstract class CustomerAdapter implements MyInterface{public abstract void m1();Overridepublic void m2() {}Overridepublic void m3() {}Overridepublic void m4() {}Overridepublic void m5() {}Overridepublic void m6() {}Overridepublic void m7() {}Overridepublic void core() {} }用户 package com.sdnu.javaweb.adapter2;/* 普通用户** author Beyong* date 2023/03/04 11:34/ public class UserService extends UserAdapter{Overridepublic void core() {} }顾客 package com.sdnu.javaweb.adapter2;/* 顾客** author Beyong* date 2023/03/04 11:35/ public class CustomerService extends CustomerAdapter{Overridepublic void m1() {} }5.GenericServlet 我们写一个通用的GenericServlet package com.sdnu.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;/* servlet适配器** author Beyong* date 2023/03/04 11:48/ public abstract class GenericServlet implements Servlet {Overridepublic void init(ServletConfig servletConfig) throws ServletException {}Overridepublic ServletConfig getServletConfig() {return null;}public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse);Overridepublic String getServletInfo() {return null;}Overridepublic void destroy() {} }LoginServlet package com.sdnu.javaweb.servlet;import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse;/* c的servlet** author Beyong* date 2023/03/04 11:49/ public class LoginServlet extends GenericServlet{Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) {System.out.println(cservice method execute);} } web.xml servletservlet-nameloginServlet/servlet-nameservlet-classcom.sdnu.javaweb.servlet.LoginServlet/servlet-class/servletservlet-mappingservlet-nameloginServlet/servlet-nameurl-pattern/login/url-pattern/servlet-mapping地址http://127.0.0.1:8080/lifecycle/login
进一步改造 package com.sdnu.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;/
* servlet适配器** author Beyong* date 2023/03/04 11:48/ public abstract class GenericServlet implements Servlet {private ServletConfig config;Overridepublic void init(ServletConfig config) throws ServletException {this.config config;this.init();}/* 这个init方法供子类重写/public void init(){}Overridepublic ServletConfig getServletConfig() {return null;}public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;Overridepublic String getServletInfo() {return null;}Overridepublic void destroy() {} }6.ServletConfig详解 什么是ServletConfig ServletConfig是Servlet规范中的一员。Tomcat实现了ServletConfig接口一个Servlet对应一个ServletConfigServlet对象是Tomcat创建的同时创建了ServletConfig.创建一个Servelt对象就有一个ServletConfigServlet对象信息。Tomcat解析web.xml文件将web.xml文件中 servlet/servlet标签中的配置信息自动包装到ServletConfig对象中去。 ServletConfjg有哪些方法 getInitParameterNames getInitParameter package com.sdnu.javaweb.servlet;import jakarta.servlet.; import sun.plugin2.util.ParameterNames;import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration;/*** servletConfig测试2** author Beyong* date 2023/03/06 13:05**/ public class ConfigServletTest2 extends GenericServlet {Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {servletResponse.setContentType(text/html);PrintWriter out servletResponse.getWriter();ServletConfig config this.getServletConfig();out.print(servletConfig对象是 config.toString());out.print(/br);String servletName config.getServletName();out.print(servlet servletName /servlet);out.print(/br);EnumerationString initParameterNames config.getInitParameterNames();while(initParameterNames.hasMoreElements()){String parameterName initParameterNames.nextElement();String parameterVal config.getInitParameter(parameterName);out.print(parameterName parameterVal);out.print(br);}String driver config.getInitParameter(driver);out.print(driver);// EnumerationString names this.getInitParameterNames(); // while(names.hasMoreElements()){ // String name names.nextElement(); // String value this.getInitParameter(name); // out.print(name value); // out.print(br); // }} } ?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0servletservlet-nameconfigTest/servlet-nameservlet-classcom.sdnu.javaweb.servlet.ConfigServletTest/servlet-class/servletservlet-mappingservlet-nameconfigTest/servlet-nameurl-pattern/test/url-pattern/servlet-mappingservletservlet-nameconfigTest2/servlet-nameservlet-classcom.sdnu.javaweb.servlet.ConfigServletTest2/servlet-classinit-paramparam-namedriver/param-nameparam-valuecom.mysql.cj.jdbc.Driver/param-value/init-paraminit-paramparam-nameurl/param-nameparam-valuejdbc:mysql://localhost:3306/sdnu/param-value/init-paraminit-paramparam-nameuser/param-nameparam-valueroot/param-value/init-paraminit-paramparam-namepassword/param-nameparam-valueroot123/param-value/init-param/servletservlet-mappingservlet-nameconfigTest2/servlet-nameurl-pattern/test2/url-pattern/servlet-mapping /web-app7.ServletConfig接口有四个方法 public String getInitParameter(String name);public Enumeration getInitParameterNames();public ServletContext getServletContext();public String getServletName(); 以上四个方法可以在自己编写的Servlet类中使用this调用这个Servlet继承了GenericServlet 8.ServletContext ServletContext是接口是Servlet规范的一员。Tomcat实现了ServletContext接口。ServletContext是服务器创建的在服务器启动的时候创建在服务器关闭的时候销毁对于一个WebApp来说ServletContext只有一个。ServletContext对象对应整个web.xml。ServletContext接口的方法 1 EnumerationString initParameterNames application.getInitParameterNames(); String value application.getInitParameter(name);以上两个方法获取context-param标签中的name和value context-paramparam-namestartIndex/param-nameparam-value2/param-value/context-param2获取应用的根路径 String contextPath application.getContextPath();3获取文件的绝对路径 public String getRealPath(String path)(4)访问日志 public void log(String message); public void log(String message, Throwable t);Tomcat服务器的Log目录下都有哪些日志信息 catalina.2023-02-28.log 服务器的java程序运行的控制信息 localhost.2023-03-07.log ServletContext对象的log方法记录的日志存储到这个文件中 localhost_access_log.2023-02-28.txt 访问日志 ServletContext又叫应用域放到ServletContext中的数据一般是数据量小所以用户共享的不经常修改的。 存public void setAttribute(String name, Object value); 取public void getAttribute(String name); 删public void removeAttribute(String name); User user new User(jack, 123456); application.setAttribute(UserObj, user); Object userObj application.getAttribute(UserObj); out.print(userObj); out.print(/br);9.HttpServlet jakarta.servlet.Servlet 【接口】 jakarta.servlet.GenericServlet implements Servlet 【抽象类】 jakarta.servlet.http.HttpServlet extends GenericServlet 【类】 以后编写程序继承HttpServlet 作者Beyong     出处Beyong博客 github地址https://github.com/beyong2019 本博客中未标明转载的文章归作者Beyong有欢迎转载但未经作者同意必须保留此段声明且在文章明显位置给出原文连接否则保留追究法律责任的权利。