一、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>");
}
}
}
%>