Ich habe mit MySQL ein einfaches Bulletin Board erstellt.
-Ich wusste nicht, wie ich die in der Datenbank gespeicherten Daten abrufen sollte. Zuerst habe ich versucht, ID, Name, Kommentar und Zeitstempel separat im Array abzurufen, aber es hat nicht funktioniert. ArrayList kann die gesamte Instanz speichern!
-Ich wusste nicht, wie ich den Inhalt von ArrayList mit jsp abrufen soll.
Ich habe versucht, es mit der EL-Methode herauszunehmen, aber es hat nicht funktioniert.
Ich konnte es mit forEach
in der JSTL-Core-Tag-Bibliothek abrufen.
model
Board.java
package model;
import java.io.Serializable;
import java.sql.Timestamp;
public class Board implements Serializable {
private int id;
private String name;
private String comment;
private Timestamp time;
public Timestamp getTime() {
return time;
}
public void setTime(Timestamp time) {
this.time = time;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
FindCommentDAO.java
package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class FindCommentDAO {
public List<Board> findcomment() {
// id,name,Liste zum Speichern von Kommentaren
List<Board> list = new ArrayList<>();
final String jdbcId = "id";
final String jdbcPass = "password";
final String jdbcUrl = "jdbc:mysql://localhost:3306/dbname?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=JST";
Connection con = null;
try {
con = DriverManager.getConnection(jdbcUrl, jdbcId, jdbcPass);
System.out.println("Connected....");
try {
Statement st = con.createStatement();
String sql = "select * from board";
try {
//Senden Sie SQL
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
//ID aus DB abgerufen,name,Kommentar auf JavaBeans setzen
Board bo = new Board();
bo.setId(rs.getInt("id"));
bo.setName(rs.getString("name"));
bo.setComment(rs.getString("comment"));
bo.setTime(rs.getTimestamp("time"));
//Speichern Sie eine in der Liste. Elemente werden am Ende hinzugefügt.
list.add(bo);
}
rs.close();
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//Getrennte Datenbankverbindung
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Connection Failed.");
return null;
}
return list;
}
}
FindCommentLogic.java
package model;
import java.util.List;
public class FindCommentLogic {
public List<Board> executeFindComment() {
FindCommentDAO fcdao = new FindCommentDAO();
List<Board> list = fcdao.findcomment();
return list;
}
}
AddCommentDAO.java
package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class AddCommentDAO {
//ID zu DB,name,Methode zum Hinzufügen eines Kommentars
public AddCommentDAO(Board bo) {
if(bo.getName().isEmpty()) {
bo.setName( "Anonym");
}
if(bo.getComment().isEmpty()) {
bo.setComment( "kein Kommentar");
}
final String jdbcId = "id";
final String jdbcPass = "password";
final String jdbcUrl = "jdbc:mysql://localhost:3306/dbname?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=JST";
Connection con = null;
try {
con = DriverManager.getConnection(jdbcUrl, jdbcId, jdbcPass);
System.out.println("Connected....");
try {
PreparedStatement ps = con.prepareStatement("INSERT INTO board (name, comment) VALUES (?, ?)");
ps.setString(1, bo.getName());
ps.setString(2, bo.getComment());
//Briefpapier senden
int r = ps.executeUpdate();
if (r != 0) {
System.out.println(r + "Schreiben hinzugefügt.");
} else {
System.out.println("Konnte nicht schreiben.");
}
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//Getrennte Datenbankverbindung
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Connection Failed.");
}
}
}
AddCommentLogic
package model;
public class AddCommentLogic {
public void executeAddComment(Board bo) {
AddCommentDAO acdao = new AddCommentDAO(bo);
}
}
view
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
function check(){
var flag = 0;
if(document.form1.name.value == ""){
flag = 1;
}
else if(document.form1.comment.value == ""){
flag = 1;
}
if(flag){
window.alert('Bitte geben Sie Ihren Namen und Kommentar ein');
return false; //Hör auf zu senden
}
else{
return true; //Senden durchführen
}
}
</script>
<title>schwarzes Brett</title>
</head>
<body>
<form action="/board/BoardServlet" method="post" name="form1" onSubmit="return check()">
<p>Name:<input type="text" name="name"></p>
<p>Kommentar:<br>
<textarea name="comment" rows="5" cols="40"></textarea>
</p>
<p><input type="submit" value="Senden"><input type="reset" value="zurücksetzen">
</p>
</form>
<c:forEach var="list" items="${listAttribute}">
<p>ID:<c:out value="${list.id}"/>Name:<c:out value="${list.name}"/>Datum:<c:out value="${list.time}"/><br>
<c:out value="${list.comment}"/></p>
</c:forEach>
</body>
</html>
controller
BoardServlet.java
package servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.AddCommentLogic;
import model.Board;
import model.FindCommentLogic;
/**
* Servlet implementation class BoardServlet
*/
@WebServlet("/BoardServlet")
public class BoardServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public BoardServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Ich möchte in die Hörerklasse wechseln
request.setCharacterEncoding("UTF-8");
//Überprüfen Sie vorhandene Kommentare
FindCommentLogic fcl = new FindCommentLogic();
List<Board> list = fcl.executeFindComment();
//Kommentarliste im Sitzungsbereich speichern
HttpSession session = request.getSession();
session.setAttribute("listAttribute", list);
RequestDispatcher rd =request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//Holen Sie sich den eingegebenen Wert
String name = request.getParameter("name");
String comment = request.getParameter("comment");
//In JavaBeans speichern
Board bo = new Board();
bo.setName(name);
bo.setComment(comment);
//In MySQL speichern
AddCommentLogic acl = new AddCommentLogic();
acl.executeAddComment(bo);
//Holen Sie sich den gerade eingegebenen Kommentar und den vorhandenen Kommentar von MySQL
FindCommentLogic fcl = new FindCommentLogic();
List<Board> list = fcl.executeFindComment();
//Kommentarliste im Sitzungsbereich speichern
HttpSession session = request.getSession();
session.setAttribute("listAttribute", list);
RequestDispatcher rd =request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
rd.forward(request, response);
}
}
Recommended Posts