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 代表同步

  • 相关阅读:
    [转]对Lucene PhraseQuery的slop的理解
    Best jQuery Plugins of 2010
    15 jQuery Plugins To Create A User Friendly Tooltip
    Lucene:基于Java的全文检索引擎简介
    9 Powerful jQuery File Upload Plugins
    Coding Best Practices Using DateTime in the .NET Framework
    Best Image Croppers ready to use for web developers
    28 jQuery Zoom Plugins Creating Stunning Image Effect
    VS2005 + VSS2005 实现团队开发、源代码管理、版本控制(转)
    禁止状态栏显示超链
  • 原文地址:https://www.cnblogs.com/maigy/p/10923609.html
Copyright © 2011-2022 走看看