zoukankan      html  css  js  c++  java
  • servlet.txt笔记


    javase jdbc ==》java访问数据库
    html ==》浏览器显示内容,无法把数据提交给后台?==》动态网页技术(servlet)解决前台、后台交互问题
    动态网页技术:servlet jsp php asp
    静态网页技术 --html,xml,css,js

    servlet:接受客户端请求,处理完数据,响应客户端数据 基于请求和响应的服务程序(动态网页技术) 静态网页技术 --html,xml

    servlet:它只是一个接口,接口只定义规范(请求、响应) ,如何实现接受请求 和 响应客户端 ,并没有提出具体技术。
    GenericServlet:定义一般的、与协议无关的 servlet 是抽象类 主要给子类继承
    HttpServlet:基于http 协议 实现servlet接口 也是抽象类
    基于ftp协议实现servlet接口 (ftpServlet)

    --要想实现 客服端 请求 ,服务端响应 这样的功能,后来使用http协议,实现上面的要求
    目前只有HttpServlet 实现servlet接口,所以 我们写的任何Servlet 都是要继承HttpServlet 。


    Servlet:
    init 初始化方法
    getServletConfig:获得servlet配置信息
    service:服务(接受请求 并响应)
    getServletInfo:获得servlet 相关信息
    destroy:摧毁 ,主要是释放内存空间


    httpServlet:
    service:调用 doget dopost dodelete dooptions。。。。

    ***我们写的Servlet 只要继承HttpServlet 实现 doget dopost

    如何访问servlet:

    web.xml: 在web.xml中注册servlet 并提供客户端访问路径
    <servlet>
    <servlet-name>TwoServlet</servlet-name>
    <servlet-class>cn.gem.servlet.TwoServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>TwoServlet</servlet-name>
    <url-pattern>/TwoServlet</url-pattern>
    </servlet-mapping>

    TwoServlet twoServlet=Class.forName("cn.gem.servlet.TwoServlet").newInstance();
    客户端 访问/TwoServlet路径 找到一个名字叫 twoServlet,这个对象就是 Class.forName("cn.gem.servlet.TwoServlet").newInstance(),
    然后 调用这个 对象的 doget 或者 dopost 方法。(至于调用doget 还是 dopost 依赖于 访问的方式)


    访问路径:

    http://localhost:8080/ 是访问到E:509apache-tomcat-6.0.44webapps这个目录 默认访问root 下面的index.html

    精确匹配:/ServletTwo

    模糊匹配:*
    * 表示通配符 能够代表一个字符或者多个字符
    /* 表示后面随便 都可以

    *.do 前面随便 后面一定.do

    /*.do 不符合逻辑

    精确匹配>模糊匹配(/* > *.do )

    *****建议采用精确匹配


    生命周期:
    第一次请求该servelt 创建servlet 对象,并且调用init方法,且只调用一次

    后面每次访问 调用get 或post方法,直到服务器关闭,该servet 摧毁,并且调用destory方法。

    第一次访问 -- -- 关闭服务器

    servlet 创建 :一定要有无参的构造函数 由tomcat服务器创建一次 单例模式


    传值:web.xml传递参数

    ServletConfig:serlvet配置信心都在 ServletConfig 中

    <servlet>
    <servlet-name>EightServlet</servlet-name>
    <servlet-class>cn.gem.servlet.EightServlet</servlet-class>
    <init-param>
    <param-name>name</param-name>
    <param-value>关羽</param-value>
    </init-param>
    <init-param>
    <param-name>age</param-name>
    <param-value>20</param-value>
    </init-param>
    </servlet>

    context:一般指上下文环境

    ServletContext:指的是整个web项目的上下文环境 ,表示的就是整个web.xml
    getInitParameterNames getInitParameter

    ServletConfig,ServletContext 可以直接从this(Servlet)中获得这两个对象


    init(),init(ServletConfig config):在GenericServlet中,init(ServletConfig config) 里面调用init(),所以覆盖的是init(),而不是init(ServletConfig config)


    提交数据: 客户端提交请求数据 给服务端 (Servlet)

    request:请求 凡是客户端提交请求数据 全部在request对象中
    getParameter 获得请求参数的值
    http://localhost:8080/Servlet/FormServlet?sname=fasdfas&passwd=fasdfasdfasdf -- 质询参数


    get: url提交方式(头提交方式 head) 速度快 <4k 地址变化(不安全)

    http://localhost:8080/Servlet/FormServlet?sname=sdfas&passwd=sdfs123123123123dfd 其实就是form表单get提交方式
    使用<a>也能够访问servlet 这个和 在浏览器 地址访问 一个效果 相当于 form表单get提交方式

    post:体提交方式(body) 速度慢点 没有上限(具体看浏览器支持) 地址不变(安全些)


    响应:

    response:凡是服务端给 客户端 的数据 都在这里
    服务端 对 客户端响应 需要 建立 通道 Writer w=response.getWriter();

    乱码:

    请求乱码:
    get:

    1.修改tomcat中server.xml
    URIEncoding="UTF-8" 服务器采用utf-8的字符集编码 来进行 解码和编码
    默认的编码格式 是 ISO-8859-1

    2.new String(sname.getBytes("ISO-8859-1"),"UTF-8")
    浏览器以utf-8编码发送数据 ,服务器默认以ISO-8859-1解码,发送数据给servlet,servlet中需要再以ISO-8859-1格式 获得字节,然后 按照utf-8的字符集 解码

    post: request.setCharacterEncoding("UTF-8");
    设置请求数据以utf-8方式 编码 解码,这种方式只对 体提交方式有效


    响应乱码:

    response.setCharacterEncoding("UTF-8"); 只是说明服务器 对客户端 响应数据 是以UTF-8 方式,响应,但是 浏览器以何种方式 阅读数据 不受控制!!

    response.setContentType("text/html;charset=UTF-8"); 以UTF-8 方式 响应数据,并提醒浏览器 以这种方式 阅读

    response.setContentType("text/html;charset=UTF-8") 可以完全替代 response.setCharacterEncoding("UTF-8")

    跳转: 跳转资源

    1.服务端:request.getRequestDispatcher("/one.html").forward(request, response); 通过请求分发器 跳转到指定页面
    url地址不变(依然是之前请求服务器的地址) 只访问一次 服务器(页面跳转只是服务器内部在跳,对客户端透明)


    2.客户端:response.sendRedirect() 重定向
    url地址变化 ,跳转页面的地址 访问2次服务器 (把地址发送到客户端浏览器上,并迫使客户端浏览器再次访问服务器)


    //response.sendRedirect("/Servlet/one.html"); 地址要带上项目名称
    //request.getRequestDispatcher("/one.html").forward(request, response); 地址不需要项目名称

    上述的跳转 ,底层依然是Writer w=response.getWriter(); w.write("<!DOCTYPE html><html><head>" 只不过这样的代码 交给tomcat编写了

    如果要想传递动态数据 ,那么跳转html 不可以(html只是静态语言,无法java语言)-- jsp


    servlet与servlet:
    数据共享:3种范围
    1.request:一次请求的范围 ,过了这次请求所有数据失效
    2.session:(session 范围)回话范围 :当前浏览器范围,只要不关闭浏览器 数据一直存在
    3.servletContext:整个应用范围 (服务器范围) 只要服务器不关闭,数据一致存在

    原则:能在request 就不要 放session 能在session 就不要在 servletContext

    过滤器(Filter):对请求进行预先的处理、筛选

    FilterConfig:过滤器的配置信息都在 这里 ,和 servletCOnfig

    生命周期:服务器启动时 创建(单例)并且调用 init方法,服务器关闭的时候 销毁对象 服务器开始 到 结束
    FilterChain:过滤链(多个过滤器)
    chain.doFilter(request, response); 把请求释放到下一个过滤器 ,如果没有过滤器 访问目标资源


    TenServlet.TenServlet()
    MyFilter2.doFilter()
    MyFilter.doFilter()
    TenServlet.doGet()

    TenServlet.TenServlet()
    MyFilter.doFilter()
    MyFilter2.doFilter()
    TenServlet.doGet()


    filter:先后顺序 决定过滤器创建的顺序 谁在下面谁先创建
    filter-mapping:****先后顺序 决定过滤过滤请求的顺序 谁放在上面 谁先执行

    使用:
    1.统一字符集编码

    2.登陆验证 : 当有一个请求过来,如果已经登陆 ,直接访问首页,如果没有登陆,不能访问你首页,先登录
    用户名 密码 ok 到首页 ,如果不ok 继续登录, 已经登陆 到首页


    监听器 8种:

    ServletRequestListener 监听请求的创建 和 销毁
    HttpSessionListener 监听回话的创建 和 销毁
    ServletContextListener:监听整个web应用的创建 和 销毁


    ServletRequestAttributeListener
    HttpSessionAttributeListener
    ServletContextAttributeListener


    HttpSessionActivationListener:会话激活 钝化监听器
    HttpSessionBindingListener:会话值绑定监听器


    用途:统计在线人数 ,访问量

    作业:servlet +jdbc 完成员工管理系统

    MVC:
    m:model dao vo(pojo) service
    v:view html jsp。。
    c:control 接受前台请求 并做出响应 servlet

    ---------------------------------javaweb------------------------------------------------

    开发工具:
    eclipse:版本非常多,很多不是很兼容
    如果项目要求很高,使用特别技术,可能只能使用eclipse。


    myeclipse:早期只是eclipse的一个插件,以前myeclipse必须安装在eclipse的解压目录下,现在因为
    myeclipse使用非常广泛,现在基本上直接安装就可以,8.5 10。 收费的
    javaweb开发项目要求及技术不是非常特殊,通常myeclipse就可以满足要求!
    myeclipse开发web项目 比较简答。

    收费的:
    jbuilder:
    netbean:
    ***功能比eclipse强大的多,但是因为收费,所以公司使用较少!

    javaweb项目:
    eclipse:dynamic web project
    myeclipse: java web
    netbean
    jbuild

    webContent(webRoot)
    WEB-INF lib web.xml ---web项目必备要素(目录结构、名称都不能变)


    服务器:
    运行--服务器 tomcat jboss weblogic 。。。

    tomcat (免费): 简单web应用服务器

    重量级服务器(收费):都是实现了javaee规范(EJB规范,EJB服务器) 入侵性 spring(不支持分布式处理) 服务器架构 EJB:算是java体系中比较高深技术。
    jboss:
    weblogic :

    ****开发使用tomcat ,发布项目时 可能会使用jboss weblogic等服务器
    如果你的项目对安全性,并发性要求不高 可能依然会使用tomcat(快一点,免费)

    tomcat:
    tomcat 6 , tomcat 7
    解压版 :早期都是解压
    安装版:安装后的目录结构 和 解压后的目录结构一样的

    bin:存放tomcat 的相关命令
    conf:存放一些配置文件
    lib:tomcat 的使用到的jar包
    logs:日志
    temp:tomcat 运行时生成的临时文件目录
    webapps:存放web 项目 (发布项目地址)
    work:真正tomcat运营时 使用的工作目录


    tomcat 启动:会自动读取conf 文件下面的配置文件 和 webapps下面的项目,以及各个项目下面web.xml


    --------------------------------------------------------------------------------------------------------------


    tcp/ip: 安全协议 几乎所有协议 都是基于tcp/ip协议基础之上
    tcp:三次握手 保证数据能够到达 一旦建立连接 ,不主动断开, 连接一直存在 长连接协议 数据库连接就是tcp协议

    ****基于互联网访问量 特别巨大,所以希望能够 实现 客户端访问服务端后,数据交互后 连接自动断开?

    http:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
    https:依然是http协议 只是多了数字安全认证 比较安全协议
    http协议 是个短连接协议 数据交互完 立即断开 基于tcp、ip协议 http封装了tcp、ip协议 是一个应用层协议

    ****http协议 封装了tcp/ip协议,但是能够自动断开 短连接协议


    HTTP协议的主要特点可概括如下:
    1.支持客户/服务器模式。 c/s(client,server) => b/s(浏览器(browser ),服务器 server) b/s是c/s的升级

    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
    ***访问路径 ,提交方式(get post)

    由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

    3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。


    4.无连接(短连接):无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。---短连接协议

    5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,
    则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
    ***服务器不记得你是曾经来过的那个请求!!


    URI:路径

    URL (Uniform Resource Locator,统一全球资源定位符): 通俗说法 就是互联网网址
    http://host[":"port][abs_path]
    http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;
    abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

    http:192.168.0.116:8080/index.jsp
    https://www.baidu.com
    ***http协议称之为 基于请求、响应的协议
    请求:http请求由三部分组成,分别是:请求行、消息报头、请求正文

    请求方法(所有方法全为大写)有多种,各个方法的解释如下:
    GET 请求获取Request-URI所标识的资源
    POST 在Request-URI所标识的资源后附加新的数据
    HEAD 请求获取由Request-URI所标识的资源的响应消息报头
    PUT 请求服务器存储一个资源,并用Request-URI作为其标识
    DELETE 请求服务器删除Request-URI所标识的资源
    TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT 保留将来使用
    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
    ******在html4之前浏览器 只支持 get post 提交方式


    响应:在接收和解释请求消息后,服务器返回一个HTTP响应消息。
    HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
    1xx:指示信息--表示请求已接收,继续处理
    2xx:成功--表示请求已被成功接收、理解、接受
    3xx:重定向--要完成请求必须进行更进一步的操作

    4xx:客户端错误--请求有语法错误或请求无法实现 404
    5xx:服务器端错误--服务器未能实现合法的请求


    常见状态代码、状态描述、说明:
    200 OK //客户端请求成功
    400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden //服务器收到请求,但是拒绝提供服务
    404 Not Found //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    eg:HTTP/1.1 200 OK (CRLF)

  • 相关阅读:
    mysql8.0.20安装
    MySQL EXPLAIN结果集分析
    初次安装aliSql
    升级vim到8.0
    REPL环境对语言的帮助
    Python环境搭建及pip的使用
    mysql数据库分库分表(Sharding)
    Git的使用
    Promise的初步认识
    对引用的文件起别名
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/6086305.html
Copyright © 2011-2022 走看看