• jsp学习笔记


    基础语法

    脚本元素

    • 脚本代码
      <%...%>

      • <% int number=0; %>
        在脚本代码中声明的变量是局部变量,只在当前页面有效
    • 声明
      <%!...%>

      • <%! int number=0; %>
        在声明中定义的变量是全局变量,访问同一个jsp页面的用户,操作的是同一个全局变量
    • 表达式
      <%=...%>
      表达式可以是任意合法的java表达式,该表达式的值会被计算,并将结果以字符串的形式返回到页面中。
      注意:jsp表达式不是程序代码,末尾不加 ;

      • 打印乘法表
        <%@page contentType="text/html;charset=UTF-8"%>
        <html>
        <head>
        <title>expressionDemo</title>
        </head>
        <body>
        <h1>九九乘法表</h1>
        <table>
        <%for (int i=1;i<=9;i++){%>
        <tr>
        <%for (int j=1;j<=i;j++){%>
        <td><%=i%>*<%=j%>=<%=i*j%></td>
        <%}%>
        </tr>
        <%}%>
        </table>
        </body>
        </html>
    • 注释

      • <%--...--%>
        在jsp转译为java类时被忽略
      • 在jsp脚本代码中也可以使用java的注释方法,这些注释在编译时被忽略
      • 也可以使用HTML的注释语法<!--...-->,注释内容可以在浏览源代码中查看

        指令元素

        在jsp文件转译时处理,用于实现类的引入、定义jsp页面的编码格式、包含其他文件、引入新的标签库等
        <%@指令名 属性="值">
        jsp页面默认引入的几个包:java.lang、.....
    • page指令
      定义全局属性,可出现多次,但只有import属性可以在同一个jsp文件中出现多次
      属性

      • language:定义脚本代码使用的语言,默认java
      • import:定义jsp页面导入的类包
      • errorPage:当请求错误时,会被重定向的URL
      • isErrorPage:值为true时,表当前页面是一个错误处理页面
      • contentType:定义页面响应信息的MIME类型和编码方式
        • <%@page contentType="text/html;charset=UTF-8"%>
      • pageEncoding:定义页面响应信息的编码方式
    • include指令
      在当前页面中的指定位置插入另一个文件的内容,属于静态包含(先包含再转译),只编译一次
      <%@include file="url"%>url是一个相对路径

    • taglib指令

      标记元素

      实现动态文件包含、页面跳转、使用javaBean组件等
      <jsp:标记名 属性="值">
      </jsp:标记名>

    • <jsp:include>标记
      先分别转译、编译、运行,再将结果合并
      格式:
      <jsp:include page="path">
      <jsp:param name="Name1" value="Value1" />
      <jsp:param name="Name2" value="Value2" />
      </jsp:include>

    • <jsp:forward>标记
      实现页面请求的转发,(转发后,URL显示不变)
      格式:
      <jsp:forward page="path">
      <jsp:param name="name1" value="value1" />param用来在转发的同时传递参数
      </jsp:forward>

      • 比较:<jsp:forward>response.sendRedirect("")

        • <jsp:forward>请求转发,URL不变,保留第一次请求时的数据

        • response.sendRedirect("")重定向,URL改变,不保留第一次请求时的数据

    • <jsp:param>标记
      用于配合<jsp:forward>标记和<jsp:include>标记
      格式:
      <jsp:param name="name" value="value"/>

      • 在相应页面使用request.getParameter()来接收页面中<jsp:forward>标记和<jsp:include>标记传递的参数

      jsp内置对象

      • request
      • response
      • pageContext
      • session
      • application
      • out:用于向客户端输出信息
      • config:封装了jsp页面对应servlet的配置信息
      • page:jsp页面类实例
      • exception:封装了异常信息

      数据库的访问

      建立目录结构

      在tomcat的webapp下建立

      JDBC

      • 定义: JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

      • JDBC核心组件

        • DriverManager:
          此类管理数据库驱动程序列表。使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序匹配。
        • Driver:
          此接口处理与数据库服务器的通信,我们很少会直接与Driver对象进行交互。而是使用DriverManager对象来管理这种类型的对象。
        • Connection:
          该界面具有用于联系数据库的所有方法。连接对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。
        • Statement:
          使用从此接口创建的对象将SQL语句提交到数据库。除了执行存储过程之外,一些派生接口还接受参数。
        • ResultSet:
          在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。它作为一个迭代器,允许我们移动其数据。
      • SQLException:
        此类处理数据库应用程序中发生的任何错误

      数据库连接步骤

      • 导入jdbc的api:先导入java.sql包

      <%@page import="java.sql.*" %>

      • 加载驱动程序

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

      • 创建数据库的连接

      • 使用DriverManager的getConnection(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。
        //连接MySql数据库,用户名和密码都是root

        String sConnStr="jdbc:mysql://localhost:3306/newsdb";
        String username = "root" ;
        String password = "root" ;
        Connection conn = DriverManager.getConnection(sConnStr , username , password ) ;

      • 创建Statement对象

        • 要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型:
          执行静态SQL语句。通常通过Statement实例实现。
          执行动态SQL语句。通常通过PreparedStatement实例实现。
          执行数据库存储过程。通常通过CallableStatement实例实现。
          具体的实现方式:
          Statement stmt = conn.createStatement() ;
      • 执行SQL语句

        • Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute

          • ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。

            如:

          查询:String sql = "select * from user";

          ResultSet rs = stmt.executeQuery(sql);

          • int executeUpdate(String sqlString):用于执行INSERT、UPDATE、DELETE语句以及SQL DDL语句,如CREATE TABLE和DROP TABLE等

            如:

          删除:String sql = "delete from user where id="+id

          插入:String sql = "INSERT INTO user(username,password,gender,resume) "+" values('"+uname+"','"+pwd+"','"+gender+"','"+resume+"')";

          int result = stmt.executeUpdate(sql)

          • execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
      • 遍历结果集
        两种情况:

        • 执行更新返回的是本次操作影响到的记录数。

        • 执行查询返回的结果是一个ResultSet对象。

          • ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
            行中数据的访问。
        • 使用结果集(ResultSet)对象的访问方法获取数据:
          while(rs.next()){
          String name = rs.getString("name") ;
          String pass = rs.getString(1) ; // 此方法比较高效
          }
          (列是从左到右编号的,并且从列1开始)

        • 处理异常,关闭JDBC对象资源
          操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
          明顺序相反:

          • 先关闭requestSet
          • 再关闭preparedStatement
          • 最后关闭连接对象connection
            • conn.close();

    HTTP会话机制

    • 服务器端向客户端增加Cookie:response.addCookie()
    • Cookie用javax.servlet.http.Cookie类表示
    • 相关语句:
      • 获取cookie名称:getName()
      • 获取cookie值:getValue()
      • 设置最大有效期:setMaxAge(),单位是秒
    • 除了自己设定的Cookie内容外,Cookie中还会有JSESSIONID值,这是服务器自动创建的Cookie

    session

    • 客户端第一次请求服务器时,服务器产生一个session对象(用于保存该用户的信息),并且每个session对象,都会有唯一的sessionId(用于区分其他session),服务端会产生一个Cookie,并且该Cookie的JSESSIONID的值为sessionId的值,然后服务器会在响应的同时,将该Cookie发送给客户端,至此,客户端就有了一个Cookie(JSESSIONID)。因此,客户端的cookkie就可以和服务器端的session一一对应。
    • 相关语句
      • 获取session对象的属性值getAttribute()
      • 设置session对象的属性以及属性值setAttribute(name,value)
      • 获取session对象的创建时间getCreationTime(),返回1970年1月1日至今的毫秒数
      • 销毁session对象的信息,但session对象本身不被销毁invalidate()
      • 设置会话超时时间setMaxInactiveInterval()

    常见报错解决

    • 报错:java.sql.SQLException: The server time zone value ‘XXXXXX’ is unrecognized or represents more than one time zone.
      • 使用的数据库是MySQL,驱动是6.0.3,这是由于数据库和系统时区差异所造成的,在jdbc连接的url后面加上serverTimezone=GMT即可解决问题,如果需要使用gmt+8时区,需要写成GMT%2B8,否则会被解析为空。再一个解决办法就是使用低版本的MySQL jdbc驱动,5.1.28不会存在时区的问题。
    • 乱码问题,将编码设置统一即可

    jsp常用语句

    jsp页面的流程控制

    • 超链接<a href="..."></a>
    • form表单的action属性
    • 重定向sendRedirect("...")
    • 请求转发<jsp:forward page="...">

    jsp页面的数据传递

    • form表单:对应使用request.getParameter()获取表单数据
    • URL传参:如:http://123.com/name?id=1&pwd=1
    • <jsp:param>标记传参:对应使用``

    作用域

    • application:有效范围从web应用启动到结束
    • session:有效范围是当前会话
    • request:有效范围是当前请求,从发出请求到服务器处理完成请求,返回响应
    • page:有效范围是当前页面

    javabean技术

    概述

    jsp中使用javabean来传递参数和实现数据处理。javabean就是一个符合特定条件的java类,编写javabean就是创建一个java类。

    分类

    • 封装数据
    • 封装业务逻辑

    编写

    • 类公有化

      • 具有无参数的公共构造方法
    • 属性私有化

    • 具有公共的setter方法和getter方法来供外部存取其私有属性

      注:setter方法和getter方法的命名规则是相应属性名的第一个字母大写后,与setter或getter连写,如:username的getter方法应该是getUsername。另外javabean要放在命名包里,不能放在默认包中

      如:

      package bean;
      public class Counter{
          private int counter=0;
          public String getCounter(){
            counter++;
              return ""+counter;
        }
      }
      
    • 使用javabean

      • <jsp:useBean>可以在 JSP 中声明一个 JavaBean,然后使用。声明后,JavaBean 对象就成了脚本变量,可以通过脚本元素或其他自定义标签来访问

        • <jsp:useBean id="id" class="package.class" scope="page|request|session|application"/>
        • 功能:在指定scope范围内查找该javabean对象,如果存在则返回给id变量,否则实例化该对象,并将引用赋值给id变量
        • 说明:id属性表示创建的对象的名字,class属性指定javabean的完整类名,scope属性指定所创建的对象的作用范围,默认值是page
      • <jsp:setProperty>为javabean的一个或多个属性赋值,实际是调用javabean对象的setter方法来实现赋值,使用时,要先用<jsp:useBean>获得一个对象

        • 自动匹配赋值<jsp:setProperty name="beanName" property="*" />

          name指出javabean对象的名字,其值与usebean标签的id对应,property指出javabean对象的属性名,*表示匹配所有属性

        • 自动匹配指定属性<jsp:setProperty name="beanName" property="beanPropertyName" />

        • 手动设置属性:<jsp:setProperty name="beanName" property="beanPropertyName" value="value"/>

        • 手动指定request参数名赋值:<jsp:setProperty name="beanName" property="beanPropertyName" param="requestParamName"/>

          param指定用哪个request对象的参数作为javabean属性的值,适用于javabean属性名和request参数名不同的情况

      • <jsp:getProperty>用于从某个scope范围内获取指定属性的值,并显示在jsp页面中

        • <jsp:getProperty name="beanName" property="beanPropertyName"/>
  • 相关阅读:
    Nginx(ab性能测试)
    Nginx(配置域名后,不能配置到public目录原因)
    sublime text3的php代码合法检查
    Nginx(expires 缓存减轻服务端压力)
    Nginx(Gzip加速访问速度)
    Nginx(Rewrite语法)
    Nginx(location分析)
    Nginx(日志切割)
    Nginx(Logs)
    Java内部类——闭包与回调
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/14134849.html
Copyright © 2020-2023  润新知