一、application
(1)概述
application对象为多个应用程序保存信息,对于一个容器而言每个用户都共同使用一个application,这和session对象是不一样的。服务器启动后,就会自动创建application对象,这个对象一直会保持,直到服务器关闭为止。
(2)常用方法
getAttribute(String name)
返回有name指定的名字的application对象的属性的值
setAttribute(String name,Object object)
设置有name指定名字的application对象的属性的值object
Enumeration getAttributeNames()
返回所有可用属性名的枚举
getServerInfo():返回jsp(servlet)
引擎及版本号
(3)经典案例
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
1 . 概述
(1)javabean是一种组件技术
(2)javabean技术有助于将JSP页面中的处理业务的逻辑代码与展示页面效果的显示代码分离
(3)JavaBean就是一个普通的java类,也称之为简单java对象–POJO(Plain Ordinary Java Object),是Java程序设计中一种设计模式,是一种基于 Java 平台的软件组件思想
(4)web中的javabean开发模式---DAO模式一样的
2. javabean规则
(1)有无参的构造函数
(2)成员属性私有化
(3)封装的属性如果需要被外所操作,必须编写public类型的setter、getter方法
3. 为什么需要使用Javabean?
——>使用javaBean的好处就是:封装,重用,可读!
4. javabean优点
(1)减少代码冗余,相同功能的代码不必重复编写。
(2)功能区分明确,相同功能写在一个类中。相似功能放在同一个包中
(3)提高代码的可维护性
5. javabean分类
(1)封装数据
(2)封装业务逻辑案例(登录方法):
(1)先建包建表
(2)先在dao包的接口类里自定义方法
package com.zking.news.dao; import com.zking.news.entity.Users; /** * 用户模块的DAO接口 * @author Administrator * */ public interface IUsersDao { /** * 登录操作 */ public Users adminUsersLogin(Users users); /** * 注册功能 */ public int addUsersLogin(Users users); /** * 修改密码功能 */ public int setUsersPassword(Users users,String newPassword); }
(3)在impl文件中建类实现接口重写方法
package com.zking.news.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.zking.news.dao.IUsersDao; import com.zking.news.entity.Users; import com.zking.news.utils.DBHelper; /** * 用户模块的DAO接口 * @author Administrator * */ public class UsersDaoImpl implements IUsersDao{ @Override public Users adminUsersLogin(Users users) { //1.定义所需的对象及变量 Connection conn = null; PreparedStatement ps =null; ResultSet rs = null; String sql = "select * from tb_news_users where username = ? and password = ?"; Users u = null; //2.赋值 try { //获取数据库连接 conn = DBHelper.getConn(); //将定义的sql语句传入方法返回执行对象 ps = conn.prepareStatement(sql); //给占位符赋值 ps.setString(1, users.getUsername()); ps.setString(2, users.getPassword()); //返回结果集对象 rs = ps.executeQuery(); //判断 if(rs.next()) { u = new Users(rs.getInt("userid"), rs.getString("username"), rs.getString("password"), rs.getString("sex"), rs.getString("hobby"), rs.getString("address"), rs.getInt("urole"), rs.getString("udate")); } } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.myClose(conn, ps, rs); } //返回 return u; } @Override public int addUsersLogin(Users users) { // TODO Auto-generated method stub return 0; } @Override public int setUsersPassword(Users users, String newPassword) { // TODO Auto-generated method stub return 0; } }
(4)在中转站中调用方法
<%@page import="com.zking.news.dao.impl.UsersDaoImpl"%> <%@page import="com.zking.news.dao.IUsersDao"%> <%@page import="com.zking.news.entity.Users"%> <%@page import="java.sql.Connection"%> <%@page import="com.zking.news.utils.DBHelper"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //设置编码 request.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); //将获取的用户以及密码进行实体封装 Users users = new Users(username,password); //实例化DAO类(里氏替换原则) IUsersDao iud = new UsersDaoImpl(); //调用登录的方法即可 Users u = iud.adminUsersLogin(users); //判断非空 if(u!=null){//可跳转 response.sendRedirect("admin.jsp"); }else{ out.println("<script>alert('账号或密码错误');lcoation.href='admin_login.jsp'</script>"); } %>
三、 显示历史记录
(1)先显示所有新闻
<h5>所有新闻信息</h5> <ul> <% //加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //建立连接 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Connection conn = DriverManager.getConnection(url, "scott", "123"); String sql = "select * from tb_news"; PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()){ out.println("<li><a href='read_news.jsp?nid="+rs.getInt(1)+"'> "+rs.getString(3)+" </a><span> "+rs.getString(8)+" </span></li>"); } %>
(2)点击标题携带参数进入新闻详情界面
<%@page import="java.net.URLDecoder"%> <%@page import="java.net.URLEncoder"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.Connection"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% request.setCharacterEncoding("utf-8"); //获取编号 String id = request.getParameter("nid"); int nid = Integer.valueOf(id); //加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //建立连接 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Connection conn = DriverManager.getConnection(url, "scott", "123"); String sql = "select * from tb_news where nid = "+nid; PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); if(rs.next()){ out.println("新闻标题: "+rs.getString(3)); } String nids = "";//保存所有的新闻编号 String myNids = "";//存储cookie中保存的编号 Cookie[] cookies = request.getCookies(); if(cookies!=null){ for(Cookie cookie:cookies){ //判断 if("nids".equals(cookie.getName())){ //编码保存 获取的时候解码 问题 myNids = URLDecoder.decode(cookie.getValue(), "utf-8"); break; } } } if(myNids!=null){ if(!myNids.contains(id)){ nids = myNids+id+","; }else{ nids = myNids; } }else{ nids = myNids+id+","; } //重新保存 nids Cookie cookie = new Cookie("nids",URLEncoder.encode(nids,"UTF-8")); response.addCookie(cookie); %> <hr/> <a href = "home.jsp">返回首页</a> </body> </html>
(3)显示历史记录(根据id保存所点击的记录)
<% String nids = ""; Cookie[] cookies = request.getCookies(); if(null!=cookies){ for(Cookie cookie :cookies){ if("nids".equals(cookie.getName())){ nids = URLDecoder.decode(cookie.getValue(), "utf-8"); } } } //out.println(nids); //分割 if(nids!=""){ nids = nids.substring(0, nids.lastIndexOf(",")); String[] nidss = nids.split(","); for(int i = 0;i<nidss.length;i++){ int nid = Integer.valueOf(nidss[i]); //连接数据库交互 //加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //建立连接 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Connection conn = DriverManager.getConnection(url, "scott", "123"); String sql = "select * from tb_news where nid = ?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, nid); ResultSet rs = ps.executeQuery(); if(rs.next()){ out.println("<p>"+rs.getString(3)+"</p>"); } } } %>