浅谈Servlet

post与get之间的区别

他们是Http协议的两种常见请求方式。

  1. 数据传递长度:get长度比较小,post没有限制
  2. 数据传递方式:get使用URL传递参数值,post直接将参数值放入request body
  3. 数据传递安全性:get不安全,post安全
  4. 发送的数据包数量:get发送1个TCP数据包,post发送2个TCP数据包
    首先发送一个request head(1个TCP数据包),服务器接收后返回100状态码,再发送request body(1个TCP数据包)
  5. 缓存:get访问浏览器会产生缓存,但是post没有

重定向与请求转发的区别

重定向(客户端):通知客户端浏览器,重新定向请求新的页面地址

response.sendRedirect("index.jsp");

请求转发(服务器):服务器直接转发请求,跳转并执行新页面

RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp");
requestDispatcher.forward(request, response);
  1. 重定向是客户端浏览器执行跳转;请求转发是服务器端直接跳转
  2. 重定向之后,客户端浏览器地址栏显示新的请求地址;
    请求转发之后,客户端浏览器地址栏显示旧的请求地址;
  3. 重定向代表一次新的请求;请求转发没有发起新请求

谈谈你对JSP九个内置对象的理解

​ JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。在JSP页面中,可以通过存取JSP内置对象实现与JSP页面和Servlet环境的相互访问。JSP中共包含9个内置对象,其中包含4个作用域对象和5个其它内置对象。

4个作用域对象(都可以利用setAttribute(String key,Object value)/getAttribute(String key)来存储/取出键值对数据,作用域从小到大为:PageContext(jsp页面),ServletRequest(一次请求),HttpSession(一次会话),ServletContext(整个web应用))
  1. pageContext(page域)
    1)page域指当前的jsp页面,作用范围是整个JSP页面,是四大作用域中最小的一个。
    2)pageContex的生命周期是这个页面的运行时间,若你关掉这个页面,页面运行结束,pageContext就会消亡,数据也会失效。

    3)使用情况:只适合在一个页面中使用,在一个页面中定义变量,和保存在此页面中有用的数据。

  2. request(request域)

    1)request是指一次请求,即当用户访问web服务器的时候,web服务器会生成request和response对象,然后在service方法调用,完成用户的请求和对用户的响应。作用范围整个请求链。

    2)request的生命周期是请求的周期,若请求一直转发下去,其生命并不会结束。当整个请求结束,request生命结束。在request保存的数据也会失效。

    3)使用情况:用于一次请求在不同页面间的操作及参数传递,如表单的参数传递。

    4)常用方法

    request.getContextPath():获取项目运行时的应用的访问名称
    request.getMethod():获取当前请求的方式
    request.getRemoteAddr():获取客户端的IP地址
    request.getLocalAddr():获取服务器的IP地址
    request.getSession():获取当前Session会话对象
    request.getRealPath():获取当前应用在服务器端的真实路径
    request.getParameter():根据参数名称获取请求中的参数值
    request.getServletContext():获取application对象
    request.setCharacterEncoding("utf-8"):设置中文编码集,用于解决中文乱码
    request.getRequestDispatcher():请求转发(服务器):服务器直接转发请求,跳转并执行新页面
    
  3. session(session域)

    1)session是指一次会话,当用户首次访问服务器时,服务器会根据每一个浏览器的请求创建一个session对象,每个用户有每个的session对象,相当于身份证,保存在服务器中。借助cookie技术来传递id属性,就可以在每次访问中找到自己的session。作用范围是一次会话。

    2)session的生命周期是在服务器正常的情况下,在第一次调用request.getSession()方法时到销毁该session时结束。一次"会话"包含若干次"请求",会话结束有三折方式:客户端浏览器关闭;客户端超时(Tomcat默认为30分钟);服务器关闭。

    3)使用情况:主要是网站用户的信息,购物车。

    4)常用方法

    session.getId():获取当前会话对象的ID
    session.getCreationTime():获取Session的创建时间
    session.getLastAccessedTime();获取本次会话最后一次访问时间
    
  4. application(ServletContext)

    1)application即是servlet中的ServeltContext。application作用范围:整个Web应用。

    2)ServletContext可以存数据,只要设置一次,整个web应用都可以访问到数据。

    3)ServletContext生命周期在服务器启动时创建,在服务器关闭时销毁。

    4)使用情况:每个用户都可以访问的数据,或者多个客户端共享数据。例如购物网站的首页,商品页等。

    5)常用方法

application.getRealPath(""):获取应用真实路径
application.getContextPath():获取应用访问名称
application.getSessionTimeout():获取Session超时时间
5个其它内置对象
  1. ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置。

  2. JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter。

  3. HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据。

    常用方法

response.setContentType("text/html;charset=utf-8"):设置中文编码
response.getWriter():获取输出流
reponse.sendRedirect():重定向(客户端):通知客户端浏览器,重新定向请求新的页面地址
  1. Object类的Page对象,处理jsp页面,是一个Servlet的实例。
  2. Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true。

Servlet生命周期

Servlet生命周期包含实例化、初始化、服务和销毁四个阶段。

  1. 实例化:当客户端发起第一次请求时,Servlet容器启动,调用自身默认的无参构造方法servlet()来创建Servlet实例。
    public LifeServlet() {
        System.out.println("1.LifeServlet实例被创建");
    }
  1. 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法(重写父类)初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作。
    @Override
    public void init() throws ServletException {
        System.out.println("2.LifeServlet实例完成初始化!");
    }
  1. 服务:Servlet容器调用Servlet的service()方法,根据请求方式不同,调用不同的doXXX方法处理请求。
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("3.LifeServlet实例调用服务");
    }
  1. 销毁:当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法来销毁Servlet实例。
    public void destroy() {
        System.out.println("4.LifeServlet实例被销毁");
    }

在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,但服务可以多次执行。

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