美文网首页
Java - Part 8

Java - Part 8

作者: 低调的灬攻城狮 | 来源:发表于2020-02-25 22:09 被阅读0次

一、Servlet

1、Servlet概述

  • Servlet是Java Server Applet的简称,称为小服务器程序,用Java编写的而服务器端程序,主要功能交互式地浏览和修改数据,生成动态Web内容。

  • 1.1 HTTP协议

  • HTTP协议(超文本传输协议)是互联网上应用最为广泛的一种网络协议,是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。
    主要特点:

    • 支持客户端/服务器模式
    • 简单快速
    • 灵活
    • 无连接
    • 无状态
  • HTTP协议的通信

  1. 建立TCP连接。因为HTTP协议是更高层的协议,只有低层的协议建立了才能建立更高层的协议
  2. 浏览器向Web服务器发送请求命令
  3. 浏览器发送请求头信息
  4. Web服务器应答
  5. Web服务器发送响应头信息
  6. Web服务器向浏览器发送数据
  7. Web服务器关闭TCP连接
  • HTTP请求报文:请求行、请求头、空行、请求正文

    • 请求行是请求方法、地址、协议版本
    • 请求头包含许多有关的而客户端环境和请求正文的有用信息
    • 请求头和请求正文之间是一个空行,表示请求头已经结束
  • HTTP响应报文:状态行、响应头、空行、响应正文

    • 状态行由状态代码与响应的状态描述,不同的状态代码有不同的含义,以2开头表示请求成功,以3开头表示重定向,以4开头表示客户端错误,以5开头表示服务器端错误
      响应头包括一些响应描述等等
      响应正文表示返回的数据

2、Servlet使用

  • 2.1 Servlet接口
    所有的Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或直接继承自实现了该接口的类。处理方式:当第一次访问Servlet时,服务器会创建Servlet对象,并调用init方法,当第二次访问时,已经存在,不用继续创建了,Servlet类是单例的。
  • 2.2 HttpServlet类
    这个类是继承GenericServlet的基础上进一步的扩展,提供将要被子类化以创建适用于Web站点的HTTP Servlet。一般需要继承这个类并重写doGet与doPost方法。
  • 2.3 Servlet的两种创建方式
    继承HttpServlet并重写doGet与doPost,也是开发中常用的方法
    实现接口Servlet
  • 2.4 Servlet的两种配置方式
    注解式:@WebServlet("/hello")
    web.xml配置
<servlet>
 <! --名称 -->
  <servlet-name>hello2</servlet-name>
  <! --Servlet的全称类名 -->
  <servlet-class>com.qf.web.servlet.HelloServlet</servlet-class>
  <! --启动的优先级,数字越小越先起作用 -->
  <load-on-startup>1</load-on-startup>
 </servlet>
 <! --映射配置 -->
 <servlet-mapping>
 <!--名称 -->
  <servlet-name>hello2</servlet-name>
  <! --资源的匹配规则:精确匹配 -->
  <url-pattern>/hello2</url-pattern>
 </servlet-mapping>
url-pattern的模式:
精确匹配:/具体的名称
后缀匹配:.xxx
通配符匹配:/ 匹配所有请求,所有资源
通配符匹配:/匹配所有请求,不包括jsp页面
  • 2.5 生命周期
    实例化=>初始化=>就绪=>销毁

  • 2.6 获取请求参数
    request.getParameter("name")

  • 2.7 请求方式

    • get请求
      get请求提交的数据会放在url之后,以?分割,参数之间以&相连
      get提交的数据大小有限制,因为浏览器对url的长度有限制
      get方式提交数据,会带来安全问题
      效率高
    • post请求
      将提交的数据放在HTTP包中的body中
      对提交的数据大小没有限制
      提交数据相对安全
      效率额米有get高
  • 2.8 解决中文乱码
    response.setContentType("text/html;charset=UTF-8");
    response.setCharacterEncoding("UTF-8");

二、request和response

1、页面跳转

  • 1.1 重定向
  • 重定向就是通过各种方法将网络请求重新定个方向转到其它位置。其特点是:
    • 客户端行为
    • 浏览器做了至少两次的访问请求
    • 重定向浏览器地址改变
    • 重定向两次跳转之间传输的信息会丢失
    • 重定向可以指向任何资源,包括其他站点的资源
    • 实现重定向:response.sendRedirect(url);
  • 1.2 请求转发
    转发是服务器行为
    转发是浏览器只做了一次访问请求
    转发浏览器地址不变
    转发两次跳转之间传输的信息不会丢失
    转发只能将请求转发给同一个WEB引用中的组件
    实现转发:request.getRequestDispatcher(url).forward(request,response);
  • 1.3 网络路径
    绝对路径:用在不同网站之间的跳转
    相对路径:用在同一个网站中,aaa/1.jpg,仅限静态资源
    根路径:根指定就是主机名,/myweb/login

2、response对象

  • 在servlet中可以使用的内置对象主要有:request、response、application、session等。
  • 我们大部分使用HttpServletResponse对象作为直接操作对象
  • setStatus(int code):设置响应状态码
    setHeader(name,value):设置响应信息头
    setCharacterEncoding(String):设置编码格式
    setContentType(String):设置返回数据mimetype,解决乱码问题:response.setContentType("text/html;charset=UTF-8")
    getOutputStrem():获取字节输出流

3、request对象

  • HttpServletRequest常用API
    getRequestURI
    getParameter(name)
    getParameterValues(String name)
    getParameterMap

4、获取请求数据

  • 可以创建一个JavaBean用于存储和传输数据,然后使用getParameter方法获取到前端传过来的值再使用set方法,不过更为简便的方法是使用Apache BeanUtils进行快速映射。需要三个包:beanutils、logging、commons-collections。
//这个类对BeanUtils进行了二次封装
public class WebUtils {
    public static <E> E populate(Class<E> clazz, HttpServletRequest req){
        E obj = null;
        try {
            obj=clazz.newInstance();
            BeanUtils.populate(obj,req.getParameterMap());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}

三、HTTP协议各版本更新

1、http 0.9
这是最早的http协议版本,功能简单,只能请求与接收数据。
2、http 1.0
引入请求头与响应头,利用请求头和响应头中标识来区分不同类型的数据请求和请求的方式。
3、http 1.1
保持长连接:keep-alive,可以使客户端多个请求共用一个TCP连接
4、http 2.0
使用二进制协议取代文本协议、压缩包头、多路符用、主动推送

四、cookie

  • HTTP协议是无状态的,状态管理常用的解决方案主要有两种:cookie与session,前者是客户端状态管理技术,后者是服务器状态管理技术。
  • cookie是浏览器的存储区域,可以用key-value的形式存储一些值,当浏览器访问web服务器的某个资源时,服务器将数据发送给客户端,那么下一次访问该web服务器时,浏览器会将这个cookie回传给web服务器

1、创建cookie

  • //创建Cookie
    Cookie cookie=new Cookie("code", code);
    ck.setPath("/");//设置Cookie的路径
    ck.setMaxAge(-1);//内存存储,取值有三种:>0有效期,单位秒;=0立即失效;<0内存存储,浏览器关闭失效
    response.addCookie(ck);//让浏览器添加Cookie

2、Cookie的生存时间

  • cookie.setMaxAge(n);
    //n>0,指定生存时间,单位是秒;n=0,立即失效;n<0,存储再内存中,浏览器关闭失效

3、cookie设置路径

  • 通过Cookie的setPath方法可以设置路径,只有与当前路径匹配的cookie浏览器才会发送给服务器。

4、cookie的编码与解码

  • 如果要在cookie中存储中文,就需要进行编码:使用URLEncoder.encode方法:
    Cookie cookie = new Cookie(URLEncoder.encode("姓名", "UTF-8"),
    URLEncoder.encode("小红", "UTF-8"));)

5、cookie的优缺点

  • 优点:
    可以配置到期规则,设置失效时间
    不需要占用服务器资源
    简单性,包含简单的键值对
    数据持久性,cookie通常是客户端上持续时间最长的数据保留形式
  • 缺点:
    大小受到限制
    用户可以禁用cookie
    安全风险,cookie可能被篡改,cookie跨域访问

五、session

  • session用于保持客户端与服务器的连接。session的原理是这样的:如果用户没有禁用cookie,当用户第一次访问服务器时,服务器会返回一个包含sessionid值的cookie给服务器,并将这个值保存在单独的域中,用户再次请求后,服务器会检查是否有对应的sessionid,如果有就使用,否则就新创建一个,如果用户禁用了cookie,就需要使用get方法的URL重写机制或使用POST方法提交隐藏表单的形式来实现。

1、获取session

  • HttpSession session = request.getSession();

2、获取、存储和删除Session中的值

  • 使用HttpSession的setAttrobute(属性名,Object)方法
    获取HttpSession的getAttribute(属性名)
    删除HttpSession的removeAttribute(属性名)

3、Session超时

  • Session默认的有效时间是30分钟。从最后一次访问时开始计算。方法:session.setMaxInterval(n);单位是分钟

相关文章

网友评论

      本文标题:Java - Part 8

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