1. 任務
之前已經實現了:
- 新聞列表瀏覽
- 新聞內容展示
- 登錄成功後跳轉管理後臺頁面
- 登錄失敗後跳轉錯誤信息頁面
本篇在登錄成功後管理後臺頁面admin.jsp,添加發布新聞的功能。
2. 具體功能
可以輸入新聞標題、內容等信息後,點擊發布,則數據庫內新增一條新聞。
此時如果打開新聞列表瀏覽頁,能看到新增的新聞信息。
3. 開發流程
3.1 查看admin.jsp
之前admin.jsp頁面已經具備檢測用戶是否登錄的功能,只有登錄的才能在admin.jsp頁面停留,沒登錄的會自動跳轉到錯誤頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>管理頁面</title>
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<%
//支持中文編碼
request.setCharacterEncoding("utf-8");
//獲取表單輸入的用戶名
String inputUsername = request.getParameter("username");
//獲取表單輸入的密碼
String inpputPassword = request.getParameter("password");
//如果沒輸入用戶名密碼,則跳轉錯誤頁
if (inputUsername == null || "".equals(inputUsername) || inpputPassword == null
|| "".equals(inpputPassword)) {
request.getRequestDispatcher("error_nologin.jsp").forward(request, response);
return;
}
//配置數據庫
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/schoolnews?useUnicode=true&characterEncoding=utf8";
String username = "root";
String password = "Easy@0122";
Connection conn = DriverManager.getConnection(url, username, password);
//設置sql,查詢是否存在用戶名和密碼都匹配的用戶信息
String sql = "select * from user where username=? and password=?";
PreparedStatement st = conn.prepareStatement(sql);// 在此次傳入,進行預編譯
st.setString(1, inputUsername);
st.setString(2, inpputPassword);
//執行sql查詢
ResultSet rs = st.executeQuery();
//如果查詢結果不存在,則表示用戶名密碼錯誤,跳轉到錯誤頁
if (rs.next() == false) {
request.getRequestDispatcher("error_nologin.jsp").forward(request, response);
return;
}
%>
<div class="header-bar">
<span class="header-title">SchoolNews--管理後臺</span> <a
class="header-button" href="#">歡迎您:<%=rs.getString("username")%></a>
</div>
<h1 class="article-title">發佈新聞</h1>
</body>
</html>
3.2 添加發布新聞的表單
我們在body區域添加表單,以便讓管理員輸入新聞的標題、內容等信息。
當我們點擊提交時,會把內容提交給publish.jsp
頁面,同時類型、標題、時間、內容等信息會按照指定的name屬性傳遞給publish.jsp
頁面。
<h1 class="article-title">發佈新聞</h1>
<form action="publish.jsp" method="post">
<div>
類型:<input name="type" type="text" />
</div>
<div>
標題:<input name="title" type="text" />
</div>
<div>
時間:<input name="time" type="date" />
</div>
<div>
內容:<br>
<textarea name="content" rows="10" cols="100">
</textarea>
</div>
<div>
<input type="submit" value="提交">
</div>
</form>
3.3 開發publish.jsp頁面
我們在publish.jsp
頁面接受admin.jsp
提交的表單信息,然後插入數據庫,並顯示發佈成功提示信息。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>管理頁面</title>
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<%
// 設置中文編碼
request.setCharacterEncoding("utf-8");
// 連接數據庫
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/schoolnews?useUnicode=true&characterEncoding=utf8";
String username = "root";
String password = "Easy@0122";
Connection conn = DriverManager.getConnection(url, username, password);
// 準備執行插入sql語句
String sql = "insert into news(type,title,time,content)values(?,?,?,?)";
PreparedStatement st = conn.prepareStatement(sql);// 在此次傳入,進行預編譯
// 將表單傳遞過來的數據,放入sql語句指定位置
st.setString(1, request.getParameter("type"));
st.setString(2, request.getParameter("title"));
st.setString(3, request.getParameter("time"));
st.setString(4, request.getParameter("content"));
// 執行sql
st.execute();
%>
<div class="header-bar">
<span class="header-title">SchoolNews--管理後臺</span>
</div>
<h1>發佈成功</h1>
</body>
</html>
4. 測試
使用用戶名、密碼登錄:
填寫新聞信息:
點擊提交後提示發佈成功:
返回view.jsp頁面,發現已經有新的新聞了:
小結
所有功能都完畢了,JSP+MySQL足夠簡單,很容易理解,可以視爲最初級的入門項目。