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" >
<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" >
<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变量即可,然后再重定向到用户评论页面即可。