[学习笔记] JSP/Servlet技术之JSP数据交互(二)

# 学习 # · 2020-09-14

JSP内置对象之application

1、application对象:类似于系统中的全局变量,用于同一个应用内的所有用户之间的数据共享。

2、application对象常用的方法:

<%
void setAttribute(String key,Object Value);        //将对象储存到application中
Object getAttribute(String key);    //通过Key获取application中储存的对象
String getRealPath(String Path);    //返回相对路径的真实地址
%>

3、application对象常用方法实例:

<%
Integer count = (Integer)application.getAttribute("count");
if(count != null) {
    count = count + 1;
} else {
    count = 1;
}
application.setAttribute("count",count);
%>

对象的作用域

1、四个域对象:page域、request域、session域、application域。

2、域对象作用:保存数据和获取数据,用于数据共享。

3、域对象方法:

setAttribute(key,Object);    //保存数据
getAttribute(key);        //获取数据
removeAttribute(key);    //清除数据

4、域对象作用范围:

(1)page域: 只能在当前jsp页面中使用(当前页面)

(2)request域: 只能在同一个请求中使用(转发)

(3)session域: 只能在同一个会话(session对象)中使用(私有的)

(4)application域: 只能在同一个web应用中使用。(全局的)


cookie

1、cookie:最常用的跟踪用户会话的方式。是Web服务器保存在客户端的一系列文本信息。

2、cookie的作用:对特定对象的追踪、实现各种个性化服务、简化登录,但容易泄露信息。

3、创建cookie对象:

Cookie newck = new Cookie(String name, String value);

4、写入cookie:

response.addCookie(newck);

5、cookie对象常用的方法:

void setMaxAge(int expirt);        //设置cookie的有效期,以秒为单位
int getMaxAge();    //获取cookie的有效时间
void setValue(String value);    //在cookie创建之后为cookie赋予新的值
String getName();    //获取cookie的名称
String getValue();    //获取cookie的值

6、读取cookie:

Cookie[] cks = request.getCookies();

在JSP中访问数据库

1、JDBC连接数据库的步骤:加载JDBC驱动、与数据库建立连接、发送SQL语句、处理返回结果、释放资源。

2、使用步骤:

(1)将MySQL的驱动包添加到项目/WEB-INF/lib目录下

(2)数据访问层:在数据库连接和关闭工具类BaseDao中封装增删改查操作。DAO模式学习传送门

package web;

import java.sql.*;

public class BaseDao {
    // 数据库驱动字符串
    private String driver = "com.mysql.jdbc.Driver";
    // 连接URL字符串
    private String url = "jdbc:mysql://localhost:3306/table";
    // 数据库用户名
    private String user = "root";
    // 用户密码
    private String password = "123456";
    // 数据连接对象
    Connection conn = null;

    /**
     * 获取数据库连接对象
     */
    public Connection getConnection() {
        if(conn==null) {
            //获取连接并捕获异常
            try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url, user, password);
            } catch (Exception e) {
                e.printStackTrace();    // 异常处理
            }
        }
        return conn;    // 返回连接对象
    }

    /**
     * 关闭数据库连接
     * @param conn 数据库连接
     * @param stmt Statement对象
     * @param rs 结果集
     */
    public void closeAll(Connection conn,Statement stmt,ResultSet rs) {
        // 若结果集对象不为空,则关闭
        if (rs != null) {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 若Statement对象不为空,则关闭
        if (stmt != null) {
            try {
                stmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 若数据库连接对象不为空,则关闭
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     /**
     * 增、删、改操作的通用方法
     * @param sql 预编译的 SQL 语句
     * @param param 参数的字符串数组
     * @return 影响的行数
     */
    public int executeUpdate (String preparedSql, Object[] param) {
        PreparedStatement pstsm = null;
        int result = 0;
        conn =  getConnection();
        try {
            pstsm = conn.prepareStatement(preparedSql);
            if (param != null) {
                for (int i = 0; i < param.length; i++) {
                    //为预编译sql设置参数
                    pstsm.setObject(i + 1, param[i]);
                }
            }
            result = pstsm.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            closeAll(conn,pstsm,null);
        }
        return result;
    }

    /**
     * 查询通用方法
     * @param sql
     * @param params
     * @return
     */
    public ResultSet executeQuery(String sql, Object[] params) {
        conn =  getConnection();
        PreparedStatement pstsm = null;
        ResultSet rs = null;
        try {
            pstsm = conn.prepareStatement(sql);
            for(int i = 0; i < params.length; i++) {
                pstsm.setObject(i + 1, params[i]);
            }
            rs = pstsm.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            closeAll(conn,pstsm,rs);
        }
        return rs;
    }
}

(3)表示层:编写JSP页面代码。

<%@ page import="org.news.dao.impl.userimpl" %>

在JSP中使用JavaBean

1、JavaBean:是Java中开发的可以跨平台的重用组件。在JSP程序中常用于封装业务逻辑、数据库操作等。

2、封装数据的JavaBean:

public class Comment {
    //将属性声明为私有属性
    private String cid;    // 用户名
    private String cnid;    // 邮编
    private String ccontent;    // 电话

    //无参的公有构造方法
    public Comment () {}

    //公有的设置属性值方法setXxx()
    public void setCid(String cid) {
        this. cid= cid;
    }

    //公有的获取属性值方法getXxx()
    public String getCid() {
            return cid;
    }
}

3、在JSP页面中导入JavaBean:

//引入JavaBean
<%@ page import="org.news.bean.*" %>

//使用JavaBean
<%
    Comment c = new Comment();
    c.setCid(1014);
    c.getCauthor();
%>
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/111/

评论