JavaWEB快速入门之application&javabean封装以及显示历史记录【08】

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

			%>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ning_ning_03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值