目录
一.session与application
储存:
服务器:session 会话级储存
客户端:cookie
application 应用级储存(共享的)
我们主要讲session和application的区别,为了更好的理解我们来写一个计算在线人数的代码。
我在之前的新闻系统的处理登陆的代码判断结果集的地方添加如下代码
再去首页代码中添加如下代码
每登陆一次人数就加一次,重开一个浏览器登陆人数也加一,但是如果将application换成session重开浏览器登陆人数不会增加。
所以得出结论application储存在项目里是共享的,session储存是私密的。
二.封装
首先选中src文件下的main文件中的Java文件,一般有两个地方
选中java文件鼠标右键,新建一个包。如果右键没有新建包,就按图片操作
建好后,再按照图片操作新建一个类(class),注意类名首字母大写。建三个包(util,pojo,dao),在每个包分别建DBHelper类,News类,NewsDao类
DBHelper类代码:
package com.zking.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.OracleDriver;
public class DBHelper {
//加载驱动
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
//定义链接字符串
private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
//获得链接
public static Connection getCon() {
try {
return DriverManager.getConnection(URL,"scott","sa123");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//关闭资源
public static void close(Connection con,PreparedStatement ps,ResultSet rs) {
try {
if(!con.isClosed()) {
con.close();
}
ps.close();
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
News类代码:
package com.zking.pojo;
import java.io.Serializable;
public class News implements Serializable{
private int NEWS_ID;
private String NEWS_TITLE;
private int NEWS_TOPIC;
private String NEWS_AUTHOR;
private String NEWS_PUBLISHER;
private String NEWS_CONTENT;
private int NEWS_COUNT;
private int NEWS_MARKER;
public int getNEWS_ID() {
return NEWS_ID;
}
public void setNEWS_ID(int nEWS_ID) {
NEWS_ID = nEWS_ID;
}
public String getNEWS_TITLE() {
return NEWS_TITLE;
}
public void setNEWS_TITLE(String nEWS_TITLE) {
NEWS_TITLE = nEWS_TITLE;
}
public int getNEWS_TOPIC() {
return NEWS_TOPIC;
}
public void setNEWS_TOPIC(int nEWS_TOPIC) {
NEWS_TOPIC = nEWS_TOPIC;
}
public String getNEWS_AUTHOR() {
return NEWS_AUTHOR;
}
public void setNEWS_AUTHOR(String nEWS_AUTHOR) {
NEWS_AUTHOR = nEWS_AUTHOR;
}
public String getNEWS_PUBLISHER() {
return NEWS_PUBLISHER;
}
public void setNEWS_PUBLISHER(String nEWS_PUBLISHER) {
NEWS_PUBLISHER = nEWS_PUBLISHER;
}
public String getNEWS_CONTENT() {
return NEWS_CONTENT;
}
public void setNEWS_CONTENT(String nEWS_CONTENT) {
NEWS_CONTENT = nEWS_CONTENT;
}
public int getNEWS_COUNT() {
return NEWS_COUNT;
}
public void setNEWS_COUNT(int nEWS_COUNT) {
NEWS_COUNT = nEWS_COUNT;
}
public int getNEWS_MARKER() {
return NEWS_MARKER;
}
public void setNEWS_MARKER(int nEWS_MARKER) {
NEWS_MARKER = nEWS_MARKER;
}
@Override
public String toString() {
return "News [NEWS_ID=" + NEWS_ID + ", NEWS_TITLE=" + NEWS_TITLE + ", NEWS_TOPIC=" + NEWS_TOPIC
+ ", NEWS_AUTHOR=" + NEWS_AUTHOR + ", NEWS_PUBLISHER=" + NEWS_PUBLISHER + ", NEWS_CONTENT="
+ NEWS_CONTENT + ", NEWS_COUNT=" + NEWS_COUNT + ", NEWS_MARKER=" + NEWS_MARKER + "]";
}
public News(int nEWS_ID, String nEWS_TITLE, int nEWS_TOPIC, String nEWS_AUTHOR, String nEWS_PUBLISHER,
String nEWS_CONTENT, int nEWS_COUNT, int nEWS_MARKER) {
super();
NEWS_ID = nEWS_ID;
NEWS_TITLE = nEWS_TITLE;
NEWS_TOPIC = nEWS_TOPIC;
NEWS_AUTHOR = nEWS_AUTHOR;
NEWS_PUBLISHER = nEWS_PUBLISHER;
NEWS_CONTENT = nEWS_CONTENT;
NEWS_COUNT = nEWS_COUNT;
NEWS_MARKER = nEWS_MARKER;
}
public News() {
}
}
NewsDao类代码:
package com.zking.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.zking.pojo.News;
import com.zking.util.DBHelper;
public class NewsDao {
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
public List<News> queryByName(String newName) {
List<News> list = new ArrayList<News>();
try {
con=DBHelper.getCon();
ps=con.prepareStatement("select * from t_news where news_title like ?");
//设置占位符
ps.setString(1, "%"+newName+"%");
//得到结果集
rs = ps.executeQuery();
while(rs.next()) {
News news=new News();
//给新闻对象属性赋值
news.setNEWS_ID(rs.getInt(1));
news.setNEWS_TITLE(rs.getString(2));
news.setNEWS_TOPIC(rs.getInt(3));
news.setNEWS_AUTHOR(rs.getString(4));
news.setNEWS_PUBLISHER(rs.getString(5));
news.setNEWS_CONTENT(rs.getString(6));
news.setNEWS_COUNT(rs.getInt(7));
news.setNEWS_MARKER(rs.getInt(8));
//将新闻对象添加到集合中
list.add(news);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.close(con, ps, rs);
}
return list;
}
}
登陆处理代码:
<%@page import="oracle.jdbc.driver.OracleDriver" %>
<%@page import="com.zking.util.DBHelper"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page import="java.util.Arrays" %>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%
String yh = request.getParameter("yh");
String mm = request.getParameter("mm");
try {
Connection con = DBHelper.getCon();
//获得执行对象
PreparedStatement ps = con.prepareStatement("select * from t_user where user_name=? and user_pwd=?");
ps.setString(1, yh);
ps.setString(2, mm);
//获得结果集
ResultSet rs = ps.executeQuery();
//判断结果
if (rs.next()) {
//将用户名存入服务器的session中
//session.setAttribute("username",yh);//存到后台
//cookie的值每次发送请求的时候会被自动带上
//cookie默认是在你当前浏览器打开的过程中生效
Cookie cookie01=new Cookie("yh",yh);
//设置存活时间 s
//-1 是在你当前浏览器打开的过程中生效
cookie01.setMaxAge(60*60*24*7);
Cookie cookie02=new Cookie("mm",mm);
cookie02.setMaxAge(60*60*24*7);
//存到前台
response.addCookie(cookie01);
response.addCookie(cookie02);
// localhost:8080/当前项目/news/index.jsp
//request.getRequestDispatcher("/news/index.jsp").forward(request, response);
response.sendRedirect("news/index.jsp");
} else {
//重定向 客户端
response.sendRedirect("login.jsp");
}
//资源关闭
DBHelper.close(con, ps, rs);
} catch (Exception e) {
e.printStackTrace();
}
%>
首页代码:
<%@page import="com.zking.dao.NewsDao"%>
<%@page import="com.zking.pojo.News"%>
<%@page import="java.nio.charset.StandardCharsets"%>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>bootstrap</title>
<meta content="width=device-width, initial-scale=1" name="viewport">
<link href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css" rel="stylesheet">
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
<script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
<style>
* {
outline: none !important;
}
body,
html {
background: #7f8d90;
}
nav,
.breadcrumb {
border-radius: 0px !important;
margin-bottom: 0px !important;
}
.breadcrumb {
margin-bottom: 20px !important;
background: #36485c;
color: white;
}
li h4 {
width: 300px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.breadcrumb .active {
color: yellow;
}
</style>
</head>
<body>
<%--include 包含 --%>
<%@include file="top.jsp" %>
<ol class="breadcrumb">
<li>您当前的位置是</li>
<li>新闻发布系统</li>
<li class="active">首页</li>
</ol>
<form action="${pageContext.request.contextPath}/news/index.jsp" class="form-inline" style="margin: 0 auto 20px;" >
<div class="form-group" style="display: block;text-align: center;">
<div class="input-group">
<div class="input-group-addon">新闻标题</div>
<input name="newName" class="form-control" placeholder="请在此输入搜索的关键字" type="text">
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">搜索🔍</button>
</span>
</div>
</div>
</form>
<div class="container">
<ul class="list-group">
<%
//点击表单后,跳转当前页面同时携带查询关键字
String newName=request.getParameter("newName");
if(newName==null){
newName="";//查询所有
}
for (News news : new NewsDao().queryByName(newName)){
%>
<li class="list-group-item">
<h4 class="list-group-item-heading">
<a href="${pageContext.request.contextPath}/news/read.jsp?newId=<%=news.getNEWS_ID() %>" data-placement="bottom" data-toggle="tooltip" >
<%=news.getNEWS_TITLE()%>
</a>
</h4>
<p class="list-group-item-text text-right">
<span class="glyphicon glyphicon-user"><code><%=news.getNEWS_AUTHOR()%></code></span>
<span class="glyphicon glyphicon-eye-open"><code><%=news.getNEWS_COUNT()%></code></span>
<span class="glyphicon glyphicon-tag"><code><%=news.getNEWS_MARKER()%></code></span>
<span class="glyphicon glyphicon-time"><code><%=news.getNEWS_PUBLISHER()%></code></span>
</p>
</li>
<%
}
%>
</ul>
</div>
<div class="container text-center">
<ul class="pagination" style="margin: 20px auto;">
<li>
<a href="#"><span>«</span></a>
</li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li>
<a href="#"><span>»</span></a>
</li>
</ul>
</div>
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip({
trigger: "hover"
})
})
</script>
</body>
</html>
top.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<nav class="navbar navbar-default hidden-sm hidden-xs">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="${pageContext.request.contextPath}/news/index.jsp"
style="font-size: 25px;">♥</a>
</div>
<ul class="nav navbar-nav">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown"> 新闻管理<span class="caret"></span> </a>
<ul class="dropdown-menu">
<li><a href="${pageContext.request.contextPath}/news/add.jsp">新闻发布</a></li>
<li class="divider"></li>
<li><a href="#">类别管理</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a><%=session.getAttribute("username") %></a></li>
<li><a href="${pageContext.request.contextPath}/news/history.jsp">历史记录</a></li>
<li><a href="doExit.jsp">退出<span class="glyphicon glyphicon-off"></span></a></li>
</ul>
</div>
</nav>
我这里只封装了首页和登陆的代码,其他的封装方法是一样的我就不详细写了。好了今天的就到处结束了,我们下一次再见,拜拜ヽ(✿゚▽゚)ノ。