你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

使用jsp+servlet实现留言板(学习使用)

2021-11-18 10:13:39

1.前端jsp页面

   1.1前端总体代码

<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2021/11/17
  Time: 17:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        textarea{
            resize: none;
        }
    </style>
</head>
<body>
<!--留言板用来显示数据-->

<table >
    <caption>留言板</caption>
    <tr >
        <td>
            <textarea readonly="readonly" id="tttt" rows="20" cols="50" style="background-color: beige">
                <%

                    ArrayList list = (ArrayList)application.getAttribute("list");
                    if(list!=null){
                    for(int i=0;i<list.size();i++){
                %>
                <%=list.get(i).toString()%>
                <%
                    }
                    }
                %>
            </textarea>
        </td>
    </tr>
</table>
<!--用来输入数据-->
<form action="lybServlet" method="post">
    <input type="text" name="content" >&nbsp;
    <input type="submit" value="提交">
</form>

</body>
</html>

    1.2解析textarea里面java脚本的解释

 <%

                     ArrayList list = (ArrayList)application.getAttribute("list");//这一句是获取我们存储在application里面的数组list的,而这个list呢,它是专门用来装我们用户的留言的。
                  
                    //当我们获取到这个数组是,判断一下它是否为空,如果为空则说明目前木任何人留过,如果不为空则取出list里面用户留的言,及我们后面的循环遍历该list,取出里面每一条数据
                    if(list!=null){
                        for(int i=0;i<list.size();i++){
                %>
                <%=list.get(i).toString()%>
                <%
                        }
                    }
                %>

       1.3解析表单

<!--用来输入数据-->   这是用户输入表单,当用户输入完后点击提交,就会将用户输入的信息
提交给lybServlet处理
<form action="lybServlet" method="post">
    <input type="text" name="content" >&nbsp;
    <input type="submit" value="提交">
</form>

2.后端代码

     2.1后端总体代码

package lyb;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;

@WebServlet(name = "lybServlet", value = "/lybServlet")
public class lybServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //获取前端过来的数据+将数据存储到application中去
        request.setCharacterEncoding("UTF-8");//设置编码
        String content = request.getParameter("content");//获取前端过来的数据
        String remoteAddr = request.getRemoteAddr();//ip地址
        String combaniton = remoteAddr+" : "+content;//ip地址+评论内容

        System.out.println(combaniton);
        ServletContext application =this.getServletContext();//获取application--及整个网页使用的
        ArrayList list = (ArrayList) application.getAttribute("list");//获取全局对象里面的list数组

        if(list!=null){
            list.add(combaniton);//如果该数组不为空则把用户评论以及用户ip地址加入加进去
        }else{
            list = new ArrayList();//如果不存在该list则创建一个
            list.add(combaniton);//并且将第一个用户评论加入数组中
        }
        application.setAttribute("list",list);//将又该过的list又再一次装回去
        response.sendRedirect("index1.jsp");



    }
}

        2.1后端部分代码解释

 //获取前端过来的数据+将数据存储到application中去
        request.setCharacterEncoding("UTF-8");//设置编码
        String content = request.getParameter("content");//获取前端过来的数据
        String remoteAddr = request.getRemoteAddr();//ip地址
        String combaniton = remoteAddr+" : "+content;//ip地址+评论内容


这一段是获取前端传递过来的数据以及设置相应的编码,同时获取用户发送信息的ip地址,将用户的ip地址以及发送的内容叠加起来,为后面存入list数组做准备
ServletContext application =this.getServletContext();//获取application--及整个网页使用ArrayList list = (ArrayList) application.getAttribute("list");//获取全局对象里面的list数组


这一段代码是获取整个web应用都可以使用的application1对象,那为什么要使用application对象呢?因为你的评论肯定是其他登录过该网站的人都能看到的吧,不可能你留个言,只能自己看,那就没有什么意思了。所以竟然是整个web应用的使用者都能看到,故的把我们留的言存储在application之中。


除此之外,这一段代码还用来获取application中的list数组变量,为后面存评论做准备

那你可能会说appliaction中不一定有该数组变量呀,所有返回一个null呀?   别急,咱们往后看。。。
 if(list!=null){
            list.add(combaniton);//如果该数组不为空则把用户评论以及用户ip地址加入加进去
        }else{
            list = new ArrayList();//如果不存在该list则创建一个
            list.add(combaniton);//并且将第一个用户评论加入数组中
        }
 application.setAttribute("list",list);//将又该过的list又再一次装回去
 response.sendRedirect("index1.jsp");


这一段代码就可以解决上一段的代码留下的问题了。


首先,我们对我们刚刚通过appication.getattribute(“list”)进行判断,看看它是否为空,如果为空说明,目前没有人留言,而且application中没有该数组list变量。所以我们设置了一个if判断语句,当数组为空时,我们创建一个新的数组,赋值给list数组变量,并将我们第一个用户的评论加入该数组之中,并且将list数组加入application变量之中,在将页面重定向到用户评论的页面。


如果list数组变量不为空,则说明当前评论的用户不是第一个评论的用户,而且applicaiton对象中有list数组变量。那么我们只需将用户的评论加入list数组之中,并且将修改过的list数组再次赋值该applicaition变量即可,然后再重定向到用户评论页面即可。