Javaweb使用Javabean完成数据库新闻读取

新闻类读取业务比较通用,可以拓展至其他类型需求。在javaweb处理过程中有几种方式:

(1)直接使用java代码访问数据库,进行查询业务获得查询结果,然后在页面显示。这种方式就是在同一个页面中需要使用java代码访问数据库,然后jsp代码显示在Html标记位置,非常混杂,不易维护,别人也很难读懂。不推荐。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <table border="1" style="background:#eee;font-size:12px;">
<%
  //数据库配置
  Connection conn=null;
  Statement pst=null;
  ResultSet rs=null;
  
  String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
  String DB_URL = "jdbc:mysql://106.13.111.246:3306/new?useSSL=true&serverTimezone=UTC";		
  String USER = "cao";
  String PASS = "root123"; 
  //数据库连接
  try{	 
    Class.forName(JDBC_DRIVER);
    conn  = DriverManager.getConnection(DB_URL,USER,PASS);
  }catch(Exception e){
	  e.printStackTrace();
  }  
  //数据查询
  if(conn!=null)
  {
	  String sql="select * from news";
	  pst=conn.createStatement();
	  rs=pst.executeQuery(sql); 
   //数据显示
	  while(rs.next()){	 
%>
    <tr>
       <td><%=rs.getString(2) %></td>
     	<td><%=rs.getString(3) %></td>
     	<td><%=rs.getString(4) %></td>    
    </tr>
<%		  
	  }
  }
  conn.close();
  %>
   </table>
</body>
</html>

(2)采用Servlet方式,将查询业务交由服务器处理,页面只需要读取数据并显示即可。同时需要将查询业务封装为java类,这里分两步:

1. 连接数据库类ConnDB

package com.tools;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnDB {

	 public static Connection conn=null;
	    public static Statement stm=null;
	    public   ResultSet rs=null;
	    
	    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
	    static final String DB_URL = "jdbc:mysql://106.13.111.246:3306/new?useSSL=true&serverTimezone=UTC";		
	    static final String USER = "cao";
	    static final String PASS = "root123";
	    
	   //连接 
	    public static Connection getConnection() {
	    	
	    	try {
	    		Class.forName(JDBC_DRIVER);
	    		conn  = DriverManager.getConnection(DB_URL,USER,PASS);
	            System.out.println("连接成功");
	            return conn;
	    	}catch(Exception e) {
	    		e.printStackTrace();
	    	}
	    	return null;
	    }
	    //修改
	    public int executeUpdate(String sql) {    	
	    	int res=0;
	    	try {
	    		conn=getConnection();
	    		stm=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
	    		res=stm.executeUpdate(sql);
	    	}catch(Exception e) {
	    		res=0;
	    		e.printStackTrace();
	    	}
	    	try {
	    		stm.close();
	    	}catch(Exception e) {
	    		e.printStackTrace();
	    	}
	    	return res;    	
	    }
	    //查询记录
	    public ResultSet executeQuery(String sql) {    	
	    	try {
	    		conn=getConnection();
	    		stm=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
	    		rs=stm.executeQuery(sql);    		
	    	}catch(Exception e) {
	        		e.printStackTrace();
	        	 
	    	}
	    	return rs;
	    }
	   //关闭 
	    public void close() {
	    	try { 
	        	if(conn!=null) {	            	  
	                  conn.close();
	            }
	        	if(rs!=null) {	            	  
	                conn.close();
	           }
	        	if(stm!=null) {	            	  
	                conn.close();
	           }
	        } catch (SQLException e) {
	            // TODO: handle exception
	        	 e.printStackTrace();
	        }
	    }
}

业务处理类DButils

package com.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.tools.ConnDB; 

public class DButils {
	private ConnDB conn=new ConnDB();	
	 
	//获得新闻列表结果
	public String[][] newslist() {
		String[][] arr=null;
		ResultSet rs;
		Integer i=0,k=3;
		String sql="select * from news";
		try {
		rs=conn.executeQuery(sql);
		while(rs.next()) {
			i++;
		}
		arr=new String[i][k];
		rs=conn.executeQuery(sql);
		for(i=0;rs.next();i++)
			 for(int j=0;j<k;j++) {
				 arr[i][j]=rs.getString(j+2);
			 }		
		}catch(SQLException e) {}
		conn.close();
		return arr;
		
	}
}

2.Servlet类,这里直接采用注解方式,不从web.xml中定义。这里只粘贴了doget部分,其余省略。

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		DButils nw=new DButils();
		String[][] str=null;		 
		str=nw.newslist();		
		request.setAttribute("newslist", str);
		request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        request.getRequestDispatcher("news1.jsp").forward(request, response);		
	}

3.回到news1.jsp页面,获取结果显示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <table border="1" style="background:#eee;font-size:12px;">
<%
  String[][] arr=(String[][])request.getAttribute("newslist");
  for(int i=0;i<arr.length;i++)	{  
%>  <tr>
	<td><%=arr[i][0] %> </td> 
   <td><%=arr[i][1] %> </td> 
   <td><%=arr[i][2] %> </td> 
   </tr>
<% } %>
   </table>
</body>
</html>

(3)使用javabean,在jsp页面实现类的实例化

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*" import="java.util.*"%>
<jsp:useBean id="conn" scope="page" class="com.tools.ConnDB"/> 
<jsp:useBean id="news" scope="page" class="com.dao.DButils"/> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" style="text/css" href="css/index.css" >
</head>
<body>
<div class="main">
<table> 
<%
    request.setCharacterEncoding("UTF-8");
    String[][] arr=news.newslist();
  for(int i=0;i<arr.length;i++)
   {    
%>
<tr>
  <td><%=arr[i][0] %></td>
  <td><%=arr[i][1] %></td>
  <td><%=arr[i][2] %></td>
</tr> 
<% } %>
 </table>

</div> 
</body>
</html>

如上三种方式均可以获取到数据并显示出来,对比而言,采用javabean要更简洁一些。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值