java web实现简单留言板功能
作者:今天肝代码了吗 发布时间:2021-10-29 17:22:31
本文实例为大家分享了java web实现简单留言板的具体代码,供大家参考,具体内容如下
一、目标
用户可以登录并记住密码进入留言板,添加留言,点击留言列表中的标题可显示该条留言全部内容。
二、相关知识
1、使用Cookie实现自动登录
用户第一次登录网站,服务器将用户名和密码以Cookie的形式发送到客户端。当客户之后再次访问该网站时,浏览器自动将Cookie文件中的用户名和密码随请求一起发送到服务器,服务器从Cookie中取出用户名和密码并且通过验证。
2、java类的定义与使用
定义java类时注意属性的定义、构造方法的重写,定义两个方法,一个是访问方法(getter),一个是修改方法(setter)。
三、实现思路
1、登录
输入用户名、密码登录,对应检测登录BoardLoginServlet
可实现记住登录信息 Cookie实现
登录成功显示留言板标题列表页面board-title.jsp,登录失败返回登录页面
2、显示留言标题
标题列表为上下文变量lists,其中标题为链接,点击可显示留言具体信息界面(跳转到MessageServlet处理)。
list = username+":"+"<a href='MessageServlet?title="+title+"'target='_parent'>"+title+"</a>";
页面下方有新增留言的链接,点击后跳转到写留言页面
<a href="board-write.jsp" rel="external nofollow" rel="external nofollow" >新增留言</a>
3、添加留言
输入标题、内容 post给WriteServlet
4、显示留言具体信息
在MessageServlet中遍历查找留言并传递变量,显示留言信息在board-message.jsp
四、代码实现
board-login.jsp
<form action="board.do" method="post">
<br>
<h1 class="text" >登录界面</h1>
昵称:<input type="text" name="username" value="${cookie.username.value}"/><br>
密码:<input type="password" name="password" value="${cookie.password.value}"/><br><br>
<input type="checkbox" name="check" value="check"/>记住密码<br> <br>
<input type="submit" value="登录"/>
<input type="reset" value="取消"/>
</form>
board-title.jsp
<h2>留言板</h2>
${lists}
<a href="board-write.jsp" rel="external nofollow" rel="external nofollow" >新增留言</a>
boarrd-write.jsp
<form action="write.do" method="post">
标题:<input type="text" name="title"/><br>
内容:<input type="text" name="text"/><br>
<input type="submit"/>
</form>
board-message.jsp
<h2>留言详情</h2>
用户名:${name}<br>
标题:${title}<br>
内容:${text}<br>
时间:${date}<br>
Message.java(将留言信息存储在Message类中)
package board;
import java.util.Date;
public class Message {
private String title;//标题
private String time;//时间
private String username;//用户名
private String text;//内容
public Message(){}
//初始化
public Message(String title,String time,String username,String text){
this.title = title;
this.time = time;
this.username = username;
this.text = text;
}
public String getTitle(){
return title;
}
public String getUsername(){
return username;
}
public String getTime(){
return time;
}
public String getText(){
return text;
}
}
BoardLoginServlet.java(用Cookie登录)
package board;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
@javax.servlet.annotation.WebServlet(name = "BoardLoginServlet",urlPatterns = "/board.do")
public class BoardLoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset = utf-8");
request.setCharacterEncoding("UTF-8");
HttpSession session=request.getSession();
String username = request.getParameter("username").trim();
String password = request.getParameter("password").trim();
session.setAttribute("username",username);
if (!(username.equals("admin") &&password.equals("admin"))&&!(username.equals("123") &&password.equals("123"))) {
response.sendRedirect("board-login.jsp");
} else {
if ((request.getParameter("check") != null) && (request.getParameter("check").equals("check"))) {
Cookie nameCookie = new Cookie("username", username);
Cookie pswdCookie = new Cookie("password", password);
nameCookie.setMaxAge(60 * 60);
pswdCookie.setMaxAge(60 * 60);
nameCookie.setPath("/");
pswdCookie.setPath("/");
response.addCookie(nameCookie);
response.addCookie(pswdCookie);
String value1 = "", value2 = "";
Cookie cookie = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
if (cookie.getName().equals("username"))
value1 = cookie.getValue();
if (cookie.getName().equals("password"))
value2 = cookie.getValue();
}
if (value1.equals("admin") && value2.equals("admin")||value1.equals("123") && value2.equals("123")) {
response.sendRedirect("board-title.jsp");
} else {
response.sendRedirect("board-login.jsp");
}
}
}
else
{
response.sendRedirect("board-title.jsp");
}
}
}
}
WriteServlet.java(新增留言)
package board;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@WebServlet(name = "WriteServlet",urlPatterns = "/write.do")
public class WriteServlet extends HttpServlet {
//messages列表中存放Message类对象
public List<Message> messages = new ArrayList<Message>();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
ServletContext context = request.getServletContext();
HttpSession session = request.getSession();
//用户名存储到session中
String username =(String)session.getAttribute("username");
String title = request.getParameter("title");
String text = request.getParameter("text");
//获取当前时间
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss");
Date date = new Date(System.currentTimeMillis());
String time = formatter.format(date);
//在messages列表中添加留言对象
messages.add(new Message(title,time,username,text));
context.setAttribute("messages",messages);
String list = new String();
//list中存放留言用户名+留言标题,标题为链接,可跳转到留言具体信息,并传参title
list = username+":"+"<a href='MessageServlet?title="+title+"'target='_parent'>"+title+"</a>";
String lists = new String();
//将留言标题列表信息存到上下文对象
if(context.getAttribute("lists")!=null){
lists = context.getAttribute("lists") + list + "<br>";
}
else{
lists = list + "<br>";
}
context.setAttribute("lists", lists);
request.setAttribute("lists", lists);
//转发
RequestDispatcher dispatcher = request.getRequestDispatcher("/board-title.jsp");
dispatcher.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
MessageServlet.java
package board;
import com.sun.net.httpserver.HttpContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
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 java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "MessageServlet",urlPatterns = "/MessageServlet")
public class MessageServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
ServletContext context = request.getServletContext();
List<Message> messages = new ArrayList<Message>();
//获取列表
messages = (List<Message>)context.getAttribute("messages");
//获取链接中的参数title
String title =request.getParameter("title");
String name = new String();
String date = new String();
String text = new String();
//遍历列表,查找该title的具体信息
for(Message message : messages){
if((message.getTitle()).equals(title)){
name = message.getUsername();
date = message.getTime();
text = message.getText();
title = message.getTitle();
request.setAttribute("name",name);
request.setAttribute("title",title);
request.setAttribute("text",text);
request.setAttribute("date",date);
break;
}
}
//将留言信息转发到board-message.jsp
RequestDispatcher dispatcher = request.getRequestDispatcher("/board-message.jsp");
dispatcher.forward(request, response);
}
}
(以上仅为部分代码)
来源:https://blog.csdn.net/weixin_46041475/article/details/109930277


猜你喜欢
- springcloud整合stream,rabbitmq实现消息驱动功能1.代码实现:创建项目stream添加依赖<parent>
- maven打包指定jdk的版本问题今天遇到个问题,项目中新写了一个接口,其中用到了lambda表达式,本地跑是没问题的,但提交到gitLab
- 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchr
- 前言通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,
- 在开发过程中.数组和集合的处理是最让我们担心.一般会用for or foreach 来处理一些操作.这里介绍一些常用的集合跟数组的操作函数.
- android大家都有很多需要用户上传头像的需求,有的是选方形,有的是圆角矩形,有的是圆形。首先我们要做一个处理图片的自定义控件,把传入的图
- 详解Java读取Jar中资源文件及实现代码 &
- 最近碰到这个问题,在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用J
- 本文实例为大家分享了Android实现朋友圈评论回复列表的具体代码,供大家参考,具体内容如下Android实现朋友圈评论回复列表Androi
- 不想废话,直接写了!因为是留给自己做随笔的,所以大神们看到别喷…… 1.必须有微信公众账号 2.你也可以申请测试微信号,
- 一、摘要这篇文章将介绍Spring整合Mybatis 如何完成SqlSessionFactory的动态切换的。并且会简单的介绍下MyBati
- 前言app启动后的白屏问题,默认都是在splash页面加主题配置,主题配置一个背景来达到用户点击app图标就立马启动app的假象,大多情况下
- 当只需要两个图像合并的时候,可以简单的使用gdi+,把两个图像画到一个画布上面实现合并bitmap.当需要将许多bitmap合并时,由于bi
- 前言:本文主要介绍内容有:一个串行调用的例子(App首页信息查询)CompletionService实现并行调用抽取通用的并行调用方法代码思
- 本文实例讲述了Java实现求数组最长子序列算法。分享给大家供大家参考,具体如下:问题:给定一个长度为N的数组,找出一个最长的单调自增子序列(
- springcloud-gateway集成knife4j环境信息环境信息spring-boot:2.6.3spring-cloud-alib
- 1.动态绑定机制java的动态绑定机制非常重要实例A我们来看一个实例:阅读上面的代码,请说明下面的程序将输出什么结果:程序将会输出40和30
- 同一个service调用service本身如果同一个service调用service本身的方法,出现了事务不能控制。解决方案1.在sprin
- 本文实例为大家分享了java实现猜数游戏的具体代码,供大家参考,具体内容如下有开始界面,可以设置范围,设置猜的次数代码如下:public s
- 本文实例讲述了Spring与Struts整合之让Spring管理控制器操作。分享给大家供大家参考,具体如下:一 Web配置<?xml