java新闻发布系统
该博客只是记录学习过程中的思路,页面较为简陋,请大佬包涵,若有想法,请私聊,不喜勿喷!!!
IDEA 构建一个最简单的JavaWeb项目,引用链接如下:
https://zhuanlan.zhihu.com/p/333010524
DbHandle.java文件
数据库连接、查询功能、增删改查、数据库数据转换为List
package com.example.demo_news;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DbHandle {
// 数据库连接对象,若对象为null表示连接失败
Connection conn=null;
// 执行sql语句的对象
Statement st=null;
// 存放查询结果的对象
ResultSet rs=null;
// 数据库连接(mysql)
public void getConnection(){
// 数据库驱动
final String DRIVERNAME = "com.mysql.cj.jdbc.Driver";
// 设置编码,放置中文乱码,设置时区为UTC
final String URL =
"jdbc:mysql://localhost:3306/demo_news?serverTimezone=UTC&characterEncoding=utf8";
// 数据库的账号和密码
final String LOGIN = "root";
final String PASSWORD = "root";
try {
// 第一步:加载驱动程序
Class.forName(DRIVERNAME);
// 第二步:创建一个数据库连接
conn=DriverManager.getConnection(URL,LOGIN,PASSWORD);
}catch(Exception e){
System.out.println("执行getConnection()方法出错:");
e.printStackTrace();
}
}
// 数据库查询
public ResultSet executeQuery(String sql){
try{
if(conn==null){
getConnection();
}
if(st==null)
{
st=conn.createStatement();
}
rs=st.executeQuery(sql);
}catch(Exception e){
System.out.println("执行executeQuery(String sql)方法出错:"+sql);
e.printStackTrace();
}
return rs;
}
// 数据转换,ResultSet转换为List
public List getResult(ResultSet rs) throws Exception{
List r=new ArrayList<>();
ResultSetMetaData metaData = rs.getMetaData();
while (rs.next()){
Map temp=new HashMap();
for (int i=1;i<=metaData.getColumnCount();i++){
temp.put(metaData.getColumnName(i),rs.getObject(i));
}
r.add(temp);
}
return r;
}
// 数据库增加/删除/修改
public int executeUpdate(String sql){
int ret;
try{
if(conn==null){
getConnection();
}
if(st==null)
{
st=conn.createStatement();
}
ret=st.executeUpdate(sql);
}catch(Exception e){
System.out.println("执行executeUpdate(sql)方法出错:"+sql);
e.printStackTrace();
ret= -1;
}
return ret;
}
// 数据库关闭
public void close(){
try {
if (rs!=null){
rs.close();
}
if (st!=null){
st.close();
}
if (conn!=null){
conn.close();
}}
catch(Exception e){
System.out.println("执行close()方法出错:");
e.printStackTrace();
}
}
}
另一种DbHandle写法
package com.example.demo3.util;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Dbutil {
private Connection connection;
private PreparedStatement statement;
// 加载驱动
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private void initConnection() throws SQLException {
if (this.connection == null){
String url = "jdbc:mysql://localhost:3306/javaweb?serverTimezone=GMT%2B8&characterEncoding=utf8";
this.connection = DriverManager.getConnection(url,"root", "root");
}
}
public Dbutil(String sql) throws SQLException {
initConnection();
this.statement = this.connection.prepareStatement(sql);
}
public int executeUpdate(ArrayList<Object> args) throws SQLException {
for (int i = 0; i < args.size(); i++) {
statement.setObject(i+1, args.get(i));
}
return statement.executeUpdate();
}
public List<Map<Object, Object>> executeQuery(ArrayList<Object> args) throws SQLException {
for (int i = 0; i < args.size(); i++) {
statement.setObject(i+1, args.get(i));
}
ResultSet resultSet;
resultSet = statement.executeQuery();
List<Map<Object, Object>> ret_ary = new ArrayList<>();
ResultSetMetaData meta = resultSet.getMetaData();
while (resultSet.next()){
Map<Object, Object> temp = new HashMap<>();
for (int i = 1; i < meta.getColumnCount() + 1; i++) {
String key = meta.getColumnName(i);
Object val = resultSet.getObject(i);
temp.put(key, val);
}
ret_ary.add(temp);
}
return ret_ary;
}
public void close(){
try{
this.statement.close();
this.connection.close();
}catch (NullPointerException | SQLException exception){
exception.printStackTrace();
}finally {
this.statement = null;
this.connection = null;
}
}
public boolean isClosed() throws SQLException{
return this.connection == null || this.connection.isClosed();
}
public boolean isValid() throws SQLException {
return this.connection == null || this.connection.isValid(3);
}
}
新闻列表展示,未使用Servlet处理数据,在jsp文件处理,并展示
<%@ page import="com.example.demo_news.DbHandle" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.ResultSetMetaData" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>新闻发布系统</title>
</head>
<body>
<jsp:include page="base.jsp"></jsp:include>
<div>
<%-- 连接数据库,查询数据,转换类型 --%>
<%
// 设置编码
request.setCharacterEncoding("UTF-8");
DbHandle dbh=new DbHandle();
String sql = "select * from news";
// 连接数据库,并运行sql语句
ResultSet rs = dbh.executeQuery(sql);
// 数据转换
List result = dbh.getResult(rs);
%>
<table border="1">
<tr>
<td>id</td>
<td>作者</td>
<td>标题</td>
<td>修改时间</td>
</tr>
<%
// 获取数据
for (int i=0;i<result.size();i++){
Map news = (Map) result.get(i);
int id = (int)news.get("id");
String author = (String) news.get("authorId");
String title = (String) news.get("title");
String last_update_time = (String) news.get("last_update_time").toString();
%>
<tr>
<td><%=id%></td>
<td><%=author%></td>
<td><%=title%></td>
<td><%=last_update_time%></td>
<td>
<a href="new_detail.jsp?title=<%=title%>">查看</a>
<a href="news_modify.jsp?id=<%=id%>">修改</a>
<a href="news_delete.jsp?id=<%=id%>">删除</a>
</td>
</tr>
<%}%>
</table>
</div>
</body>
</html>
使用Servlet处理登录、注册、数据库的增、删、改。
登录页面
login.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/6/11
Time: 10:01
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<div style="height: 50px;width: 200px">
<a href="login.jsp">登录</a>
<a href="regist.jsp">注册</a>
</div>
<FORM action="lgServlet" method= "post" >
<TABLE>
<tr>
<td>用户名:</td>
<td><INPUT type="text" name="username" ></td>
</tr>
<tr>
<td>密 码:</td>
<td><INPUT type="password" name="password" ></td>
</tr>
<tr>
<td><INPUT TYPE="submit" value="提交" name="submit"></td>
<td><INPUT TYPE="reset" value="重置" name="reset"></td>
</tr>
</TABLE>
</FORM>
</body>
</html>
web.xml路由注册
<!-- 登录 -->
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.example.demo_news.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/lgServlet</url-pattern>
</servlet-mapping>
<!-- 注册 -->
LoginServlet.java
针对表单提交数据,负责页面跳转
package com.example.demo_news;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
// 实例化
Login Login=new Login();
response.setCharacterEncoding("UTF-8");
// 登录验证
if(Login.execute(request)){
response.sendRedirect("index.jsp");
}else{
response.sendRedirect("login.jsp");
}
}catch (Exception e){
e.printStackTrace();
System.out.println("执行出错了");
}
}
}
Login.java
负责逻辑结构,登录验证,如果该条数据存在于数据库,则返回true
package com.example.demo_news;
import java.sql.ResultSet;
import javax.servlet.http.HttpServletRequest;
import com.example.demo_news.DbHandle;
public class Login {
private String username;
private String password;
public boolean execute(HttpServletRequest request){
try {
request.setCharacterEncoding("UTF-8");
username=request.getParameter("username");
password=request.getParameter("password");
DbHandle dbh=new DbHandle();
// 登录验证
String sql="select * from userinfo where username='"+
username +"' and password = '" + password + "'";
ResultSet rs=dbh.executeQuery(sql);
if(rs.next()){
return true;
}else{
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}