美文网首页
13_servlet & servletContext

13_servlet & servletContext

作者: AndroidCat | 来源:发表于2017-06-06 22:58 被阅读0次
    Servlet
    Servlet简介
    • Servlet是运行在服务端的java小程序,用来处理客户端的请求,响应给浏览器的动态资源.
    • Servlet本质是java代码,通过java的api动态的向客户端输出内容
    • Servlet运行在服务器中,main方法运行在本地java程序中
    • Servlet是javaweb三大组件之一(Servlet,Filter,Listener)
    Servlet快速入门
    1. 创建类实现Servlet接口
    2. 实现接口的方法
    3. 在web.xml进行servlet的配置
    • 但是在开发中不会直接实现Servlet接口,因为Servlet需要覆盖的方法太多,一般:
    1. 集成HttpServlet类
    2. 重写doPost()和doGet()两个方法
    3. 在web.xml进行servlet的配置
    导入外部web项目报感叹号警告
    • 如果导入的web项目有一个感叹号的警告,是环境不匹配的原因
    • 右键项目,built-path,然后remove掉报错的依赖,添加本地的新的依赖,如tomcat中的serv* 如为jre不一致,添加jre system library
    Servlet方法
    • init():初始化-->Servlet对象创建的时候执行
      • 参数ServletConfig config:代表的是servlet对象的配置信息
      • config.getServletName-->web.xml中定义的servletName(没啥用)
      • config中的配置信息来源于web.xml
      • ServletContext context = config.getServletContext();
    • server():服务-->每次访问都会执行一次
      • 参数ServletRequest封装的是http请求中的所有信息
      • 参数ServletResponse代表http响应,内部要封装的是需要响应的信息
    • destory():销毁-->Servlet对象销毁的时候执行
    Servlet对象的生命周期(面试容易问)
    • Servlet的创建:默认第一次访问Servlet的时候创建
    • Servlet的销毁:服务器关闭的时候
    Servlet的执行步骤
    1. 浏览器输入地址回车访问服务器,客户端封装一个http请求发送给服务器
    2. tomcat服务器解析url地址,找到对应的工程和对应的Servlet文件
    3. tomcat服务器创建Servlet对象,同时创建对应的ServletRequest对象和ServletResponse对象,传入server方法中
    Servlet的基本配置(web.xml)
    • url-padding的配置方式:
      1. /url地址:完全匹配,访问的资源与配置的资源完全相同才能访问到
      2. 目录匹配:/虚拟目录*:其中*代表任意
      3. 扩展名匹配: *.扩展名(以*开始,以扩展名结束)
    • 注:第2,3种方式不要使用
    服务器启动实例化Servlet配置
    • Servlet何时创建:默认第一次访问的时候创建
    • 为什么默认
      • 当在<servlet>的配置时加上<load-on-startup>,servlet会在启动服务器的时候创建(标签内写数字1-5,代表优先级,数字越小优先级越高)
    缺省Servlet
    • 可以将url-padding配置成一个/,代表该servlet是一个缺省的servlet
    • 什么是缺省的servlet:
      • 当访问的地址所有的servlet都不匹配是,会执行缺省的servlet
    • 配置了缺省后,通过浏览器查找静态资源就会报404,然后跳转到缺省
    • web应用中,所有的资源响应都是servlet负责,包括静态资源
    • 在tomcat目录下的conf目录下的web.xml文件中存在一个全局的配置文件,里面有一个全局的缺省处理
    • 首先拿到你需要访问的静态资源地址去工程的web.xml的url-padding中找,发现没有,然后调用全局web.xml中的缺省Servlet,通过全局缺省的Servlet找到文件逐行数据返回给浏览器,如果静态资源也没有,则404
    欢迎页面
    • <welcome-file-list>
    HttpServlet
    • 在项目开发中一般不自己创建类再实现Servlet接口,直接右键创建Servlet对象,ide会自动在web.xml中帮你配置
    • 得到的类是继承HttpServlet的,重写了doGet和doPost方法
    修改HttpServlet模板
    • window-->preferences-->Templates-->
    package ${enclosing_package};
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ${primary_type_name} extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().write("hello yhh...");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
    
    用户登录功能
    codding
    
    ServletContext
    ServletContext简介
    • ServletContext代表的是一个web应用的环境(上下文)对象,内部封装的是该web应用的信息
    • 一个web项目只有一个ServletContext对象
    • 一个web项目有多个Servlet
    ServletContext的生命周期
    • 创建:该web应用被加载(服务器启动,发布web应用)
    • 销毁:web应用被移除
    获取ServletContext
    1. Servlet的init(ServletConfig config)中通过config.getServletContext();获得(一般不用)
    2. (HttpServlet对象中)this.getServletContext();
    ServletContext作用
    1. 获得web应用全局的初始化参数
      • 在web.xml中配置参数
      • <context-param><param-name></param-name><param-value></param-value></context-param>
      • spring框架的时候会用到
    2. 获得web应用中任何资源的绝对路径(==重要==)
      • String getRealPath(相对于该web应用的相对地址):获得真实路径
    3. ServletContext是一个域对象(==重要==)
      • 存储数据的区域就是域对象
      • ServletContext的作用范围:整个web应用(所有的动态web资源都可以随意得向ServletContext中存取数据,数据可以共享)
      • Servlet之间的数据传输(通信)
    • 域对象通用的方法:
      • setAttribute(name, value)
      • getAttribute(name)
      • removeAttribute(name)
    //在读取src(classes) 下的资源是可以同类加载器----专门加载classes 下的文件的
    //getResource() 参数是一个相对地址 相对classes
    String path = ContextServlet.class.getClassLoader().getResource("c.txt").getPath();
    System.out.println(path);
    
    记录登陆人数
    public class LoginServlet extends HttpServlet {
        //在父类中init(ServletConfig config)内部提供了一个空的init()方法给我们自定义初始化调用
        @Override
        public void init() throws ServletException {
            //在Seveltcontext域中存一个数据count
            int count = 0;
            this.getServletContext().setAttribute("count", count);
        }
    }
    

    相关文章

      网友评论

          本文标题:13_servlet & servletContext

          本文链接:https://www.haomeiwen.com/subject/dhnnfxtx.html