application的使用
session与Cookie对比
相同点:①都是用来保持用户状态的一种机制②都会过期(生存期限)
不同点:
session Cookie
在服务器端保存用户信息 在客户端保存用户信息
session中保存的是Object类型 Cookie保存的是String类型
随会话的结束而将其存储的数据销毁 Cookie可以长期保存在客户端
保存重要的信息 保存不重要的用户信息
==================================================================
session和Cookie跨页面,application跨用户。---
application与session和Cookie的本意是一样的 都是用保存信息
最大的区别 保存的范围
一、application对象
1.application对象实现用户间数据的共享,可存放全局变量。
2.application开始于服务器的启动,终止于服务器的关闭。
3.在用户的前后连接或不同用户之间的连接中,可以对application对象的统一属性进行操作。
4.在任何地方对application对象属性的操作,都将影响到其它用户对此的访问
5.服务器的启动和关闭决定了application对象的生命
6.application对象是ServletContext类的实例
【总结】application(应用对象):存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行过程中,application对象只有一个
-------request、session以及application这3个对象的范围是逐个增加的:request只在一个请求的范围内,session是在浏览器窗口的范围内。application则是在整个服务器运行过程中。
=========================================================
二、application对象常用的方法
public void setAttribute(String name,Object value):使用指定名称将对象绑定此会话。
public Object getAttribute(String name):返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。
Enumeration getAttributeNames():返回所有可用属性名的枚举
String getServerInfo():返回jsp(servlet)引擎及版本号
案例
application的方法演示-----建application.jsp页面
<!-- 使用application对象setAttribute()保存信息 -->
<%
application.setAttribute("city","长沙市");//所在城市
application.setAttribute("postCode","410000");//邮编号码
application.setAttribute("email","15084961293@163.com");//邮箱
%><br/>
<!-- 使用application对象getAttribute()保存信息 -->
所在城市:<%=application.getAttribute("city") %><br/>
<!-- 使用application对象getAttributeNames()获取所有属性包括系统内置属性 -->
application对象中的属性有:<%
Enumeration<String> attributes = application.getAttributeNames();
//遍历枚举
while(attributes.hasMoreElements()){//如果存在下一条数据
out.println(attributes.nextElement()+"<br/>");
}
%><br/>
JSP(SERVLET)引擎名及版本号:<%=application.getServerInfo() %>
application实现统计网站访客
<!-- 使用application实现统计网站访客 -->
<%
//判断application对象中有没有保存为count的参数
//如果没有,在application对象中新增一个名为count的参数
if(application.getAttribute("count")!=null){
application.setAttribute("count",new Integer(0));
}
使用application对象读取count参数的值,再在原值基础上累加1
Integer count = (Integer)application.getAttribute("count");
application.setAttribute("count", new Integer(count.intValue()+1));
%>
欢迎,您是第:<%=application.getAttribute("count") %>位访问者
javabean封装的使用
概念:
【JavaBean简介】符合某种特定的规范的Java类,使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。
【Javabean的设计原则】①公有类②无参的公有的构造方法③属性私有化④get和set方法封装
--举例:Student
实体类
public class Student{
private String name;
//无参构造方法
public Student(){}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
数据库帮助类
package com.zking.news.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* 数据库帮助类
*
* @author Administrator
*
*/
public class DBHelper {
private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
// 1.加载驱动 静态代码块进行封装 优先级别最高(静态代码块>普通代码块>构造函数)
static {
try {
// OracleDriver
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
// 2.建立数据库连接
public static Connection getConn() {
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, "scott", "123");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) {
// System.out.println(DBHelper.getConn());
}
// 3.关闭服务
/**
* 方法功能:数据库服务关闭
*
* @param conn
* 连接对象
* @param ps
* 执行对象
* @param rs
* 结果集对象
*/
public static void myClose(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (null != conn && !conn.isClosed()) {
conn.close();
}
if (null != ps) {
ps.close();
}
if (null != rs) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
增删改查通用Dao方法 BaseDao
package com.zking.news.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseDao {
//protected 访问控制符 受保护的
protected Connection conn =null;
protected PreparedStatement ps = null;
protected ResultSet rs = null;
/**
* 方法功能:通用增删改方法
*/
public int executeUpdate(String sql,Object...x) {
int n = 0;
try {
// a.获取数据库连接
conn = DBHelper.getConn();
// b.sql传入方法返回执行对象
ps = conn.prepareStatement(sql);
//新增的sql语句 有占位符
if(null!=x) {
//拿到可变参数中的2个值
for(int i = 0;i<x.length;i++) {
//System.out.println(x[i]);
ps.setObject(i+1, x[i]);
}
}
n = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(conn, ps, null);
}
return n;
}
/**
* 方法功能:通用查询 查询所有 查询一个 模糊查询
*/
public ResultSet executeQuery(String sql,Object...x) {
int n = 0;
try {
// a.获取数据库连接
conn = DBHelper.getConn();
// b.sql传入方法返回执行对象
ps = conn.prepareStatement(sql);
//新增的sql语句 有占位符
if(null!=x) {
//拿到可变参数中的2个值
for(int i = 0;i<x.length;i++) {
//System.out.println(x[i]);
ps.setObject(i+1, x[i]);
}
}
rs = ps.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}finally {
//不能关闭 通用的查询base方法 不能实现数据库关闭
//DBHelper.myClose(conn, ps, null);
}
return rs;
}
}
调用案例
删除案例
public int deleteUsersById(int userid) {
return this.executeUpdate("delete from tb_t281_news_users where userid = ?", new Object[] { userid });
}
//查询案例
@Override
public List<Users> queryUserAll() {
Users u = null;// 实体对象
List<Users> list = new ArrayList<Users>();
String sql = "select * from tb_t281_news_users";
ResultSet rs = this.executeQuery(sql);
try {
while (rs.next()) {
u = new Users(rs.getInt("userid"), rs.getString("username"), rs.getString("password"),
rs.getString("usex"), rs.getString("uaddress"), rs.getString("utelphone"), rs.getInt("urole"),
rs.getString("udate"));
list.add(u);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBHelper.myClose(conn, ps, rs);
}
return list;
}
调用案例
删除案例
public int deleteUsersById(int userid) {
return this.executeUpdate("delete from tb_t281_news_users where userid = ?", new Object[] { userid });
}
//查询案例
@Override
public List<Users> queryUserAll() {
Users u = null;// 实体对象
List<Users> list = new ArrayList<Users>();
String sql = "select * from tb_t281_news_users";
ResultSet rs = this.executeQuery(sql);
try {
while (rs.next()) {
u = new Users(rs.getInt("userid"), rs.getString("username"), rs.getString("password"),
rs.getString("usex"), rs.getString("uaddress"), rs.getString("utelphone"), rs.getInt("urole"),
rs.getString("udate"));
list.add(u);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBHelper.myClose(conn, ps, rs);
}
return list;
}
jsp动作
jsp动作元素(action elements),动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,
有一个包含元素名的开始标签,可以有属性,可选的内 容、与开始标签匹配的结束标签。
案例:
<h1>系统登录</h1>
<hr>
<form name="loginForm" action="dologin.jsp?mypass=999999" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value=""/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value=""/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登录"/></td>
</tr>
</table>
</form>
获取界面
<jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
<h1>setProperty动作元素</h1>
<hr>
<!--根据表单自动匹配所有的属性 -->
<%--
<jsp:setProperty name="myUsers" property="*"/>
--%>
<!--根据表单匹配所有部分的属性 -->
<%--
<jsp:setProperty name="myUsers" property="username"/>
--%>
<!--根表单无关,通过手工赋值给属性 -->
<%--
<jsp:setProperty name="myUsers" property="username" value="lisi"/>
<jsp:setProperty name="myUsers" property="password" value="888888"/>
--%>
<!--通过URL传参数给属性赋值 -->
<jsp:setProperty name="myUsers" property="username"/>
<jsp:setProperty name="myUsers" property="password" param="mypass"/>
<!-- 使用传统的表达式方式来获取用户名和密码 -->
<%--
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
--%>
<!-- 使用getProperty方式来获取用户名和密码 -->
用户名:<jsp:getProperty name="myUsers" property="username"/> <br>
密码:<jsp:getProperty name="myUsers" property="password"/><br>