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

原文地址:https://www.cnblogs.com/maigy/p/10923609.html