Servlet

1.Servlet

1.什么是servlet?
servlet是运行在web服务器上的代码片段,用于处理用户的http请求,是Sun公司定义的javaee组件规范
1.1Servlet的特点?(与html的区别)
Servlet产生的响应内容是由代码动态生成的,不同用户请求同一个Servlet,得到的响应内容可能是不同的
2.为什么要用servlet?
可以简化web服务器端的开发,将复杂的网络通信细节封装在webservlet中,开发者仅需要提供servlet,就可以完成服务器端开发
3.什么时候用servlet
web服务器处理http协议,使用servlet可以更简单高效
4.如何开发一个servlet
1.前提是需要安装一个 WebServer
tomcat:是apache基金会维护的一个高效,开源,免费的WebServer
2.创建一个servlet,实现servlet接口/继承HttpServlet
在service方法中添加具体的逻辑
在web.xml中servlet

什么是应答状态码?

是http协议规定的,对一次响应状态进行描述的数字代码 常见:

200:本次响应正常
304/307:使用本地缓存的资源
404:用户请求的内容找不到
500:请求的内容找到了,执行代码时出现异常
2. 为什么用应答状态码?
更通用,也更高效

Http协议的请求方式

Http协议规定了8种请求方式,最常用的是2种,get和post

  1. 为什么要规定多种请求方式?
    根据用户请求服务器的目的不同,划分成不同的方式,采用对应的方式可以更高效

2)get请求
代表用户从服务器获取数据(下载),是最为常用的请求方式

1. 以下几种情况,默认使用get请求:
    1. 在浏览器地址栏输入一个url时
    2. 表单(form)的默认提交方式
    3. 是超链接(<a>标签)的默认请求方式

2. get请求的特点:
    1. 请求参数会被拼接到url后面,显示在浏览器的地址栏上
        1. 安全性比较低
        2. 浏览器对地址栏中的内容的长度有限制,一般在2kb

3)post请求
代表用户向服务器提交(上传)数据

1. POST请求的特点:
    1. 请求参数不会拼接在url后面,而是放在请求实体中
        1. 安全性相对高一些
            1. 注意,http协议不会对请求实体中的数据进行解密
        2. 浏览器对请求实体中数据的长度没有限制,理论上多长都可以  
  1. get和post如何选择?
  1. 用户从服务器获取数据时,使用GET
  2. 用户向服务器提交数据时,使用POST
  3. 所有涉及密码的表单,都必须使用POST
  4. GET请求可以提交数据,但是长度有限制,约2KB

Servlet API

String username = request.getParameter(“username”);
获取请求参数

  • response.getWriter().write(“响应内容”);
    响应内容
  • request.setCharacterEncoding(“UTF-8”);
    设置请求字符集
  • response.setContentType(“text/html;charset=utf-8”);
    通知浏览器使用utf-8对响应内容进行解码tomcat读取到这段代码会自动使用utf-8进行编码
  • response.sendRedirect(“url”)
重定向原理:

302响应状态码+location的响应头
特点

  1. 一共是2次请求,2次响应
  2. 地址栏会发生变化,显示的是第二次请求的地址
  3. 重定向既可以定向到当前服务器内部的资源,也可以定向到其它的网站
    1. 服务器内部资源: listUser
    2. 其它网站的资源: http://www.tmooc.cn
  • request.setAttribute(String name,Object,value);
    向request中的一个列表中存入数据
  • request.getAttribute(String name,Object,value);
    向request中的一个列表中取出数据
  • RequestDispatcher rd=request.getRequestDispatcher("/login.jsp");
    获取请求转发器
  • rd.forward(request, response);
    转发请求
转发请求

是指Servlet对一个请求进行初步的处理,然后交给另一个组件(Servlet,JSP,Html)来生成响应内容

一般情况下,都是Servlet对请求进行处理,然后交给JSP来生成响应内容
充分利用不同组件的特点,发挥组件的优势,让组件配合工作,提高开发的效率
请求转发的特点

  1. 一次请求,一次响应
  2. 地址栏不会发生改变
  3. 转发经过的所有组件使用的是同一个request对象,因此可以使用request来共享数据
  4. 请求转发的目的地只能是当前项目中的组件,不能是其他项目或网站的内容
转发与重定向的区别

在这里插入图片描述

servlet生命周期

  1. 创建

  2. 初始化

  3. 就绪

  4. 销毁

    1)创建

  5. 默认情况:

    1. 当用户第一次请求一个Servlet映射的url时,Web服务器会找到该Servlet的class文件,加载并实例化
    2. 后续用户多次请求同一个url,服务器会直接调用刚才实例化的那个Servlet来响应用户请求
    3. 因此,整个服务期间,同一个Servlet,仅存在一个实例
  6. 特殊情况:

    1. 可以在配置一个Servlet时,添加一个标签
      1. 1
      2. 如果一个Servlet配置的这个标签,且其值大于等于0,name服务器启动时,就会加载和实例化该Servlet
      3. 值越小,越优先加载和实例化
    2. 对于非常常用且加载和实例化比较耗时的Servlet,可以配置这个标签

ServletConfig

  1. 获取ServletConfig对象

    1. getServletConfig()
  2. 从config中获取参数的值

    1. config.getInitParameter(name);
  3. 在web.xml中配置


  4. 注意:

    1. 一个Servlet对应一个ServletConfig
    2. 一个ServletConfig中仅包含一个Servlet在web.xml中的配置信息
ServletContext: Servlet上下文

当服务器启动后,会逐个加载配置的Web项目,每加载完一个Web项目,会马上创建一个ServletContext对象,唯一代表该Web项目

  1. 基本功能
    1)在整个项目内部实现数据共享
    API:
    1. 获取ServletContext
      ServletContext sc=getServletContext();

    2. 存值/取值
      sc.setAttribute(String name,Object value);
      sc.getAttribute(String name);
      sc.removeAttribute(String name);

2)对比request,Session,ServletContext

  1. ServletContext只有一个,不适合保存多个用户不同的变量,因为会彼此覆盖
  2. Session可以跨请求保存一个用户的会话状态
  3. request可以在一次请求内部实现数据共享
  4. 遇到共享数据的需求时,如何考虑?
    1. 该数据是大家用同一个,还是每个人不同的?同一个-ServletContext
    2. 该数据是否要跨请求共享? 跨请求 - Session

3)读取web.xml中配置的初始化参数

  1. 可以在web.xml中配置一个项目通用的初始化参数

    encode
    utf-8

  2. 可以通过ServletContext对象,直接获取该初始化参数

    String value=sc.getInitParameter(String name);

  3. 优势:

    1. 不论Servlet还是Filter,还是JSP,都可以直接访问相同的ServletContext,进而获取 该初始化参数的值
    2. 只需要配置一次,就可以实现整个项目的共享

4)ServletContext的生命周期(了解)
创建:服务器启动后,加载完一个项目,就创建一个ServletContext
活多久:和当前项目活的一样久
销毁:服务器关闭或当前项目被移出容器,ServletContext会被销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值