目录
相同点:①都是用来保持用户状态的一种机制②都会过期(生存期限)
回顾上一章内容:
session与Cookie对比?
相同点:①都是用来保持用户状态的一种机制②都会过期(生存期限)
不同点:
session Cookie 在服务器端保存用户信息 在客户端保存用户信息 session中保存的是Object类型 Cookie保存的是String类型 随会话的结束而将其存储的数据销毁 Cookie可以长期保存在客户端 保存重要的信息 保存不重要的用户信息
本章内容:
application与session、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的方法演示-----建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简介
②JavaBean设计原则
③Jsp中如何使用Javabean
④<jsp:useBeans>
⑤<jsp:getProperty>
⑥<jsp:setProperty>
⑦Javabean的四个作用域范围JavaBean简介及设计原则
【JavaBean简介】符合某种特定的规范的Java类,使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。【Javabean的设计原则】①公有类②无参的公有的构造方法③属性私有化④get和set方法封装
--举例:Student(entity实体类)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; }
什么是jsp动作?
jsp动作元素(action elements),
动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,
有一个包含元素名的开始标签,可以有属性,可选的内 容、与开始标签匹配的结束标签。关于JavaBean的jsp动作
<jsp:useBean>、<jsp:getProperty>、<jsp:setProperty>
在jsp页面中如何使用Javabeans
①使用普通的java类一样,创建javabean实例。--案例实现登录
第一步:在src中编写com.entity包再编写User类,并遵循javabean设计原则
第二步:在dologin.jsp页面中实例化Users类并设置值与login.jsp页面输入的信息比较,匹配成功登录admin.jsp
②在jsp页面中通常使用jsp动作标签使用javabean:useBean、getProperty、setProperty
**<jsp:useBean> 在jsp页面中实例化或者在指定范围内使用javabean,语法如下:
<jsp:useBean id = "标识符" class = "java类名" scope = "作用范围"/>
第一步:在页面编写:
<jsp:useBean id = "myUsers" class = "com.entity.Users" scope = "page">
第二步:获取
<%=myUsers.getUsername%>//null值,没有初始化③<jsp:setProperty> 给已经实例化的Javabean对象的属性赋值,一共有四种形式。
** <jsp:setProperty name = "JavaBean实例名" property = "*" />(跟表单关联)
** <jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" />(跟表单关联)
** <jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value= "BeanValue" />(手工设置)
** <jsp:setProperty name = "JavaBean实例名" property = "propertyName" param = "request对象中的参数名" />(跟request参数关联)案例演示:
<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>