一 序言
JavaEE我也是第一次接触,课堂学习想必大家都知道什么情况,我就不说了,基本上都是靠自学,本次大作业,作者也是面向搜索引擎编程加上个人的学习经验写出来的,所以部分代码可能与网上某答主有相似的地方,若有侵权请立即联系作者,马上删除相关代码。
由于篇幅原因,以下提供的代码均为部分代码,如若需要导包,IDE会提示,按照IDE提示添加即可。
二 项目结构
我的大作业取名为家庭留言板,采用了Java EE传统的MVC模式,以下是项目结构
三 环境
IDE:
作者本身不是学Java web开发出身的,所以为了应对考核,就选择了《Java EE编程技术(第二版)》中提到的Netbeans作为集成开发环境,该软件包含了丰富的功能,还自带tomcat,可以说非常棒了
Mysql
用的8.0.17
JDK
1.8
四 代码
jsp主要代码–View层
login.jsp
登录界面:
以下代码是为了保持状态添加的session判断语句(看个人需要,添加到jsp的代码中)
<%
if((String)session.getAttribute("username")!=null)
response.sendRedirect("message.jsp");
%>
以下是登录的表单
<form action="LoginServlet" method="post">
<table cellpadding="10px" style="border-style:none;">
<tr><th></th>
<th></th></tr>
<tr><td>用户名:</td>
<td><input type="text" name="username" value=""></td></tr>
<tr><td>密码:</td>
<td><input type="password" name="password" value=""></td></tr>
<tr><td><input type="submit" value="登录"></td></tr>
</table>
</form>
message.jsp
这里是留言板主要功能界面,包含了留言、删除留言的实现
以下代码是留言板的展示、删除的页面功能代码
<table cellpadding="10px" style="border-style:none;">
<caption><h2>欢迎使用家庭留言板</h2></caption>
<tr><th>留言人</th>
<th>留言标题</th>
<th>留言时间</th>
<th>留言内容</th>
<th>操作</th></tr>
<%
List<Message> msgs=(List)session.getAttribute("msgs");
if(msgs!=null){
Iterator iter=msgs.iterator();
while(iter.hasNext()){
Message msg=(Message)iter.next();
String nickname=new UserDao().selectUserByUsername(msg.getUsername()).getNickname();
int age=new UserDao().selectUserByUsername(msg.getUsername()).getAge();
%>
<tr style="height:30px;"><td><a href="#" style="text-decoration:none;" title="<%=nickname%> 年龄:<%=age%>"><%= msg.getUsername() %></a></td>
<td><%= msg.getTitle() %></td>
<td><%= msg.getDatetimestamp()%></td>
<td><%= msg.getMessage() %></td>
<td>
<% if(msg.getUsername().equals((String)session.getAttribute("username"))){%>
<a href="DeleteMessageServlet?datetimestamp=<%= msg.getDatetimestamp() %>">删除</a>
<%
; }
%>
</td>
</tr>
<%
}
}
%>
</table>
以下是提交留言表单
<form action="MessageServlet" method="post">
<table border="1">
<caption>填写留言信息</caption>
<tr><td>留言标题</td>
<td><input type="text" name="title"/></td></tr>
<tr><td>留言内容</td>
<td><textarea name="message" rows="5" cols="35"></textarea></td>
</tr>
</table>
<input type="submit" value="提 交"/>
<input type="reset" value="清 空"/>
</form>
Dao部分
messageDao.java
与数据库交互的代码,这里只贴了Message的,但功能齐全
public class MessageDao {
public List<Message> getAllMessage(){
List<Message> list = new ArrayList<Message>();
Connection conn = DbHelper.getConnection();
String sql = "select * from message";
try {
PreparedStatement pst = conn.prepareStatement(sql);
ResultSet rst = pst.executeQuery();
while (rst.next()) {
Message userMessage = new Message();
userMessage.setTitle(rst.getString("title"));
userMessage.setUsername(rst.getString("username"));
userMessage.setMessage(rst.getString("message"));
userMessage.setDatetimestamp(rst.getString("datetimestamp"));
list.add(userMessage);
}
rst.close();
pst.close();
} catch (SQLException e) {
System.out.println(e);
}
return list;
}
public boolean addMessage(Message message){
String sql = "INSERT INTO message(message,username,title,datetimestamp) VALUES (?,?,?,?)";
Connection conn = DbHelper.getConnection();
try {
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, message.getMessage());
pst.setString(2, message.getUsername());
pst.setString(3, message.getTitle());
pst.setString(4, message.getDatetimestamp());
int count = pst.executeUpdate();
pst.close();
return count>0;
} catch (SQLException e) {
System.out.println(e);
}
return false;
}
public boolean deleteMessage(String username,String datetimestamp){
String sql = "delete from message where username = ? and datetimestamp=?";
Connection conn = DbHelper.getConnection();
try {
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, datetimestamp);
int count = pst.executeUpdate();
pst.close();
return count>0;
} catch (SQLException e) {
System.out.println(e);
}
return false;
}
public List<Message> selectMessagesByUsername(String username ){
List<Message> list = new ArrayList<Message>();
Connection conn = DbHelper.getConnection();
String sql = "select * from message where username = "+username;
Message message = null;
try {
PreparedStatement pst = conn.prepareStatement(sql);
ResultSet rst = pst.executeQuery();
while (rst.next()) {
message = new Message();
message.setUsername(rst.getString("username"));
message.setTitle(rst.getString("title"));
message.setMessage(rst.getString("message"));
message.setDatetimestamp(rst.getString("datetimestamp"));
}
rst.close();
pst.close();
} catch (SQLException e) {
System.out.println(e);
}
return list;
}
public static void main(String[] args) { //测试
// List<Message> list;
// MessageDao dao =new MessageDao();
// list = dao.getAllMessage();
// for(Message m:list)
// System.out.println(m.getUsername());
// Message message=new Message();
// message.setMessage("123");
// Date date = new Date();
// SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String datetime = dateFormat.format(date);
// message.setDatetimestamp(datetime);
// message.setTitle("222");
// message.setUsername("123");
// System.out.println(new MessageDao().addMessage(message));
}
}
Helper
连接数据库的帮助代码,主要用于连接数据库
public class DbHelper {
private static Connection conn = null;
private DbHelper(){}
public static Connection getConnection(){
if(null == conn){
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/这里填数据库名? useUnicode=true&characterEncoding=utf-8", "root", "这里填密码");
} catch (Exception e) {
System.out.println(e);
}
}
return conn;
}
public static void main(String[] args) {
}
}
javabean --Model
这里是model层的实体对象,这里只贴了Message的代码,其他的,请看官自行根据需要编写
public class Message {
private String username;
private String title;
private String message;
private String datetimestamp;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getTitle(){
return title;
}
public void setTitle(String title){
this.title=title;
}
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message=message;
}
public String getDatetimestamp(){
return datetimestamp;
}
public void setDatetimestamp(String datetime){
this.datetimestamp=datetime;
}
public Message(){}
}
Servlet部分 --Controller
loginServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//processRequest(request, response);
request.setCharacterEncoding("utf-8");
response.setContentType("utf-8");
HttpSession session=request.getSession();
String username=request.getParameter("username").toString();
String password=request.getParameter("password").toString();
String login=(String)session.getAttribute("username");
if(new UserDao().checkLogin(username,password)){
if(login==null)
session.setAttribute("username",username);
List<Message> msgs=new MessageDao().getAllMessage();
session.setAttribute("msgs", msgs);
response.sendRedirect("message.jsp");
}
else
response.sendRedirect("login.jsp");
}
messageServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// String title=new String(request.getParameter("title").getBytes("iso-8859-1"),"utf-8");
// String message=new String(request.getParameter("message").getBytes("iso-8859-1"),"utf-8");
String title=request.getParameter("title");
String message=request.getParameter("message");
HttpSession session=request.getSession();
String username= (String)session.getAttribute("username");
Message msg=new Message();
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String datetime = dateFormat.format(date);
msg.setUsername(username);
msg.setDatetimestamp(datetime);
msg.setTitle(title);
msg.setMessage(message);
if(new MessageDao().addMessage(msg)){
//添加留言到session
List<Message> msgs=new MessageDao().getAllMessage();
session.setAttribute("msgs", msgs);
response.sendRedirect("message.jsp");
}
else
response.sendRedirect("login.jsp");
}