新闻类读取业务比较通用,可以拓展至其他类型需求。在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要更简洁一些。