13_servlet & servletContext

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会在启动服务器的时候创建(标签内写数字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
欢迎页面
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中配置参数
    • 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)