【学习笔记】JavaWeb基础

Java Web应用开发技术

在这里插入图片描述

概述

Java Web是采用Java技术来解决相关Web互联网领域的技术总和,涉及HTML、CSS、JSP、Servlet、JavaBean、JDBC、XML、Tomcat基本技术及jQuery、Struts2、Hibernate等框架技术,是基于Java EE框架的

开发Java Web应用程序一般使用Servlet或者Filter拦截

Java Web应用

  • 定义

    一个由HTML/XML文档、Java servlet、JSP、JSTL、类及其他任何种类文件捆绑起来的,并在Web容器中运行的Web资源构成的集合。

  • 名词解释

    • 容器

      提供特定程序组件服务的标准化运行时环境,通过这些组件可以在Java EE平台上得到所期望的服务。

      为组件提供与部署、执行、生命周期管理、安全和其他组件需求相关服务。

      Java EE平台由Applet容器、ACC(应用客户端容器)、Web容器(Servlet和JSP容器)和EJB容器四类容器组成。

    • 组件

      在应用程序中能发挥特定功能的软件单位。实质是特定的Java程序(被规定固定的格式和编写方法、被标准化功能和使用方法)

      方便了设计、开发、组装和部署应用系统,降低软件开发成本,适应企业快速发展需求。

      Java EE平台设计了客户端组件、Web组件、EJB组件

  • 容器与组件的关系

    组件是组装到Java EE中独立软件功能单元,每个Java EE组件在容器中执行。

    容器为组件提供标准服务和API,容器充当通向底层Java EE平台的接口。

  • 连接器

    资源适配器,驻留在Java EE平台下方,提供可移植服务的API,使之运用到应用开发中去。

Java Web应用开发技术

  • 过程

    用户通过浏览器发送请求–>程序通过执行产生Web网页–>程序将页面传递给用户机器上的浏览器–>最后呈现于用户

  • 组成

    • 表示层组件(HTML和JSP)

      • HTML+CSS+Javascript

        HTML,超文本标记语言,设计静态页面

        CSS,层叠样式表,美化网页,设置字体、颜色、布局等

        JavaScript,脚本语言,响应事件,实现客户与浏览器的交互,增加网页互动性。

      • JSP

        JSP页面是由HTML与嵌套其中的Java组成。

        HTML用于编写页面,Java用于响应服务器的请求。

        包括JSP指令、JSP脚本元素、JSP标准动作及JSP内置对象

    • 控制层组件(Servlet、过滤器、监听器)

      • Servlet

        用Java编写的服务器端程序,由服务器端调用和执行。

        处理客户端传来的HTTP请求,返回响应。

    • 业务逻辑层组件(JavaBean或EJB)

      • JavaBean

        用Java编写并有一定规范的类。JavaBean类的实例称为Ban。可被JSP应用,也可以被Servlet引用

    • 持久层组件(JDBC、Hibernate)

      • JDBC

        Java语言中数据库访问接口,用于连接数据库并直接调用SQL命令执行SQL语句。

    • 其他

      • XML

        可扩展标记语言,用于描述配置信息

  • 框架

    • Struts2

      提供一种基于MVC体系结构的Web程序的开发方法。

      使编程更加组件模块化、灵活、可重复调用等,并使MVC模式的程序结构更清晰。

运行环境及开发工具

  • JDK下载与安装
  • Tomcat服务器的安装与配置

C/S软件结构

  • JavaSE项目
  • Client Server

B/S软件结构

  • JavaEE项目
  • Browser Server
  • 服务器端:WEB服务器
  • 客户端:浏览器

前端开发流程

  • 美术实现师:网页设计师根据需求设计网页
  • 前端工程师:前端工程师键设计做成静态网页
  • 后台工程师:后台工程师将静态网页修改为动态网页

网页组成部分

  • 内容(结构)

    内容(结构)是页面中可以看的数据,使用HTML技术来展示

  • 表现

    表现指的是这些内容在页面上的展示形式,如布局、颜色、大小等,使用CSS技术来实现

  • 行为

    行为指的是页面中元素与输入设备交互的响应,使用JavaScript技术来实现

Java Web的基本概念

  • Java Web

    所有通过Java语言编写可以通过浏览器访问的程序的总称,称为Java Web

  • 请求

    请求是指客户端给服务器发送数据的过程,称为请求 Requst

  • 响应

    响应是指服务器给客户端回传数据,叫响应 Response

  • 请求和响应的关系:成对出现,即有请求就会有响应

JSP技术

概述

  • 简述

    JSP(Java Server Page)是一种运行在服务器端的脚本语言,是用于开发动态网页的,其扩展名为.jsp的文件

  • 页面结构

    由静态网页HTML代码、Java程序片段和JSP标签<% %>共同构成的网页文件

    <% %>中间代码为JSP代码(实为Java代码)

  • 运行机制

在这里插入图片描述

JSP程序时在服务器端运行的。基本过程:客户端发送JSP页面的请求到服务器,服务器端的JSP引擎解释执行JSP代码,并将结果以HTML页面形式发送到客户端。

JSP语法

基本元素
  • 概述

    规范JSP网页所使用的Java代码,包括JSP注释、声明、表达式、脚本段

  • JSP注释

    <%-- JSP注释格式 --%>
    
    <!-- HTML注释格式 -->
    
    <% // 单行Java注释 %>
    <% /* 多行Java注释 */ %>
    

    在发布网页时被忽略,增加程序可读性。

  • JSP声明

    <%! 声明变量、方法和类 %>
    

    用于声明变量、方法和类。声明后的变量、方法和类(即为成员变量)可以在本JSP页面的任何位置使用,并在JSP页面初始化时被初始化。

  • JSP表达式

    <%= 表达式%>
    

    用于输出显示,由变量、常量组成的算式,将JSP生成的数值转换成字符串嵌入HTML页面,即执行后返回String类型的结果值。

  • JSP脚本段

    <% Java语句 %>
    

    用于处理服务器请求时执行的语句,包含任意合法的Java语句。

指令元素
  • 语法格式

    <%@ 指令名称 属性1="属性值1" 属性2="属性值2" … %>
    

    指令元素被服务器解释并被执行,通过指令元素可以使服务器按照指令的设置执行动作或设置在整个JSP页面范围内有效的属性。

  • page指令

    用于定义整个页面的全局属性

    <%@page language="java" extends="继承的父类名称" import="导入Java包或类的名称" session="true/false" 
        buffer="none/8kB/自定义的缓冲区的大小" autoflush="true/false" isThreadSafe="true/false" info="页面信息"
        errorPage="发生错误时转向的页面相对地址" isErrorPage="true/false" pageEncoding="pageEncoding" contentType="mimeType[;charset=charSet]"
        %>
    
    属性说明设置值示例
    language指定用到的脚本语言,默认是Java<%@page language=“java”%>
    import用于导入java包或java类<%@page import=“Java.util.Date”%>
    pageEncoding指定页面所用编码,默认与contentType值相同UTF-8
    extendsJSP转换成Servlet后继承的类Java.servlet.http.HttpServlet
    session指定该页面是否参与到HTTP会话中true 或 false
    buffer设置out对象缓冲区大小8kb
    autoflush设置是否自动刷新缓冲区true 或 false
    isThreadSafe设置该页面是否是线程安全true 或 false
    info设置页面的相关信息网站主页面
    errorPage设置当页面出错后要跳转到的页面/error/jsp-error.jsp
    contentType设计响应jsp页面的MIME类型和字符编码text/html;charset=gbk
    isErrorPage设置是否是一个错误处理页面true 或 false
    isELIgnord设置是否忽略正则表达式true 或 false

    在一个页面中可以使用多个<%@page%>指令,用于描述不同的属性,但每个属性只能使用一次,而import可以使用多次,同时指令区分大小写。

  • include指令–静态包含

    用于包含一个文件或代码文件,将include指定的文件插入到页面中

    <%@ include file="filename" %>
    

    include指令只有一个file属性

    filename指被包含的文件相对路径,但该文件必须与JSP页面保持在同一个Web服务目录下

    静态包含是把包含的页面内容原封装不动的输出到包含的位置

  • taglib指令

动作元素
  • <jsp:include>–动态包含

    在页面得到请求时动态包含一个文件

    <jsp:include page="filename" / >
    

    当前JSP页面动态包含一个文件,即将当前JSP页面、被包含的文件各自独立编译为字节码文件。当执行到该动作标签处,才加载执行被包含文件的字节码。

    动态包含会把包含的jsp页面单独翻译成servlet文件,然后在执行到时候再调用翻译的servlet程序,并把计算的结果返回。

    动态包含是在执行的时候,才会加载。所以叫动态包含。

  • <jsp:forward>

    引导请求进入新的页面(转向到新页面)

    <jsp:forward page="filename" / >
    

    用于停止当前页面的执行,转向另一个HTML或JSP页面。

  • <jsp:params>

    实现参数传递子动作元素

    <jsp:include page="filename">
        <jsp:param name="varname" value="valname">
    </jsp:param>
        
    <jsp:forward page="filename">
        <jsp:param name="varname" value="valname">
    </jsp:param>
    

    配合<jsp:include><jsp:forward>使用;

    <jsp:include>使用时,将param标签中的变量值传递到动态加载的文件

    <jsp:forward>使用时,将param标签中的变量值传递到要跳转的文件

  • <jsp:plugin>

    连接客户端的Applet或Bean插件

  • <jsp:useBean>

    应用JavaBean组建

  • <jsp:setProperty>

    设置JavaBean的属性值

  • <jsp:getProperty>

    获取JavaBean的属性值并输出

JSP内置对象

对象名称所 属 类 型有效范围说明简述
applicationjavax.servlet.ServletContextapplication代表应用程序上下文,允许JSP页面与包括在同一应用程序中的任何Web组件共享信息ServletContext对象
configjavax.servlet.ServletConfigpage允许将初始化数据传递给一个JSP页面ServletConfig对象
exceptionjava.lang.Throwablepage该对象含有只能由指定的JSP“错误处理页面”访问的异常数据异常对象
outjavax.servlet.jsp.JspWriterpage提供对输出流的访问jsp输出流对象
pagejavax.servlet.jsp.HttpJspPagepage代表JSP页面对应的Servlet类实例指向当前jsp对象
pageContextjavax.servlet.jsp.PageContextpage是JSP页面本身的上下文,它提供了唯一一组方法来管理具有不同作用域的属性jsp的上下文对象
requestjavax.servlet.http.HttpServletRequestrequest提供对请求数据的访问,同时还提供用于加入特定请求数据的上下文请求对象
responsejavax.servlet.http.HttpServletResponsepage该对象用来向客户端输入数据响应对象
sessionjavax.servlet.http.HttpSessionsession用来保存在服务器与一个客户端之间需要保存的数据,当客户端关闭网站的所有网页时,session变量会自动消失会话对象
  • 内置对象作用域

    application:对象可以与它创建的JSP页面属于相同的Web应用程序的任意JSP访问
    page:对象只能在创建它JSP页面中被访问

    session:对象可以在与创建它的JSP页面共享相同的HTTP会话的任意一个JSP中被访问

    request:对象可以在与创建它的JSP页面监听的HTTP请求相同的任意一个JSP中被访问

  • response.getwriter()输出流和out输出流区别

request对象

  • 概述

    从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。

    过程: 当客户端通过HTTP协议请求一个JSP页面时,JSP容器会自动创建request对象并将请求信息包装到request对象中,当JSP容器处理完请求后,request对象就会销毁。

  • 常用方法

    方法说明
    setAttribute(String name, Object obj)用于设置request中的属性及其属性值
    getAttribute(String name)用于返回name指定的属性值,若不存在指定的属性,就返回null。
    removeAttribute(String name)用于删除请求中的一个属性
    getParameter(String name)用于获得客户端传送给服务器端的参数值
    getParameterNames()用于获得客户端传送给服务器端的所有参数名字(Enumeration类的实例)
    getParameterValues(String name)用于获得指定参数的所有值
    getCookies()用于返回客户端的所有Cookie对象,结果是一个Cookie数组
    getCharacterEncoding()返回请求中的字符编码方式
    getRequestURI()用于获取发出请求字符串的客户端地址
    getRemoteAddr()用于获取客户端IP地址
    getRemoteHost()用于获取客户端名字
    getSession([Boolean create])用于返回和请求相关的session。create参数是可选的。true时,若客户端没有创建session,就创建新的session
    getServerName()用于获取服务器的名字
    getServletPath()用于获取客户端所请求的脚本文件的文件路径。
    getServerPort()用于获取服务器的端口号

    用于处理客户端(浏览器)提交的请求信息,便于做出相应处理

  • 获取请求参数

    • 访问请求参数的方法

      <% String strVar = request.getParameter("proName"); %>
      

      strVar–字符串变量名

      proName–与客户端提供参数的name属性名对应,该方法的返回值为String类型,如果参数name属性不存在,则返回一个null值。

    • 传参的形式

      1. 使用JSP的forwardinclude动作的传递参数子动作,实现传递参数
      2. 在JSP页面或HTML页面中利用表单传递参数<form action="filename">
      3. 追加在网址后的参数传递或追加在超链接后面的参数
  • 新属性的设置与获取

    • 新属性的设置

      可在request对象中添加属性,另一个JSP程序中获取添加的数据

      <% void request.setAttribute("key",Object); %>
      

      参数key是键,为String类型,是属性名称

      参数object是键值,为Object类型

    • 新属性的获取

      <% Object request.getAttribute(String name); %>
      

      参数name表示键名,获取的参数类型是由SetAttribute("name",obj)的obj类型绝对

  • 获取客户端信息

    可以获取客户端IP地址、协议等信息的方法

    获取客户端协议名和版本号:<%=request.getProtocol() %>
    获取客户机名:<%=request.getRemoteHost() %>
    获取客户机IP地址:<%=request.getRemoteAddr() %>
    获取客户提交信息长度:<%=request.getContentLength() %>
    获取客户提交信息方式:<%=request.getMethod() %>
    获取HTTP头文件中Host值:<%=request.getHeader("Host") %>
    获取服务器名:<%=request.getServerName() %>
    获取服务器端口号:<%=request.getServerPort() %>
    获取接受客户提交信息的页面:<%=request.getServeletPath() %>
    

response对象

  • 概述

    用于响应客户请求,由服务器想客户端输出信息

    过程:当服务器向客户端传送数据时,JSP容器会自动创建response对象并请信息封装到response对象中,当JSP容器处理完请求后,response对象会被销毁。response和request结合起来完成动态网页的交互功能。

  • 常用方法

    方法说明
    SendRedirect(String url)使用指定的重定向位置url向客户端发送重定向响应
    setDateHeader(String name,long date)使用给定的名称和日期值设置一个响应报头,如果指定的名称已经设置,则新值会覆盖旧值
    setHeader(String name,String value)使用给定的名称和值设置一个响应报头,如果指定的名称已经设置,则新值会覆盖旧值
    `setHeader(String name,int value)使用给定的名称和整数值设置一个响应报头,如果指定的名称已经设置,则新值会覆盖旧值
    setContentType(String type)为响应设置内容类型,其参数值可以为text/html,text/plain,application/x_msexcel或application/msword
    setContentLength(int len)为响应设置内容长度
    setLocale(java.util.Locale loc)为响应设置地区信息
  • 重定向网页

    使用response对象中的sendRedirect()方法实现重定向到另一个页面

    <% response.sendRedirect(String "url") %>
    
    • 重定向sendRedirect(String url)和转发<jsp:forward page=" "/>的区别:

      只能使用<jsp:forward>在本网站内跳转;而使用response.sendRedirect跳转到任何一个地址的页面。

      <jsp:forward>带着request中的信息跳转;sendRedirect不带request信息跳转。

  • 页面定时刷新或自动跳转

    使用response对象的setHeader()方法,实现页面的定时跳转或定时自刷新

    <%-- 每隔?秒页面自动刷新 --%>
    <% response.setHeader("refresh",'?s') %>
    <%-- ?秒后,页面自动重定向到网页中去 --%>
    <% response.setHeader("refresh","?s;url=http:// " ) %>
    

session对象

  • 概述

    用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间称为一次会话

    当客户重新打开浏览器建立到该网站的连接时,JSP引擎为该客户再创建一个新的session对象,属于一次新的会话

  • 主要方法

    方法说明
    Object getAttribute(String attriname)用于获取与指定名字相联系的属性如果属性不存在,将会返回null
    void setAttribute(String name,Object value)用于设定指定名字的属性值,并且把它存储在session对象中
    void removeAttribute(String attriname)用于删除指定的属性(包含属性名、属性值)
    Enumeration getAttributeNames()用于返回session对象中存储的每一个属性对象,结果集是一个Enumeration类的实例
    long getCreationTime()用于返回session对象被创建时间,单位为毫秒
    long getLastAccessedTime()用于返回session最后发送请求的时间,单位为毫秒
    String getId()用于返回Session对象在服务器端的编号
    long setMaxInactiveInterval()用于返回session对象的生存时间,单位为秒
    boolean isNew()用于判断目前session是否为新的Session,若是则返回ture,否则返回false
    void invalidate()用于销毁session对象,使得与其绑定的对象都无效

    其中方法包含存储、获取等操作用户会话信息

    用于保持服务器与客户端之间的会话状态,利用session可以获取会话状态或者设置属性信息的获取。

  • 创建及获取客户的会话信息

    <%@page contentType="text/html" pageEncoding="UTF-8" import="java.util.*"%>
    <html>
        <head>
            <title>利用session对象获取会话信息并显示</title>
        </head>
        <body>
           session的创建时间是:<%=new Date(session.getCreationTime())%>
           session的Id号:<%=session.getId()%>
           客户最近一次访问时间是:
            <%=new java.sql. Time(session.getLastAccessedTime())%>
           两次请求间隔多长(ms)时间session将被取消:
           <%=session.getMaxInactiveInterval()%>
           是否是新创建的session:<%=session.isNew()?"是":"否"%>
        </body>
    </html>
    

application对象

  • 概述

    application对象用于保存应用程序中的公有数据

    在服务器启动时对每个Web程序都自动创建一个application对象

    只要不关闭服务器,application对象将一直存在,所有访问同一工程的用户可以共享application对象。

  • 主要方法

    方法说明
    Object getAttribute(String attriname)获取指定属性的值
    void setAttribute(String attriname,Object attrivalue)设置一个新属性并保存值
    void removeAttribute(String attriname)从application对象中删除指定的属性
    Enumeration getAttributeNames()获取application对象中所有属性的形成

    application对象可以实现属性的设置、获取等操作

out对象

  • 简述

    out对象的主要功能是向客户输出响应信息。

  • 语法

    <% out.print() %>
    

可以输出任意类型的数据,HTML标记也可以作为out输出的内容。

JDBC数据库访问技术

JDBC技术概述

概述

JDBC是一种用于执行SQL语句的Java API

由一组类与接口组成,通过调用这些类和接口所提供的方法

可以使用标准的SQL语言来存取数据库中的数据。

在这里插入图片描述

数据库驱动程序:实现应用程序和某个数据库产品之间的接口,用于向数据库提交SQL请求

驱动程序管理器:为应用程序装载数据库驱动程序

JDBC API:提供一系列抽象的接口,主要用于连接数据库和直接调用SQL命令,执行各种SQL语句

类或接口作用
java.sql.DriverManager该类处理驱动程序的加载和建立新数据库连接
`java.sql.Connection该接口实现对特定数据库的连接
java.sql.Satement该接口表示用于执行静态SQL语句并返回它所生成结果的对象
java.sql.PreparedStatement该接口表示预编译的SQL语句的对象,派生自Satement,预编译SQL效率高且支持参数查询
java.sql.CallableStatement该接口表示用于执行SQL语句存储过程的对象。派生自PreparedStatement,用于调用数据库中的存储过程
java.sql.ResultSet该接口表示数据库结果集的数据表,统称通过执行查询数据库的语句生成
驱动程序结构Driver
  • 数据库提供的数据驱动程序,提供一个实现java.sql.Driver接口的类,称为Driver类

  • 通过java.lang.Class类的静态方法forName()加载Driver类

    Class.forName('com.mysql.jdbc.Driver');
    

    连接MySQL数据库为例,其Driver类为com.mysql.jdbc.Driver

驱动程序管理器DriverManager
  • 负责管理JDBC驱动程序的基本服务,是JDBC的管理层,作用于用户和驱动程序之间,负责跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接,提供java.sql.DriverManager接口的类,称为DriverManager类

  • 通过类的静态建立数据库连接

    Connection getConnection(String url,String user,String password);
    
    String url = "jdbc:mysql://数据库服务器IP:3306/数据库名";
    String user = "root";
    String password = "pwd";
    Connection con = DriverManager.getConnection(url,user,password)
    

    con为数据库与Java之间的连接桥梁,称为连接对象

    URL格式为 jdbc:子协议:数据源

    其中本机数据库服务器IP一般为127.0.0.1

数据库连接接口Connection
  • 负责与特定数据库的连接,形成连接对象,java程序对数据库的操作都在该对象上进行,利用该接口,提供的方法createStatement()PreparedStatement()创建执行SQL语句的执行的对象,称为Connection类

  • createStatement()PreparedStatement()区别

    方法名称功能描述
    createStatement()创建并返回一个Statement实例,通常在执行无参数的SQL语句时创建该实例
    prepareStatement()创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行了预编译处理
  • 执行的SQL语句

    // 创建Statement执行
    String sql = "SELECT * FROM student WHERE no=1"
    
    Statement stmt = con.createStatement();
    
    // 创建PrepareStatement执行
    String sql = "SELECT * FROM student WHERE no=?";
    PrepareStatement pst = con.prepareStatement(sql);
    pst.setInt(1,1);
    
执行SQL语句接口Statement
  • java.sql.Statement接口用来执行静态的SQL语句,并返回执行结果。

  • Statement接口提供的常用方法

    方法名称功能描述
    executeQuery(String sql)执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例
    executeUpdate(String sql)执行指定的静态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
  • 语法

    // 执行查询SQL语句
    String sql = "SELECT * FROM student WHERE no=1";
    
    Statement stmt = con.createStatement();
    
    ResultSet rs=stmt.executeQuery(sql);
    // 执行删除SQL语句
    String sql = "DELETE FROM student WHERE no=1";
    int n = stmt.executeUpdate(sql);
    
执行动态SQL语句接口PreparedStatement
  • java.sql.PreparedStatement接口继承于Statement接口,是Statement接口的扩展,用来执行动态的SQL语句,即包含参数的SQL语句

  • PreparedStatement接口提供的常用方法

    方法名称功能描述
    executeQuery()执行前面包含参数的动态SELECT语句,并返回一个永远不能为null的ResultSet实例
    executeUpdate()执行前面包含参数的动态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
    setXxx()为指定参数设置Xxx型值
  • 语法

    // 执行查询SQL语句
    String sql = "SELECT * FROM student WHERE no=?";
    PrepareStatement pst = con.prepareStatement(sql);
    pst.setInt(1,1);
    // 执行删除SQL语句
    String sql = "DELETE FROM student WHERE no=?";
    PrepareStatement pst = con.prepareStatement(sql);
    pst.setInt(1,1);
    
访问结果集接口ResultSet
  • 通过该接口的实例可以获得检索结果集,以及对应数据表的相关信息。ResultSet实例是通过执行查询数据库的语句生成

  • ResultSet接口提供的常用方法

    方法名称功能描述
    first()移动指针到第一行;如果结果集为空则返回false,否则返回true;如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
    last()移动指针到最后一行;如果结果集为空则返回false,否则返回true;如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
    previous()移动指针到上一行;如果存在上一行则返回true,否则返回false;如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
    next()移动指针到下一行;指针最初位于第一行之前,第一次调用该方法将移动到第一行;如果存在下一行则返回true,否则返回false
    getRow()查看当前行的索引编号;索引编号从1开始,如果位于有效记录行上则返回一个int型索引编号,否则返回0
    findColumn()查看指定列名的索引编号;该方法有一个String型入口参数,为要查看列的名称,如果包含指定列,则返回int型索引编号,否则将抛出异常

JDBC访问数据库

使用JDBC访问数据的流程
  1. 注册驱动。
  2. 建立连接(Connection)。
  3. 创建数据库操作对象用于执行SQL的语句。
  4. 执行语句。
  5. 处理执行结果(ResultSet)。
  6. 释放资源。
注册驱动
  1. 添加驱动程序文件到应用程序项目中

  2. 加载并注册指定的数据库驱动

    Class.forName("com.mysql.jdbc.Driver");
    

    不同的数据库对应不同的数据库驱动程序;

建立连接

注册驱动程序后,创建数据库连接对象

  • 数据库连接的URL

    String url1 = "jdbc:mysql://数据库服务器IP:3306/数据库名";
    String url2 = "?user=root&password=pwd";
    String url3 = "&useUnicode=true&characterEncoding=UTF-8";
    String url = url1 + url2 + url3;
    
  • 利用连接符号字实现连接,获取连接对象

    DriverManager类提供了getConnection方法,用来建立与数据库的连接。调用getConnection()方法可返回一个数据库连接对象。

    getConnection方法有3种不同的重载形式:

    • 通过url指定的数据库建立连接

       static Connection getConnection(String url)
      
    • 通过url指定的数据库建立连接,info提供了一些属性,这些属性里包括了user和password等属性

      static Connection getConnection(String url,Properties info)
      
    • 传入参数用户名为user,密码为password,通过url指定的数据库建立连接

      static Connection getConnection(String url,String user,String password)
      
  • 利用JDBC连接MySQL数据库,获取连接对象的通用格式
创建数据库操作对象用于执行SQL的语句
  • 创建Statement对象

    利用Connection类的方法createStatement()创建Statement对象以执行SQL语句

    Statement stmt = conn.createStatement();
    
  • 创建PrepareStatement对象

    利用Connection类的方法prepareStatement(String sql)创建PrepareStatement对象以执行SQL语句

    String sql = "... ?";
    PrepareStatement pst = conn.prepareStatement(sql);
    pst.setXxx(); 
    
    方法参数及描述
    void setInt()int ParameterIndex,int x
    void setFloat()int ParameterIndex,float x
    void setNull()int ParameterIndex,int sqlType
    void setString()int ParameterIndex,String x
    void setDate()int ParameterIndex,Date x
    void setTime()int ParameterIndex,Time x
执行SQL语句
  • Statement对象执行SQL语句

    // 执行select语句,返回一个结果集
    String sql = "SELECT * FROM student WHERE no=1";
    ResultSet rs = stmt.executeQuery(String sql);
    
    // 执行update、insert、delete,返回一个整数,表示执行SQL语句影响的数据行数
    String sql = "DELETE FROM student WHERE no=1";
    int  n =stmt.executeUpdate(String sql);
    
  • PreparedStatement对象执行SQL语句

    // 执行select语句,返回一个结果集
    String sql = "SELECT * FROM student WHERE no=?";
    ResultSet rs = pst.executeQuery(String sql);
    // 执行update、insert、delete的SQL语句,返回一个整数,表示执行SQL语句影响的数据行数
    String sql = "SELECT * FROM student WHERE no=?";
    int  n = pst.executeUpdate(String sql);
    
获取并处理查询结果
  • 返回的ResultSet对象是一个由查询结果构成的数据表,需要先做定位记录位置,再对确定的字段项实现相应操作

  • 记录定位操作

    使用对应的方法将指针移动到指定的数据行中

  • 读取指定字段的数据操作

    方法名称方法说明
    boolean getBoolean(int ColumnIndex)返回指定字段的以Java的booelan类型表示的字段值
    String getString(int ColumnIndex)返回指定字段的以Java的String类型表示的字段值
    byte getByte(int ColumnIndex)返回指定字段的以Java的byte类型表示的字段值
    short getShort(int ColumnIndex)返回指定字段的以Java的short类型表示的字段值
    int getInt(int ColumnIndex)返回指定字段的以Java的int类型表示的字段值
    long getLong(int ColumnIndex)返回指定字段的以Java的long类型表示的字段值
    float getFloat(int ColumnIndex)返回指定字段的以Java的float类型表示的字段值
    double getDouble(int ColumnIndex)返回指定字段的以Java的Double类型表示的字段值
    byte[ ] getBytes(int ColumnIndex)返回指定字段的以Java的字节数组类型表示的字段值
    Date getDate(int ColumnIndex)返回指定字段的以Java.sql.Date的Date类型表示的字段值
  • 修改指定字段的数据操作

    移到指定的数据行后,可使用updateXxx()方法设置字段新的数值

    其方法参数也有两种格式:用整数来指定字段的索引(索引从1开始);用字段名来指定字段

释放资源

完成对数据库记录的一次操作后,应及时关闭这些对象并释放资源

rs.close();
stmt.close();
con.close();

分别关闭了连接对象conn、操作对象stmt、查询结果集对象rs

关闭对象的次序与创建对象的次序相反

乱码解决方案
  • 为了正确处理汉字信息,必须使汉字编码使用统一的编码格式。

    汉字编码,目前主要使用UTF-8和GB2312

  • 解决方案

    • 建立数据库、数据表时指定数据编码

      CREATE DATABASE db_name DEFAULT charset=utf8;
      
      CREATE TABLE tb_name (
      
      ) DEFAULT charset=utf8;
      
    • 在连接数据库时指定数据库读写编码

      Class.forName("com.mysql.jdbc.Driver");
      String url="jdbc:mysql://localhost/db_name?user=root&password=pwd&useUnicode=true&characterEncoding=UTF-8";
      
    • 含JSP提交表单的页面,设置method=“post”,并在接受所提交信息页面或servlet程序中,通过request对象的request.setCharacterEncoding("UTF-8")设置编码格式

JavaBean技术

JavaBean基础

基础概念
  • 概述

    JavaBean是一个可重复使用的软件组件,使用Java语言编写、遵循一定标准的类,封装了数据和业务逻辑,供JSP或Servlet调用,完成数据封装和数据处理等功能。

  • 优点

    提高代码的重用性,将复杂需求分解成简单的功能模块,这些模块是相对独立的,可以继承、重用

  • 特点

    一次性编写
    任何地方执行
    任何地方重用

  • 设计原则

    本质就是一个Java类,但与普通类不同

设计规则
  • JavaBean是一个公共类,即public
  • JavaBean类具有一个公共的无参构造方法
  • JavaBean所有的属性定义都是私有的
  • JavaBean中需要对每个属性提供两个公共方法以设置setXxx()和获取getXxx()(若属性类型是boolean,其方法名为isXxx()
  • 定义JavaBean是,通常放在一个命名的包下
安装部署

设计的JavaBean类编译后必须部署到Web应用程序中才能被JSP或Servlet调用

  • 将单个JavaBean类部署到工程名/WEB-INF/classes/

  • JavaBean的打包类Jar部署到/WEB-INF/lib

    若设计的JavaBean被修改,需要重新部署工程才能生效。

JavaBean的生命周期

在这里插入图片描述

JavaBean分类
  • 值JavaBean

    值JavaBean通常作为信息的容器,通常用来封装表单数据。

  • 工具JavaBean

    工具JavaBean通常用于封装业务逻辑、数据操作等,如连接数据库,对数据库进行增删改查和解决中文乱码等操作。

    使用工具JavaBean可以实现业务逻辑与前台程序的分离,提高了代码的可读性与易维护性。

JavaBean使用

基于JSP脚本代码访问JavaBean
  1. 编写JavaBean类

  2. 导入JavaBean类

    <% @page contentType="text/html" import="包.类名" %>
    
  3. 创建类对象

    <% 类名 类对象 = new 类名(参数1,参数2,…); %>
    
  4. 类对象调用相应的方法,实现获取数据及显示

    <%=类对象.getXxx() %>
    <%=类对象.setXxx() %>
    
基于JSP动作标签访问JavaBean

在这里插入图片描述

  • 三个JavaBean动作

    • jsp:useBean动作

      声明并创建JavaBean对象实例

      <jsp:useBean id="beanName" scope="page|session|application|request" class="BeanClass" />
      

      id:表示实例化的对象名称

      class:表示这个JavaBean所对应的包.类名

      scope:表示此对象保存的作用范围,默认为page

    • jsp:setProperty动作

      对JavaBean对象的指定属性设置值

      <jsp:setProperty name="beanName" last_syntax />
      
      • last_syntax语法格式如下:
        • property=“*”
        • property=“propertyName”
        • property=“propertyName” param=“parameterName”
        • property=“propertyName” value=“value”
    • jsp:getProperty动作

      获取JavaBean对象指定属性值,并显示到网页上

      <jsp:getProperty name = "BeanName" property = "Prop" />
      

      name:指定JavaBean的名称

      property:指定从JavaBean中要检索的属性名称。

  • 声明JavaBean对象

    在指定的作用范围内,调用由class所指定类的无参构造方法创建对象实例。

    若该对象在该作用范围内已存在,则不生成新对象,而是直接使用

    <jsp:useBean id="对象名" class= "类名" scope= "有效范围" />
    

    class:用来指定JavaBean的类名,注意,必须使用完全限定类名。
    id:指定所要创建的对象名称。
    scope:指定所创建对象的作用范围,其取值有四个:page(页面)、request(请求)、session(会话)、application(应用);默认值是page。

  • 设置JavaBean属性值

    • 简单JavaBean属性设置

      为``beanName对象的指定属性propertyName设置指定值beanValue`

      <jsp:setProperty name="beanname" property="propertyname" value="beanvalue" />
      

      beanname代表JavaBean对象名,对应<jsp:useBean>标记的id属性;

      propertyname代表JavaBean的属性名;

      beanvalue代表要设置的值。

      在设置值时,自动实现类型转换(将字符串自动转换为JavaBean中属性所声明的类型)。

    • 将单个属性与输入参数直接关联

      对于客户端所提交的请求参数,可以直接给JavaBean实例中的同名属性赋值。

      <jsp:setProperty name="beanname" property="propertyname" />
      

      将参数名称为propertyName的值提交给同JavaBean属性名称同名的属性,并自动实现数据类型转换。

    • 将单个属性与输入参数间接关联

      若JavaBean的属性与请求参数的名称不同,则可以通过JavaBean属性与请求参数之间的间接关联实现赋值

      <jsp:setProperty name="beanname" property="propertyname" param="paramname" />
      

      将请求参数名称为paramname的值给JavaBean的propertyname属性设置属性值。

    • 将所有的属性与请求参数关联

      将所有的属性与请求参数关联,实现自动赋值并自动转换数据类型。

      <jsp:setProperty name="beanname" property="*" />
      

      将提交页面中表单输入域所提供的输入值提交到JavaBean对象中相同名称的属性中

  • 获取JavaBean属性值并显示

    获取JavaBean对象指定属性的值,并显示在页面上;

    在JSP页面显示JavaBean属性值,需要使<jsp:getProperty>动作标签。

    <jsp:getProperty name="beanname" property="propertyname" />
    

    jsp:getProperty动作标签是通过JavaBean中的get方法获取对应属性的值。

  • 调用JavaBean业务处理方法

    当使用jsp:useBean实例化一个JavaBean对象(或通过jsp:setProperty修改属性值)后,可以调用JavaBean的业务处理方法,完成该对象所希望处理的功能。

多JSP页面共享JavaBean
  • 共享JavaBean的创建与获取

     <jsp:useBean id="…" class="…" scope="…"/>
    

    属性scope的取值:
    page:页面范围
    request:请求范围
    session:会话范围
    application:应用范围。

  • 四个共享值

    • page共享

      默认值,使用非共享(作用域为页面)的bean

    • request共享

      共享作用域为请求的bean

      处理当前请求的过程中,bean对象应存储在request对象中,可以通过getAttribute访问到它

    • session共享

      共享作用域为会话的bean

      bean会被存储在与当前请求关联的session中,和普通的会话对象一样,可以使用getAttribute访问到它们

    • application共享

      共享作用域为应用(即作用域为ServletContext)的bean

      Bean将存储在application中,由同一Web应用中的所有JSP共享,可以使用getAttribute访问到它们。

Servlet技术

技术概述

基本概述
  • Servlet是JavaEE 规范之一。(规范就是接口)
  • Servlet是用Java语言编写的服务器端程序,是由服务器端调用和执行的、按照Servlet自身规范编写的Java类。
  • Servlet可以处理客户端传来的HTTP请求,并返回一个响应。
  • Servlet是JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
  • Servlet 是运行在服务器上的一个Java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端
基本实现
  • 实现Servlet接口,创建Servlet
  • 继承GenericServlet,创建Servlet
  • 继承HttpServlet,创建Servlet
Servlet编程接口
功能类和接口
Servlet实现javax.servlet.Servlet,javax.servlet.SingleThreadModel javax.servlet.GenericServlet,javax.servlet.http.HttpServlet
Servlet配置javax.servlet.ServletConfig
Servlet异常javax.servlet.ServletException,javax.servlet.UnavailableException
请求和响应javax.servlet.ServletRequest,javax.servlet.ServletResponsejavax.servlet.ServletInputStream,javax.servlet.ServletOutputStreamjavax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse
会话跟踪javax.servlet.http.HttpSession,javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionBindingEvent
Servlet上下文javax.servlet.ServletContext
Servlet协作javax.servlet.RequestDispatcher
其他javax.servlet.http.Cookie,javax.servlet.http.HttpUtils
GET和POST请求的分发处理
继承HttpServlet实现Servlet程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现Servlet程序。

  1. 编写一个类去实现Servlet接口,即编写的类继承HttpServlet类
  2. 实现service方法,处理请求,并响应数据,即根据业务需要重写doGet或doPost方法
  3. 到web.xml中的配置 Servlet 程序的访问地址
Servlet基本结构
// 自定义的Servlet存放包名称
package com.servlet;

// 需要导入相关的类和包
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "Servlet类名", value = "/Servlet值", urlPatterns = {"/url值"})
public class Servlet类名 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 实现代码
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 实现代码
    }
}
  • Servlet类需要继承类HttpServlet
  • Servlet的父类HttpServlet中包含了几个重要方法,根据需要重写它们:
    • init():初始化方法,Servlet对象创建后,接着执行该方法。
    • doGet():当请求类型是“get”时,调用该方法。
    • doPost():当请求类型是“post”时,调用该方法。
    • service():Servlet处理请求时自动执行service()方法,该方法根据请求的类型(get或post),调用doGet()或doPost()方法,因此,在建立Servlet时,一般只需要重写doGet()和doPost()方法。
    • destroy():Servlet对象注销时自动执行。
Servlet配置方式
  • 在Web配置文件web.xml中配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
             <servlet>
        		<servlet-name>类名</servlet-name>
        		<servlet-class>包名.类名</servlet-class>
    		</servlet>
    		<servlet-mapping>
        		<servlet-name>类名</servlet-name>
        		<url-pattern>/url地址</url-pattern>
    		</servlet-mapping>
    </web-app>
    

    两个servlet-name必须一样,servlet-class是全限定名,url-pattern是你的网页要提交的对应地址。

    ​ 优点:集中管理 Servlet 的配置,便于查找和修改。

    ​ 缺点:代码量大且较繁琐。

  • 在Servlet程序源码中注解配置

    // 自定义的Servlet存放包名称
    package com.servlet;
    
    // 需要导入相关的类和包
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.annotation.*;
    import java.io.IOException;
    
    @WebServlet(name = "Servlet类名", value = "/Servlet值", urlPatterns = {"/url值"})
    public class Servlet类名 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// 实现代码
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// 实现代码
        }
    }
    

    name是类名,urlPatterns是你的网页要提交的对应地址。

    属性名类型描述
    asyncSupportedboolean声明Servlet是否支持异步操作模式
    descriptionStringServlet的描述信息
    displayNameStringServlet的显示名称
    initParamsWeb initParams[]Servlet的初始化参数
    nameStringServlet的名称
    urlPatternsString[]配置Servlet的访问URL,可以同时配置多个不同的URL
    valueString[]配置Servlet的访问URL,可以同时配置多个不同的URL

    ​ 优点:代码少,配置简单

    ​ 缺点:没有集中配置,一个类配置一个,不方便查找和修改。

生命周期
  1. 执行 Servlet 构造器方法----在第一次访问的时候创建 Servlet 程序会调用
  2. 执行 init 初始化方法----在第一次访问的时候创建 Servlet 程序会调用
  3. 执行 service 方法----每次访问都会调用
  4. 执行 destroy 销毁方法----在 web 工程停止的时候调用

常用类及方法

JSP内置对象Servlet类或接口
outjavax.servlet.http.HttpServletResponse得到PrintWriter类并创建Servlet的out对象
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
sessionjavax.servlet.http.HttpSession
applicationjavax.servlet.ServletContext
configjavax.servlet.ServletConfig
exceptionjavax.servlet.ServletException
Servlet类的继承体系
ServletConfig类
  • 基本内容

    是Servlet程序的配置信息类

    ServletConfig对象是由Tomcat创建,被程序员调用的。

    ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。

  • 作用

    • 可以获取Servlet程序的别名servlet-name的值
    • 获取初始化参数init-param
    • 获取ServletContext对象
  • 常用方法

    • servletConfig.getServletName()

      获取Servlet程序的别名servlet-name的值

    • servletConfig.getInitParameter()

      获取初始化参数init-param

    • servletConfig.getServletContext()

      获取ServletContext对象

ServletContext类
  • 基本内容

    ServletContext是一个接口,它表示Servlet上下文对象;

    一个web工程,只有一个ServletContext对象实例;

    ServletContext对象是一个域对象(可以存取数据的对象,域指的是存取数据的操作范围);

    ServletContext是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

  • 作用

    • 获取web.xml中配置的上下文参数context-param
    • 获取当前的工程路径,格式: /工程路径
    • 获取工程部署后在服务器硬盘上的绝对路径;
    • 存取数据;
  • 常用方法

    • getServletConfig().getServletContext().getInitParameter()

      获取web.xml中配置的上下文参数context-param

    • getServletConfig().getServletContext().getContextPath()

      获取当前的工程路径,返回的格式为 /工程路径

    • getServletConfig().getServletContext().getRealPath("/")

      获取工程部署后在服务器硬盘上的绝对路径;

    • getServletConfig().getServletContext().setAttribute()|getServletConfig().getServletContext().getAttribute()

      存取数据;

HttpServletRequest类
  • 基本内容

    每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到 Request 对象中。

  • 作用

    获取到所有请求的信息

  • 常用方法

    • getRequestURI()

      获取请求的资源路径

    • getRequestURL()

      获取请求的统一资源定位符(绝对路径)

    • getRemoteHost()

      获取客户端的 ip 地址

    • getHeader()

      获取请求头

    • getParameter()

      获取请求的参数

      设置请求体的字符集为UTF-8解决POST请求乱码问题

      setCharacterEncoding("UTF-8")

    • getParameterValues()

      获取请求的参数(多个值的时候使用)

    • getMethod()

      获取请求的方式 GET 或 POST

    • getAttribute(key,value)

      设置域数据

    • getAttribute(key)

      获取域数据

    • getRequestDispatcher

      获取请求转发对象

      请求转发是指服务器收到请求后从一次资源跳转到另一个资源的操作

      请求转发特点:

      • 浏览器地址栏无变化
      • 转发过程中仅一次请求
      • 转发对象共享Request域中的数据
      • 可以转发到WEB-INF目录下
      • 不可以访问工程之外的资源
HttpServletResponse类
  • 基本内容

    每次请求时,Tomcat服务器会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,需要设置返回给客户端的信息,可以通过HttpServletResponse对象来进行设置

  • 作用

  • 常用方法

Listener监听器

简述
  • 基本概念

    Listener监听器它是JavaWeb的三大组件之一。JavaWeb 的三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。

    Listener是JavaEE的规范,即接口

  • 作用

    监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。

接口
  • ServletContextListener监听器

    • 可以监听 ServletContext 对象的创建和销毁

    • ServletContext对象在web工程启动的时候创建,在web工程停止的时候销毁

    • 监听到创建和销毁之后都会分别调用ServletContextListener监听器的方法反馈

    • 内置方法

      public interface ServletContextListener extends EventListener { 
          /**
          * 在ServletContext对象创建之后马上调用,做初始化 
          */
          public void contextInitialized(ServletContextEvent sce);
          /**
          * 在ServletContext对象销毁之后调用 
          */
          public void contextDestroyed(ServletContextEvent sce); 
      }
      
    • 使用

      1. 编写一个类去实现ServletContextListener

        public class MyServletContextListenerImpl implements ServletContextListener { 
            @Override 
            public void contextInitialized(ServletContextEvent sce) { 
                System.out.println("ServletContext 对象被创建了"); 
            }
            @Override public void contextDestroyed(ServletContextEvent sce) {
                System.out.println("ServletContext 对象被销毁了"); 
            } 
        }
        
      2. 实现其两个回调方法

      3. 到web.xml中去配置监听器

        <!--配置监听器--> 
        <listener> 
        	<listener-class>
            	com.atguigu.listener.MyServletContextListenerImpl
            </listener-class> 
        </listener>
        
  • HttpSessionListener监听器

  • ServletRequestListener监听器

EL和JSTL技术

EL表达式

基本内容
  • 概述

    EL(Expression Language)是表达式语言。

  • 作用

    主要是代替jsp页面中的表达式脚本,在jsp页面中进行数据的输出

  • 语法

    <body>
        <% request.setAttribute("key1","值"); %>
        表达式脚本输出key的值是: 
        <%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%>
        EL表达式输出key的值是:
        ${ key1 } 
    </body>
    

    EL表达式在输出null值的时候,输出的是空串

    jsp 表达式脚本输出null值的时候,输出的是null 字符串。

  • EL表达式搜索域数据顺序

    当四个域中都有相同的key的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出

  • EL表达式运算

    • 关系运算

      关系运算符说明范例结果
      ==eq等于${ 5 == 5 }${ 5 eq 5 }true
      !=ne不等于${ 5 != 5 }${ 5 ne 5 }false
      <lt小于${ 3 < 5 }${ 3 lt 5 }true
      >gt大于${ 2 > 5 }${ 2 gt 5 }false
      <=le小于等于${ 5 <= 12 }${ 5 le 12 }true
      >=ge大于等于${ 3 >= 5 }${ 3 ge 5 }false
    • 逻辑运算

      逻辑运算符说明范例结果
      &&and与运算${ 12==12 && 12<11 }${ 12==12 and 12<11}false
      `or`或运算
      !not取反运算${ !true }${ not true }false
    • 算术运算

      算术运算符说明范例结果
      +加法${ 12+18 }30
      -减法*{ 18-8 }10
      *乘法${ 12*12 }144
      /div除法${ 144/12 }${ 144 div 12 }12
      %mod取模${ 144%10 }${ 144 mod 10 }4
    • empty运算

      判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。

      以下几种情况为空:

      ​ 值为null值的时候,为空

      ​ 值为空串的时候,为空

      ​ 值是Object类型数组,长度为零的时候

      ​ list集合,元素个数为零

      ​ map集合,元素个数为零

    • 三元运算

      ${表达式1 ? 表达式2 : 表达式3}
      

      如果表达式1的值为真,返回表达式2的值;

      如果表达式1的值为假,返回表达式3的值。

    • 点运算

      .运算,可以输出 Bean 对象中某个属性的值

    • 中括号运算

      []运算,可以输出有序集合中某个元素的值,并且[]运算,还可以输出map集合中key里含有特殊字符的key的值。

内部对象
类型对象类型描述
JSPpageContextPageContextImpl获取当前JSP页面的信息,可以访问JSP的8个内置对象
作用域pageScopeMap<String,Object>获取页面(page)范围的属性值
requestScopeMap<String,Object>获取请求(request)范围的属性值
sessionScopeMap<String,Object>获取会话请求(session)范围的属性值
applicationScopeMap<String,Object>获取应用(application)范围的属性值
请求参数paramMap<String,String>获取单个指定请求参数的值
paramValuesMap<String,String[]>获取请求参数的所有请求参数的值数组
请求头headerMap<String,String>获取单个指定请求头信息的值
headerValuesMap<String,String[]>获取请求头信息的所有请求头的值数组
CookiecookieMap<String,Cookie>获取request中的Cookie集
初始化参数initParamMap<String,String<获取初始化参数信息
  • pageContext对象的使用

    协议–request.getScheme()pageContext.request.scheme

    服务器ip–request.getServerName()pageContext.request.serverName

    服务器端口–request.getServerPort()pageContext.request.serverPort

    获取工程路径–request.getContextPath()pageContext.request.contextPath

    获取请求方法–request.getMethod()pageContext.request.method

    获取客户端ip地址–request.getRemoteHost()pageContext.request.remoteHost

    获取会话的id编号–request.getId()pageContext.session.id

  • EL获取四个特定域中的属性

    pageScope----pageContext 域

    requestScope----Request 域

    sessionScope----Session 域

    applicationScope----ServletContext 域

访问JavaBean

JSTL标签库

基本内容
  • 概述

    JSTL(JSP Standard Tag Library)标准标签库是一个不断完善的开放源代码的JSP标签库。

  • 作用

    标签库则是为了替换代码脚本,使整个jsp页面变得更加简洁。

  • 标签库

    功能范围URIPREFIX库功能
    核心库http://java.sun.com/jsp/jstl/corec操作范围变量、流程控制、URL生成和操作
    格式化http://java.sun.com/jsp/jstl/fmtfmt数字及日期数据格式化、页面国际化
    函数http://java.sun.com/jsp/jstl/functionsfn字符串处理函数
    数据库http://java.sun.com/jsp/jstl/sqlsql操作关系数据库
    XMLhttp://java.sun.com/jsp/jstl/xmlx操作通过XML表示数据
  • 基本使用

    1. 导入jstl标签库的jar包

      下载地址:Apache Taglibs - Apache Taglibs

      taglibs-standard-impl-.jartaglibs-standard-spec-.jar

    2. 使用taglib指令引入标签库

      CORE标签库
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      XML标签库
      <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
      FMT标签库
      <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
      SQL标签库
      <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
      FUNCTIONS标签库
      <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
      
常用标签
  • 核心库

    • <c:set>标签

      用于向域中保存数据

    • <c:if>标签

      用于做if判断

    • <c:choose>标签、<c:when>标签、<c:otherwise>标签

      用于做多路判断

      <c:choose>标签开始选择判断

      <c:when>标签表示每一种判断情况

      <c:otherwise>标签表示剩下的情况

      • 注意点:
        • 标签里不能使用html注释,要使用 jsp 注释
        • when 标签的父标签一定要是choose标签
    • <c:forEach>标签

      用于遍历输出

      <c:forEach [var=""] [varStatus=""] begin="" end="" [step=""]> 
          循环内容
      </c:forEach>
      

      begin–设置开始的索引

      end–设置结束的索引

      var–表示循环的变量(也是当前正在遍历到的数据)

      <c:forEach [var=""] [varStatus=""] items=""> 
          循环内容
      </c:forEach>
      

      items表示遍历的数据源(遍历的集合)

      var表示当前遍历到的数据

标准函数

开发

JavaEE三层架构

在这里插入图片描述

项目命名规则
  • web层

    com.web/servlet/controller

  • service层

    com.service----Service接口包

    com.service.impl----Service接口实现类

  • dao持久层

    com.dao----Dao接口包

    com.dao.impl----Dao接口实现类

  • 实体bean对象

    com.pojo/entity/domain/bean----JavaBean类

  • 测试包

    com.test/junit

  • 工具类

    com.utils

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值