zoukankan      html  css  js  c++  java
  • Servlet

    request 对象学习:

      作用:request 对象中封存了当前请求的所有请求信息

      使用:

      获取请求头数据

        req.getMethod();//获取请求方式

        req.getRequestURL();//获取请求URL信息

        req.getRequestURI();//获取请求URI信息

        req.getScheme();//获取协议

      获取请求行数据

        req.getHeader("键名");//返回指定请求头信息

        req.getHeaderNames();//返回请求头的键名的枚举集合

      获取用户数据

        req.getParameter("键名");//返回指定的用户数据

        req.getParameterValues("键名");//返回同键不同值的请求数据(多选),返回的数组

        req.getParameterNames()//返回用户所有请求数据的枚举集合

      注意:

        如果获取的请求数据不存在,不会报错,返回 null

      注意:

        request 对象由 tomcat 服务器创建,并作为实参传递给处理请求的 servlet 的 service 方法

    respone 对象学习:

      作用:

        用来响应数据到浏览器的一个对象

      使用:

        设置响应头

          setHeader(String name, String value);//在响应头中添加响应信息,但是同键会覆盖

          addHeader(String name, String value);//在响应头中添加响应信息,同键不会被覆盖

        设置响应状态

          sendError(int num, String msg);//自定义响应状态码

        设置响应实体

          resp.getWriter().write(String str);//响应具体的数据给浏览器

      总结:

        service 请求处理代码流程:

          设置请求编码格式

          设置响应编码格式

          获取请求数据

          处理请求数据

          数据库操作(MVC思想)

          响应处理结果

          直接响应

          请求转发

          重定向

    设置编码格式:

      1、浏览器发送到服务器的数据乱码

        ① get 请求有乱码

          在 tomcat/conf/server.xml 中 Connector 标签添加一个属性:URIEncoding = "utf-8"

        ② post 请求有乱码

          在获取请求参数之前,设置:request.setChatacterEncoding("utf-8"); 可以保证获取请求实体中的数据没有乱码

      2、服务器返回给浏览器的数据有乱码

        在打开流之前,设置:response.setContentType("text/html; charset=utf-8");可以保证返回给浏览器的数据没有乱码

    Servlet 的生命周期:

      1、从第一次调用到服务器关闭

      2、如果 Servlet 在 web.xml 中配置了 load-on-startup,生命周期为从服务器启动到服务器关闭

      注意:

        init 方法是对 Servlet 进行初始化的一个方法,会在 Servlet 第一次加载进行存储时执行

        destory 方法是在 Servlet 被销毁时执行,也就是服务器关闭时

      service 方法和 doGet 方法和 doPost 方法的区别

        service 方法:

        可以处理 get/post 方式的请求,如果 servlet 中有 service 方法,会优先调用 service 方法对请求进行处理

        doGet 方法:

          处理 get 方式请求

        doPost 方法:

          处理 post 方式请求

      注意:

      如果在覆写的 service 方法中调用了父类的 service 方法(super.service(arg0, arg1)),则 service 方法处理完后,会再次根据请求方式响应的 doGet 和 doPost 方法执行。所以,一般情况下我们是不再覆写的 service 中调用父类的 service 方法的,避免出现405错误。

      Servlet 的常见错误:

        404错误:资源未找到

          原因一:在请求地址中的 servlet 的别名书写错误

          原因二:虚拟项目名称拼写错误

        500错误:内部服务器错误

          原因一:java.lang.ClassNotFoundException: com.bjsxt.servlet.ServletMothod

          解决:在 web.xml 中校验 servlet 类的权限定路径是否拼写错误

          原因二:因为 service 方法体的代码执行错误导致

          解决:根据错误提示对 service 方法体中的代码进行错误更改

        405错误:请求方式不支持

          原因:请求方式和 servlet 中的方法不匹配所造成

          解决:尽量使用 service 方法进行请求处理,并且不要在 service 方法中调用父类的 service

    Cookie 学习:

      作用:解决了发送的不同请求的数据共享问题

      使用:Cookie 的创建和存储

      //创建 Cookie 对象

      Cookie c = new Cookie(String name, String value);

      //设置 Cookie(可选)

      //设置有效期

      c.setMaxAge(int seconds);

      //设置有效路径

      c.setPath(String uri);

      //响应 Cookie 信息给客户端

      resp.addCookie(c);

      Cookie 的获取

      //获取 Cookit 信息数组

      Cookie[] cks = req.getCookie();

      //遍历数组获取 Cookie 信息

      使用 for 循环遍历即可,实例:

      if(cks != null) {

        for(Cookie c : cks) {

          String name = c.getName();

          String value = c.getValue();

          System.out.println(name+":"+value);

        }

      }

    注意:

      一个 Cookie 对象存储一条数据。多条数据,可以多创建几个 Cookie 对象进行存储

    特点:

      浏览器端的数据存储技术

      存储的数据声明在服务器端

      临时存储:存储在浏览器的运行内存中,浏览器关闭即失效

      定时存储:设置 Cookie 的有效期,存储在客户端的硬盘中,在有效期内符合路径要求的请求都会附带该信息

      默认 Cookie 信息存储好之后,每次都会附带,除非设置有效路径

    session 技术学习:

    问题:

      一个用户的不同请求处理的数据共享怎么办?

    解决:

      使用 session 技术

    原理:

      用户第一次访问服务器,服务器会创建一个 session 对象给此用户,并将该 session 对象的 JSESSIONID 使用 Cookie 技术存储到浏览器中,保证用户的其它请求能够获取到同一个 session 对象,也保证了不同请求能够获取到共享数据。

    特点:

      存储在服务器端

      服务器进行创建

      依赖 Cookie 技术

      一次会话

      默认存储时间30分钟

    作用:

      解决了一个用户不同请求处理的数据共享问题

    使用:

      创建 session 对象/获取 session 对象

      HttpSession hs = req.getSession();

      如果请求中拥有 session 的标识符也就是 JSESSIONID,则返回其对应的 session 对象

      如果请求中没有 session 的标识符也就是 JSESSIONID,则创建新的 session 对象,并将其 JSESSIONID 作为从 cookie 数据存储到浏览器内存中

      如果 session 是失效了,也会重新创建一个 session 对象,并将其 JSESSIONID 存储在浏览器内存中

      设置 session 存储时间

        hs.setMaxInactiveInterval(int seconds);

    注意:

      在指定的时间内 session 对象没有被使用则销毁,如果使用了则重新计时

      设置 session 强制失效

        hs.invalidate();

    存储和获取数据:

      存储:hs.setAttribute(String name, Object value);

      获取:hs.getAttribute(String name);//返回的数据类型为 Object

    注意:

      存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行

    使用时机:

      一般用户在登录 web 项目时会将用户的个人信息存储在 Session 中,供该用户的其它请求使用

    总结:

      session 解决了一个用户的不同请求的数据共享问题,只要在 JSESSIONID 不失效和 session 对象不失效的情况下。用户的任意请求在处理时都能获取到同一个 session 对象

    作用域:

      一次会话

      在 JSESSIONID 和 session 对象不失效的情况下为整个项目内

    session 失效处理:

      将用户请求中的 JSESSIONID 和后台获取到的 session 对象的 JSESSIONID 进行比对,如果一致则 session 没有失效,如果不一致则证明 session 失效了。重定向到登录页面,让用户重新登陆

    注意:

      JSESSIONID 存储在 Cookie 的临时存储空间中,浏览器关闭即失效

    ServletContext 对象学习:

    问题:

      不同用户使用相同的数据

    解决:

      ServletContext 对象

    特点:

      服务器创建

      用户共享

    作用域:

      整个项目内

    生命周期:

      服务器启动到服务器关闭

    使用:

      获取 ServletContext 对象

      //第一种方式

      ServletContext sc = this.getServletContext();

      //第二种方式

      ServletContext sc2 = this.getServletConfig().getServletContext();

      //第三种方式

      ServletContext sc3 = req.getSession().getServletContext();

      使用 ServletContext 对象完成数据共享

      //数据存数

      sc.setAttribute(String name, Object value);

      //获取数据

      sc.getAttribute("str") 返回的是 Object 类型

    注意:

      不同的用户可以给 ServletContext 对象进行数据的存取

      获取的数据不存在返回null

      获取项目中 web.xml 文件中的全局配置数据

      sc.getInitParameter(String name); 根据键的名字返回 web.xml 中配置的全局数据的值,返回 String 类型。如果不存在返回null

      sc.getInitParameterNames(); 返回键名的枚举

      配置方式:注意一组 <context-param> 标签只能存储一组键值对数据,多组可以声明多个 <context-param> 进行存储

      <context-param>

        <param-name>name</param-name>

        <param-value>zhangsan</param-value>

      </context-param>

    作用:将静态数据和代码进行解耦

      获取项目 webroot 下的资源的绝对路径

      String path = sc.getRealPath(String path);

      获取的路径为项目根目录,path 参数为项目根目录中的路径

      获取 webroot 下的资源的流对象

      InputStream is = sc.getResourceAsStream(String path);

    注意:

      此种方式只能获取项目根目录下的资源流对象,class 文件的流对象需要使用类加载器获取

      path 参数为项目根目录中的路径

    ServletConfig 对象学习:

    问题:

      如何获取在 web.xml 中给每个 servlet 单独配置的数据呢?

    解决:

      使用 ServletConfig 对象

    使用:

      获取 ServletConfig 对象

      ServletConfig sc = this.getServletConfig();

      获取 web.xml 中的配置数据

      示例:

        String code = sc.getInitParameter("config");

    Jsp 的学习:

      Jsp 的三种注释

        前端语言注释:

        会被转译,也会被发送,但是不会被浏览器执行 <!-- --> (html) // /** */ (javascript)

      java 语言注释:

        会被转译,但是不会被 servlet 执行 // /** */

      Jsp 注释:

        不会被转译 <%-- --%>

    Jsp 的 page 指令的学习

      <%@page 属性名 = "属性值" 属性名 = "属性值" ... %>

      language:声明 jsp 要被转译的语言

      import:声明转译的 java 文件要导入的包,不同的包使用逗号隔开

      pageEncoding:设置 jsp 文件的数据编码格式

      contentType = "text/html; charset = utf-8":设置 jsp 数据响应给浏览器时,浏览器的解析和编码格式

      session:设置转译的 servlet 中是否开启 session 支持,默认开启,true 表示开启,false 表示关闭

      errorPage:设置 jsp 运行错误跳转的页面

      extends:设置 jsp 转译的 java 文件要继承的父类(包名+类名)

    作用:

      配置 jsp 文件的转译相关的参数

    Jsp 的局部代码块:

      特点:

        局部代码块中声明的 java 代码会原样转译到 jsp 对应的 servlet 文件的 _JspService 方法中

        代码块中声明的变量都是局部变量

      使用:

        <% java 代码 %>

      缺点:

        使用局部代码块在 jsp 中进行逻辑判断,书写麻烦,阅读困难

      开发:

        servlet 进行请求逻辑处理,使用 jsp 进行页面展现

    Jsp 的全局代码块:

      特点:

        声明的 java 代码作为全局代码转译到对应的 servlet 类中

      使用:

        <%! 全局代码 %>

      注意:

        全局代码块声明的代码,需要使用局部代码块调用

    Jsp 的脚本段语句:

      特点:

        帮助我们快速的获取变量或者方法的返回值作为数据响应给浏览器

      使用:

        <%= 变量名或者方法 %>

      注意:

        不要在变量名或者方法后使用分号

      位置:

        除 jsp 语法要求以外的任意位置

    Jsp 的静态引入和动态引入:

      静态引入:

        <%@include file = "要引入的 jsp 文件的相对路径" %>

      特点:

        静态引入的 jsp 文件和当前 jsp 文件转译成一个 java(Servlet) 文件使用。在网页中也就显示了合并后的显示效果

      注意:

        静态引入的 jsp 文件不会单独转译成 java(Servlet) 文件

        当前文件和静态引入的 jsp 文件中不能够使用 java 代码块声明同名变量

      动态引入:

        <jsp:include page = "要引入的 jsp 文件的相对路径"></jsp:include>

      特点:

        会将引入的 jsp 文件单独转译,在当前文件转译好的 java 文件中调用引入的 jsp 文件的转译文件。在网页中显示合并后的显示效果

      注意:

        动态引入允许文件中声明同名变量

      优点:

        降低 jsp 代码的冗余,便于维护升级

    Jsp 的转发标签 forward:

      使用:

        <jsp:forward page = "要转发的 jsp 文件的相对路径"></jsp:forward>

      特点:

        一次请求

        地址栏信息不改变

      注意:

        在转发标签的两个标签中间除了写 <jsp:param name = "str" value = "aaa" /> 子标签不会报错,其他任意字符都会报错

        <jsp:param name = "str" value = "aaa" />

        name 属性为附带的数据的键名

        value 属性为附带的数据内容

      注意:会将数据以 ?的形式拼接在转发路径的后面

    Jsp 的九大内置对象:

      内置对象:

        Jsp 文件在转译成其对应的 Servlet 文件的时候自动生成的并声明的对象。我们在 jsp 页面中直接使用即可

      注意:

        内置对象在 jsp 页面中使用,使用局部代码块或者脚本段语句来使用。不能够在全局代码块中使用

      内容:九个对象

        pageContext:页面上下文对象,封存了其他内置对象。封存了当前 jsp 的运行信息

        注意:每个 Jsp 文件单独拥有一个 pageContext 对象

        作用域:当前页面

        request:封存当前请求数据的对象。由 tomcat 服务器创建。一次请求

        session:此对象用来存储用户的不同请求的共享数据的。一次会话

        application:也就是 ServletContext 对象,一个项目只用一个。存储用户共享数据的对象,以及完成其他操作。项目内

        response:响应对象,用来响应请求处理结果给浏览器的对象。设置响应头,重定向

        out:响应对象,Jsp 内部使用。带有缓冲区的响应对象,效率高于 response 对象

        page:代表当前 Jsp 的对象。相当于 java 中的 this

        exception:异常对象。存储了当前运行的异常信息

      注意:使用此对象需要在 page 指定中使用属性 isErrorPage = "true" 开启

        config:也就是 ServletConfig,主要是用来获取 web.xml 中配置数据,完成一些初始化数据的读取

    四个作用域对象:

      pageContext:当前页面,解决了当前页面内的数据共享问题。获取其他内置内置对象

      request:一次请求。一次请求的 servlet 的数据共享。通过请求转发,将数据流转给下一个 servlet

      session:一次会话。一个用户的不同请求的数据共享。将数据从一次请求流转给其他请求

      application:项目内。不同用户的数据共享问题。将数据从一个用户流转给其他用户

    作用:

      流转数据

    Jsp 的路径:

      在 jsp 中资源路径可以使用相对路径完成跳转,但是:

      问题一:资源的位置不可随意更改

      问题二:需要使用 ../ 进行文件夹的跳出。使用比较麻烦

      使用绝对路径:(必须会)

      /虚拟项目名/项目资源路径

      例如:

        <a href = "/jsp/jspPro.jsp">jspPro.jsp</a>

        <a href = "/jsp/a/a.jsp">a.jsp</a>

      注意:在 jsp 中资源的第一个 / 表示的是服务器根目录,相当于:localhost:8080

      使用 jsp 中自带的全局路径声明:

      <%

        String path = request.getContextPath();

        String basePath = request.getScheme()+"//"+request.getServerName()+":"+request.getServerPort()+path+"/";

      %>

      <base href = "<%=basePath%>">

      作用:

        给资源前面添加项目路径:http://127.0.0.1:8080/虚拟项目名/上

    Ajax 学习:

      1、ajax 的概念

        局部刷新技术。不是一门新技术,是多种技术的组合。是浏览器端的技术

      2、ajax 的作用

        实现在当前结果页中显示其他请求的响应内容

    3、ajax 的使用

      ajax 的基本流程

      // 创建 ajax 引擎对象

      // 复写 onreadystatechange 函数

      // 判断 ajax 状态码

      // 判断响应状态码

      // 获取响应内容(响应内容的格式)

      // 普通字符串:responeText

      // json(重点):responseText

      其实就是讲述数据按照 json 的格式拼接好的字符串,方便使用 eval 方法

      将接受的字符串数据直接转换为 js 的对象

      json 格式:

        var 对象名 = {

          属性名:属性值,

          属性名:属性值,

          .....

        }

      // XML 数据:responseXML.返回document 对象

      通过 document 对象将数据从 xml 中获取出来

      // 处理响应内容(js 操作文档结构)

      // 发送请求

      // get 请求

      get 的请求实体拼接在 URL 后面,? 隔开,键值对

      ajax.open("get", "url");

      ajax.send(null);

      // post 请求

      有单独的请求实体

      ajax.open("post", "url");

      ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

      ajax.send("name=张三&psw=123");

      ajax 的状态码

      ajax 状态码:

      readyState: 0,1,2,3,4

    4:表示响应内容被成功接收

      响应状态码:

      status

      200:表示一切OK

      404:资源未找到

      500:内部服务器错误

      ajax 的异步和同步

      ajax.open(method, url, async)

      async:设置同步代码执行还是异步代码执行

      true 代表异步,默认是异步

      false 代表同步

  • 相关阅读:
    简单爬取腾讯新闻内容方法封装
    Python正则表达式函数
    Escape(反思与总结)
    springboot中使用mybatis
    解决 java.lang.UnsatisfiedLinkError:no ** in java.library.path in java.library.path 的异常
    解决 fatal error: jni_md.h: No such file or directory #include “jni_md.h”
    Git troubleshooting
    Java8 新特性2——强大的Stream API
    Java8 新特性1—— Lambda表达式、内置函数式接口、方法引用与构造器引用
    搭建Linux(Ubuntu)系统下的Differential Datalog运行环境
  • 原文地址:https://www.cnblogs.com/maigy/p/10923609.html
Copyright © 2011-2022 走看看