java web application對象

1.application對象的作用
application類似系統的"全局變量",用於實現用戶之間的數據共享.

2.application對象的常用方法
1.void setAttribute(String key, Object value):以鍵/值的方式,將一個對象的值存放到application中
2.Object getAttribute(String key):根據鍵去獲取application中存放對象的值

3.統計網站訪問人數
(1)創建Web項目Application
在這裏插入圖片描述
(2)創建WEB-INF創建lib目錄,添加數據驅動程序jar包
在這裏插入圖片描述
(3)在web目錄裏修改index.jsp內容
在這裏插入圖片描述
(4)在web目錄裏面創建登錄頁面login.jsp
在這裏插入圖片描述
(5)數據庫內容
在這裏插入圖片描述

(4).在src裏創建net.ysy.bean,創建實體類User
在這裏插入圖片描述
(6)在src裏面創建net.ysy.dbutil包,在裏面創建ConnectionManager類
在這裏插入圖片描述
如下代碼:

package net.ysy.bean.dbutil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/*
功能:數據連接管理類
作者:ysy
 */
public class ConnectionManager {
    //定義數據庫連接
    private static final String DRIVER="com.mysql.jdbc.Driver";
    private static final String URL="jdbc:mysql://localhost:3306/ysy";
    private static final String USER="root";
    private static final String PASSWORD="你的密碼";

    /*
    私有構造方法,拒絕實例化
     */
    private ConnectionManager(){
        /*
        獲取數據庫靜態方法
        @return 數據量連接
         */
    }
        public static Connection getConnection(){
            //聲明數據庫連接
            Connection connection=null;
            try{
                //安裝數據庫驅動程序
                Class.forName(DRIVER);
                //獲取數據庫連接
                connection= DriverManager.getConnection(URL,USER,PASSWORD);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
        /*
        關閉數據庫連接靜態方法

        @param conn數據庫連接
         */
        public static void closeConn(Connection connection){
            if (connection != null){
                try {
                    if (!connection.isClosed()){
                          connection.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }


}

(7)在net.ysy.dap裏創建impl子包,在裏面創建用戶數據訪問接口實現類UserDaoImpl.
這裏穿插一個問題,如果想要包以一級一級的顯示,那麼這樣,在那樣.(去掉對勾)
在這裏插入圖片描述
在這裏插入圖片描述
(8)在net.ysy.dao裏創建Impl子包,在裏面創建用戶數據訪問接口實現類UserDaoImpl.
在這裏插入圖片描述

package net.ysy.bean.dao;

import net.ysy.bean.dao.Impl.UserDao;
import net.ysy.bean.dbutil.ConnectionManager;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDaoImpl implements UserDao {
    @Override
    public boolean login(String username, String password) {
       //定義標識變量
        boolean flag=false;
        //獲取數據庫連接
        Connection connection= ConnectionManager.getConnection();
        //定義SQL字符串
        String strSQL="select * from user where username =? and password =?";
        try{
            //創建預備語句對象
            PreparedStatement pstmt =connection.prepareStatement(strSQL);
            //設置佔位符的值
            pstmt.setString(1,username);
            pstmt.setString(2,password);
            //執行SQL查詢,返回結果集
            ResultSet rs=pstmt.executeQuery();
            //判斷結果集是否有記錄
            if (rs.next()){
                flag=true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            ConnectionManager.closeConn(connection);
        }
        return flag;
    }
}

(9)在web目錄裏面創建登錄處理頁面do_login.jsp

<%@ page import="java.sql.Connection" %>
<%@ page import="net.ysy.bean.dao.Impl.UserDao" %>
<%@ page import="net.ysy.bean.dao.UserDaoImpl" %>
<%@ page import="net.ysy.bean.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.net.URLEncoder" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2020/4/3
  Time: 17:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登錄處理頁面</title>
</head>
<body>
<%
    //設置請求對象字符編碼
    request.setCharacterEncoding("utf-8");
    //獲取表單提交的數據
    String username=request.getParameter("username");
    String password=request.getParameter("password");

    //創建用戶數據的訪問對象
    UserDao userDao=new UserDaoImpl();
    //判斷用戶是否登錄成功
    if (userDao.login(username,password)){
        //創建登錄用戶對象
        User loginUser=new User();
        //設置用戶對象屬性
        loginUser.setUsername(username);
        loginUser.setPassword(password);
        //創建登錄用戶列表對象
        List<User> loginUsers=new ArrayList<>();
        //判斷application裏面是否有登錄用戶列表屬性
        if (application.getAttribute("LOGINED_USERS")==null){
            //在application裏添加登錄用戶列表屬性
            application.setAttribute("LOGINED_USERS",loginUsers);
        }else {
            //從application裏面獲取登錄用戶列表信息
            loginUsers= (List<User>) application.getAttribute("LOGINED_USERS");
        }
        //將當前登錄成功的用戶信息添加到登錄用戶列表裏
        loginUsers.add(loginUser);
        //更新application裏登錄用戶列表屬性值
        application.setAttribute("LOGINED_USERS",loginUsers);
        //清除session裏errMsg屬性
        if (session.getAttribute("errMsg")!=null){
            session.removeAttribute("errMsg");
        }
        //採用重定向跳轉到登錄成功頁面
        response.sendRedirect("sucess.jsp?username="+ URLEncoder.encode(username,"utf-8"));
    }else {
        //創建session屬性errMsg
        session.setAttribute("errMsg","用戶名和密碼錯誤,請重新登錄!");
        //採用重定向,跳轉到登錄頁面
        response.sendRedirect("login.jsp");
    }
%>

</body>
</html>

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章