JavaWeb笔记-2

JavaWeb基础笔记

JSP内置对象

out对象

  • 说明
    out对象主要是向浏览器输出数据,也可以通过out对象对缓冲区操作

  • 常用方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public abstract void print(),显示各种类型的数据,该方法需要一个参数。
    public abstract void println(),分行显示各种类型的数据
    public abstract void close(),关闭输出流
    public abstract void clear(),清空缓冲区的内容,不将数据发送至客户端
    public abstract void clearBuffer(),清空缓冲区的内容,并将缓冲区中的数据发送至客户端
    public int getBufferSize(),获取缓冲区的大小
    public int getRemaining(),返回缓冲区剩余空间的大小
    public abstract void flush(),输出缓冲区的数据
    public boolean isAutoFlush(),获取AutoFlush布尔类型的值

request对象

  • 说明
    request对象是从客户端向服务器端发出请求,包括用户提交的信息以及客户端的一些信息

  • 常用方法

    1
    2
    3
    4
    5
    6
    String getParameter(String name),获取客户端的参数值,并以字符串形式返回指定参数值,如果参数不存在则返回空值
    String[] getParameterValues(String name),获取单个参数的所有值,主要用于获取复选框的值
    void setCharacterEncoding(String encoding),设置字符串编码格式,用来解决中文乱码问题

    String getHeader(String name),获取name的头
    long getDateHeader(String name),获取日期类型的name标头

response对象

  • 说明
    response对象与request对象相对应,用于服务器端封装JSP处理请求后产生的结果,并将其结果响应给客户端

  • 主要方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void addDateHeader(String name,long date),新增long类型,名称为name的标头
    void addHeader(String name,String value),新增String类型,名称为name的标头
    void setIntHeader(String name,String value),常用于设置页面的自动刷新时间间隔
    void setHeader(String name,String value),常用于设置页面的自动刷新时间间隔与设置浏览器有无缓冲
    void addCookie(Cookie cookie),在响应中增加一个指定的cookie。可通过多次调用该方法来定义多个cookie
    String encodeURL(String url),当需要在会话中存数数据而浏览器不支持cookie时,使用该方法会将回话ID附加到URL后

    void sendRedirect(String url),将页面重定向到指定的URL地址上
    void sendRedirectURL(String url),对指定的页面地址进行编码

    void setContentType(String contentType),动态指定数据内容的类型及字符编码方式
    void setContentTypeLength(int contentLength),设置数据内容的长度

    void sendError(int sc),传送状态码
    void setStatus(int sc),设置状态码,408/409表示网站忙,200表示响应成功,404找不到页面,500内部服务器错误
  • 注意
    使用response对象的sendRedict(url)方法实现浏览器重定向功能与行为元素<jsp:forward>直接在服务端重定向不同,该方法需要先返回浏览器,然后由浏览器发送重定向的URL请求

session对象

  • 说明
    session 用于在回话范围内,记录每个客户端的访问状态,在会话中存储的信息,在浏览器发出后续请求时可以获取这些回话的有效数据

session对象可以保存用户的登录信息,实现购物车功能等。

  • session工作原理

    • 客户端首次访问服务器的一个页面时,服务器就会为该客户分配一个session对象
      并为session对象指定唯一ID,将该ID发送到客户端写入到Cookie中,让客户端与服务器端的session建议一一对应关系
    • 当客户继续访问服务器上的其他资源时,服务器不再为该客户分配新的session对象,直到浏览器关闭、链接超时等
    • 当用户重打开浏览器访问服务器网站时,服务器会重新为客户分一个session对象,并重新分配sessionID
  • 常用方法

    1
    2
    3
    4
    5
    6
    7
    public void setAttibute(String name,Object value),指定名字属性的值,并将它添加到session会话范围内
    public Object getAttribute(String value),在会话范围内获取指定名字的属性的值
    public void removeAttribute(String name),删除指定名字的session属性
    public void invalidate(),使session会话失效
    public String getId(),获取当前会话的ID
    public void setMaxInactiveInterval(int interval),设置会话的最大持续时间,单位是秒,负数表示会话在当前浏览器永远不会失效,0表示立即删除该Cookie
    public void getMaxInactiveInterval(int interval),获取会话的最大持续时间

Cookie对象

  • 说明
    Cookie对象通常用于在浏览器端保存会话过程中的一些参数,如用户名和ID等。Cookie对象不属于JSP内置对象

  • 作用

    • 可以让站点跟踪特定访问者访问的次数,最后访问的时间以及访问者进入站点的路径
    • 帮助站点统计用户个人资料
    • 在同一站点内可使用户实现自动登录功能
  • 写入Cookie的主要步骤

    • 创建Cookie对象 Cookie cookie = new Cookie();
    • 设定Cookie的属性 cookie.setMacAge(30);
    • 调用response.addCookie(Cookie cookie) 方法将Cookie写入到客户端 response.addCookie(cookie)

session对象和Cookie对象的关系

session对象能和客户建立联系依赖于客户端的浏览器是否支持Cookie,如果不支持,那么客户在不同页面之间的session可能是互不相关的

  • 二者的不同之处

    • 存放地点:Cookie存放在客户端的硬盘中,属于离线存放;而session存放在服务器的内存中
    • 存货时间:Cookie可以长期存放在客户端,具体的存活时间由setMaxAge()方法做指定的参数决定;而session岁用户访问服务器而产生,服务器超时或下线而消失
    • 安全性:Cookie存放在客户端,安全性较差;session存放在服务器端,安全性较高。
  • 二者的联系

    • 不论是Cookie还是session内置对象,都需要浏览器支持Coookie并且没有禁用Cookie

application对象

  • 说明
    负责提供某个应用在服务器运行时的一些全局信息,它在服务器启动时创建,直到服务器关闭时消失

  • 工作原理

    • application对象和session对象不同,application对象实在服务器启动后产生的,当用户浏览所访问的王长的各个页面,这个application都是同一个,直到浏览器关闭,这个application对象才被取消。所有的客户的application对象都是同一个,即左右对象共享这个内置的application,而session对象是因不同的客户对象也不同。
  • 常用方法(作用和session的相似)
    1
    2
    3
    public void setAttibute(String name,Object value)
    public Object getAttribute(String value)
    public void removeAttribute(String name)

pageContext对象

  • 说明
    JSP利用上下文对象pageContext可以获取页面的所有相关属性

config对象

  • 说明
    主要用于获取服务器的配置信息。

page对象

对应servlet类的实现对象,相当于this,实际上指的就是JSP本身。由于page对象占用内存很大,所以不建议使用page对象

exception对象

JSP文件运行所产生的错误和异常,只有在包含<%@ page isErrorPage=”true”%>的页面才可以使用。

数据库

JDBC驱动程序的4种类型如下:

  • JDBC-ODBC桥,同通过ODBC数据源与数据库进行连接
    不过Sun强烈建议JDBC-ODBC桥接器最好用来测试,不建议在Web应用程序中使用
  • 通过网络库进行连接的纯Java驱动程序
    此种类型少了ODBC这一层,应用程序直接与网络库连接,减少了中间驱动程序层。
  • 通过中间件服务器与数据库建立链接的驱动程序
    这种驱动程序不用安装网络库,比且驱动程序安装在中间件服务器上,而不是客户机上。
  • 直接与数据库连接的纯Java JDBC驱动程序
    完全使用Java实现,不需要其他的驱动程序,也不需要安装其他的网络库

JDBC访问数据库的基本步骤

  • 装载驱动程序
    使用MySQL的驱动程序:Class.forName("com.mysql.jdbc.Dirver");
  • 定义所要连接的数据库的地址
    Strng MySQLURL = "jdbc:mysql://host(服务器IP):port(端口号)/dbName(数据库名)";
  • 与数据库建立连接
    Connection conn = DirverManager.getConnection(url,LoginName,PassWord);
  • 例如:连接MySQL的book数据库,用户名为root,密码为root

    1
    2
    3
    Class.forName("com.myslq.jdbc.Dirver");
    String MySQLURL = "jdbc:myslq://localhost:3306/book";
    Connection conn = DirverManager.getConnection(MySQLURL,"root","root");
  • 建立语句对象

    1
    2
    Connection conn = DirverManager.getConnection(MySQLURL,"root","root");
    Statement stmt = conn.createStatement();
  • 声明并执行SQL语句

    • 查询:

      1
      2
      3
      4
      Connection conn = DirverManager.getConnection(MySQLURL,"root","root");
      Statement stmt = conn.createStatement();
      String sql = "SELECT * FORM book";
      ResultSet rs = stmt.executeQuery(sql);//将结果存储在ResultSet对象的结果集中。
    • 更新:

      1
      2
      3
      4
      Connection conn = DirverManager.getConnection(MySQLURL,"root","root");
      Statement stmt = conn.createStatement();
      String sql = "DELETE FORM book WHERE bookid=1234";
      int i = stmt.executeUpdate(sql);
  • 对结果集进行处理
    ResultSet对象称为结果集,是符合条件的所有行的集合
    主要方法如下:

    • boolean next()
      用于将结果集定位到下一行,ResultSet最初是定位在第0行上,此时应该调用next()将其定位到第一行,然后再输出。
    • getXxx()
      当ResultSet定位到某一行时,可以用getXxx()方法获得这一行单个字段的值
    • 显示结果集中所有记录的前两列
      1
      2
      3
      4
      5
      while(rs.next){
      name = rs.getString(1);
      score = rs.getFloat(2);
      System.out.println(name + "," + score);
      }
  • 关闭对象
    关闭对象使用close()方法,关闭对象前需要判断对象是否为空

JavaBean组件

简介

  • JavaBean的特点
    • 可以实现代码的重复利用
    • 易编写,易维护,易使用
    • 可以在任何安装了Java运行环境的平台上使用,而不用重新编译
  • 使用JavaBean的好处
    • 可以是JSP页面变得清晰
    • 节省软件开发时间
    • 减低系统维护难度
    • 为JSP应用带来更多的可伸缩性,使系统更加健壮和灵活
  • 在实际中,一个JavaBean类的编码约定包括以下内容
    • 类实现了java.io.Serializable接口
    • 必须放在某package(包)中
    • 如果类中有构造方法,那么这个构造方法也是公有的,并且是无参的
    • 属性:xxx,所有属性都是私有的
    • getXxx():用来获取属性xxx,并且该方法是公有的
    • setXxx(),用来设置属性xxx,并且该方法也是公有的
    • 对于boolean类型的成员变量,允许使用“is”代替上面的“get”和“set”
    • 类中的普通方法不适用于上面的命名规则,当时方法必须是公有的

使用JavaBean

  • JSP 代码段调用 JavaBean

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <%@ page language = "java" contentType = "text/html;charset = utf-8"%>
    <%@ page import="bean.Person" %>
    <<!DOCTYPE html>
    <html>
    <head>
    <title>JSP代码段使用JavaBean</title>
    </head>
    <body>
    <% Person bean = new Person(); %>
    初始值为:<br>
    姓名:<% = bean.getName();%><br>
    年龄:<% = bean.getAge();%><br>
    性别:<% = bean.getSex();%><br>
    职业:<% = bean.getCareer();%><br>
    <%
    bean.setName("小明");
    bean.setAge(18);
    bean.setSex("男");
    bean.setCareer("学生");
    %><br><br>
    更改后的值为:<br>
    姓名:<% = bean.getName();%><br>
    年龄:<% = bean.getAge();%><br>
    性别:<% = bean.getSex();%><br>
    职业:<% = bean.getCareer();%><br>
    </body>
    </html>
  • 使用<jsp:useBean>标记

    • 用法一

      1
      2
      3
      4
      5
      6
      <jsp:useBean id="bean",
      class="package.class"
      [scope="page|request|session|application"] />
      id:给bean起名
      class:创建bean的类名,特别注意类名的大小写要一致
      scope:bean的有效范围
    • 用法二

      1
      2
      3
      4
      5
      6
      <jsp:useBean id="bean",
      class="package.class"
      [scope="page|request|session|application"] >
      本体内容
      </jsp:useBean>
      本体内容:实际上可以看作JavaBean中需要初始化的代码
  • <jsp:setProperty>标记
    <jsp:setProperty>元素使用JavaBean实例给定的setter方法,在实例bean中设置一个或多个属性值。<jsp:setProperty>中的name值应当和<jsp:userBean>中的id值相同<jsp:setProperty> 标记用于设置JavaBean的属性值。其用法如下

    • 第一种用法

      1
      2
      3
      4
      5
      6
      7
      <jsp:setProperty name = "beanName"
      property = "propertyName"
      value = "propertyValue" />

      解释:name指出是在操作哪个bean
      property指出对该bean的哪个属性赋值
      vlaue用来指定给属性赋的值
    • 第二种用法

      1
      2
      3
      4
      5
      6
      7
       <jsp:setProperty name = "beanName"
      property = "propertyName"
      param = "paramName" />

      解释:name指出是在操作哪个bean
      property指出对该bean的哪个属性赋值
      param表示传入参数的名字
    • 第三种用法

      1
      2
      3
      4
      5
      6
      7
      8
       <jsp:setProperty name = "beanName"
      property = "propertyName"
      param = "propertyName" />
      注意:这里的参数名字与bean中属性名字一致

      解释:name指出是在操作哪个bean
      property指出对该bean的哪个属性赋值
      param表示传入参数的名字
    • 第四种用法

      1
      2
      3
      4
       <jsp:setProperty name = "beanName"
      property = "*" />

      使用这种方法可以一次为多个属性赋值
  • <jsp:getProperty>标记
    <jsp:getProperty>用于获取JavaBean实例给定属性值,并将这个值转换为字符串形式显示在JSP页面中。<jsp:setProperty>中的name值应当和<jsp:userBean>中的id值相同<jsp:getProperty> 标记用于设置JavaBean的属性值。其用法如下

    1
    2
    3
    4
    <jsp:getProperty name = "name" property = "propertyName">

    解释:name属性代表JavaBean对象实例名,该实例必须在前面定义过
    property属性代表需要获取的那个JavaBean对象对应的属性名字

Servlet技术

介绍

Servlet是用Java语言编写的程序,运行于支持Java的Web服务器或应用程序中,Servlet先于JSP出现,提供和和客户端动态交互的功能。Servlet可以处理来自客户端的HTTP 请求,并生成响应返回客户端。

  • Servlet的优点
    • 可移植性
    • 安全性
    • 高效性
  • Servlet的生命周期
    • 当客户端第一次请求Servlet时,Servlet被加载到内存,容器会创建Servlet实例,并调用init()方法进行初始化工作
    • 容器创建请求对象和响应对象。然后调用Servlet的service()方法为客户端提供服务
    • 当Servlet不在被需要时,容器调用Servlet的destroy()方法将Servlet实例销毁
  • Servlet的常用API
    • HttpServlet的常用方法
      • getServletContext(): 获取ServletContext()对象
      • getServletName(): 获取Servlet配置时声明Web应用内部使用的名字
      • getInitParameter(String name): 获取Servlet配置时提供的名为name的参数值
    • HttpServletRequest的常用方法
      • getRequestURL(): 获取请求的URL地址
      • getRequestURI(): 获取请求的服务器地址
      • getContextPath(): 获取Web应用的跟路径
      • getServletPath(): 获取Servlet的访问路径
      • getParameter(String name):获得名为name的参数的单个值
      • getParameterValues(String name): 获得名为name的参数的多个值
      • getAttribute(String name): 获得名为name的属性值
      • setAttribute(String name, String value): 设置名为name的属性值为value
      • getSession():获取session对象
      • getRequestDispatcher(String path): 获取请求转发对象
    • HttpServletResponse的常用方法
      • setContentType(String type): 设置响应的内容类型为type
      • setCharacterEncoding(String charset): 设置响应的编码字符集为charset
      • getWriter(): 返回一个PrintWriter对象
      • sendRedirect(String location): 向客户端发送一个重定向请求,地址为location

        Servlet过滤器

        Servlet过滤器是一种Java组件,它位于客户端与处理程序之间,能够对请求和响应进行检查和修改。Servlet过滤器通常用来完成一些通用的操作,例如同意字符编码,字符压缩、加密、实施安全控制等
  • Servlet过滤器API
    • Filter接口
      所有的过滤器都必须实现Filter接口
      • init() Init 方法在 Filter 生命周期中仅执行一次,web 容器在调用 init 方法时
      • destory() 在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
      • doFilter() Filter 链的执行
    • FilterChain接口
      • 调用过滤器链中的下一个过滤器
    • FilterConfig接口
      • 该接口用于在过滤器初始化阶段提供过滤器名、初始化参数及Servlet上下文等信息,该接口提供以下4个方法
      • getFilteName(): 返回web.xml文件到中定义的该过滤器名称
      • getServletContext(): 返回调用者所处的Servlet上下文
      • getInitParameter(String name): 返回配置过滤器时名为name的初始化参数值
      • getInitParameterNames(): 以Enumeration形式返回配置过滤器时名为name的初始化参数的名称
小额支持我写出更好的文章~