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>的配置时加上<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);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 本文包括: Servlet简介关于Servlet的一些类 Servlet生命周期 ServletConfig获得初...
    廖少少阅读 3,855评论 1 67
  • Servlet学习的大纲 servlet概念及相关接口简介 servet 执行过程 servlet映射路径 缺省s...
    奋斗的老王阅读 1,191评论 1 51
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,623评论 18 399
  • 本章聊一聊ServletContext 3.0规范中定义的注解以及在web应用中使用的框架和库的可插拔性的提升。 ...
    Lucky_Micky阅读 6,032评论 0 3
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,240评论 11 349