互联网软件开发—— 实验三 JSP 内置对象(留言板)

实验名称: 实验三 JSP 内置对象

一、实验目的

1、掌握表单提交及页面间参数传递的方法。
2、理解页面转发与重定向之间的区别。
3、掌握 request、session 和 application 等内置对象的常用 API。

二、实验内容和要求

1、对实验二的内容进行扩展,编写以下 JSP 文件。
(1) login.jsp:登录页面,如下图所示。
在这里插入图片描述

(2) doLogin.jsp:登录处理页面,假定合法的用户名均以“ahpu_”开头且长度介于 6 至 12,
密码均为“123”。若用户名或密码不正确则显示错误信息,否则重定向到 messageBoard.jsp。
(3) messageBoard.jsp:留言板页面,如下图所示。输入留言标题和留言内容,点击提交,转
发到 showMessage.jsp。
在这里插入图片描述

(4) showMessage.jsp:显示所有留言页面,如下图所示。
在这里插入图片描述

要求
(1) 登录成功后将用户名(即留言者)存于 session 下的某个 key 中,以便后面取出。
(2) messageBoard.jsp 必须含有登录检查逻辑,以防止用户通过地址栏直接访问该页面。
(3) 注意对留言标题、内容等表单参数中可能输入的特殊字符进行转义,如<、>、”分别转
义为<、>、"。
(4) 创建 Message 类用于封装留言信息,字段包括留言者、标题、内容、时间。
(5) 提交留言后将创建的 Message 对象添加到 application 下的某个 key 中(其对应 value 为
List 对象)。

三、实验步骤

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
	<style> 
	input[type=button], input[type=submit], input[type=reset] {
	  background-color: #4CAF50;
	  border: none;
	  color: white;
	  padding: 6px 16px;
	  text-decoration: none;
	  margin: 6px  2px 0px;
	  cursor: pointer;
	}
	input[type=text] ,input[type=password]{
	  width:60%;
	  padding: 8px 8px;
	  margin: 6px 2px;
	  box-sizing: border-box;
	  border: none;
	  background-color: #C0C0C0;
	  color: white;
	}
	div {
 	width: 30%;
  border:2px solid green;
  background-color: #f2f2f2;
  padding: 10px;
 
}
</style>
  </head>
  
  <body>
  <div>
<form action="doLogin.jsp" method="post">
 用户名:<input type="text" name="username"><br>&nbsp;&nbsp;令:<input type="password" name="password"><br>
 <input type="submit" value="登录">
 <input type="reset" value="重置">
</form>
	</div>
</body>
</html>

doLogin.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%
	String name=request.getParameter("username");
	String pass=request.getParameter("password");
	if(name.startsWith("ahpu_") && name.length()>=6 && name.length()<=12 && pass.equals("123")){
		session.setAttribute("username",name);//值为“username”的name传入session
		response.sendRedirect("messageBoard.jsp");
	}else
		out.print("用户名或者密码错误!");
%>

messageBoard.jsp
利用存入session的username属性是否为困判断是否登录,未登录,重定向到登录界面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<html>
</head>
<style>

input[type=text], select {
  width: 95%;
  padding: 12px 20px;
  margin: 8px 0;
  display: inline-block;
  border: 1px solid #ccc;
  border-radius: 4px;
  box-sizing: border-box;
}

input[type=submit] {
  width: 20%;
  background-color: #4CAF50;
  color: white;
  padding: 14px 20px;
  margin: 8px 0;

  border: none;
  border-radius: 4px;
  cursor: pointer;
}

input[type=submit]:hover {
  background-color: #45a049;
}

div {
 width: 60%;
  border:2px solid green;
  background-color: #f2f2f2;
  padding: 40px;
  border-radius:25px;
}
</style>
<body>
<%
	if(session.getAttribute("username") == null )//未登录用户,返回登录界面
		response.sendRedirect("login.jsp");
%>
<div>
	<form action="doMessage.jsp" method="post">
		标题:<br>
		<input type="text" name="title" placeholder="请填写标题"><br>
		内容	:<br>
		<textarea name="content" rows="5" cols="73"></textarea><br>
		<input style="float:right"   type="submit" value="提交">
	</form>
</div>
</body>
</html>

doMessage.jsp

<%@page import="lumen2.Message"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	request.setCharacterEncoding("utf-8");
	//获取Messagae对象的属性
	String title=request.getParameter("title");//request获取title属性的值
	String content=request.getParameter("content");//request获取content属性的值
	String name=session.getAttribute("username").toString();
	//把一个 Number 对象转换为一个字符串,并返回结果,session中获取session的值
	Date createTime= new Date();//系统获取时间
	
	Message message=new Message();
	//调用Message属性的set方法,将上面获得的值传入
	message.setName(name);
	message.setTitle(title);
	message.setContent(content);
	message.setCreateTime(createTime);
	
	List<Message> list=(List<Message>)application.getAttribute("messagelist");
	//创建类型为Message的集合,将application中获得的messagelist传入list中,
	//没有messagelist时,传入list的值为null
	if(list==null) //说明还没有留言
		list=new ArrayList<Message>();
	
	list.add(message);
	application.setAttribute("messagelist", list); //将list存入application	
	response.sendRedirect("showMessage.jsp");//重定向

%>

showMessage.jsp
利用for循环和html表格,将内容输出

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="lumen2.Mytools"%>
<%@page import="java.util.List"%>
<%@page import="lumen2.Message"%>
<html>
	<head>
		<style>
		table 
		{
    		border-collapse: collapse;
    		width:70%;
		}
		table, td, th
		{
			border:2px solid black;
		}
		th
		{
			background-color:green;
			color:white;
			height:35px;
			
		}
		td{
			text-align:center;
			vertical-align:center;
			height:30px;
			background-color:#C0C0C0;
		}
		
		</style>
	</head>
<body>

<%
List<Message> list=(List<Message>)application.getAttribute("messagelist"); //取出留言list
%>
<table >
	<tr>
		<th> # </th>
		<th>用户</th>
		<th>标题</th>
		<th>内容</th>
		<th>编辑日期</th>
	</tr>
	<%
	for(int i=0;i<list.size();i++){
		Message message=list.get(i);
	
	 %>
	 
	 <tr>
		<td><%=i+1 %></td>
		<td><%=message.getName() %></td>
		<td><%=Mytools.change(message.getTitle()) %></td>
		<td><%=Mytools.change(message.getContent()) %></td>
		<td><%=message.getCreateTime().toLocaleString() %></td>
	</tr>
	
	<%} %>
</table>
</body>
</html>

Mytools.java
工具类,将转义字符替换

package lumen2;

public class Mytools {
		public static String change(String str){
			str=str.replace("<","&lt;");
			str=str.replace(">","&gt;");
			str=str.replace("&","&amp;");
			str=str.replace("'","&apos;");
			str=str.replace("\"","&quot;");
			//转义字符
			return str;
		}	
}

Message.java

package lumen2;

import java.util.Date;

public class Message {
	private String name;
	private String title;
	private String content;
	private Date  createTime;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	
	
}

实验结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思考题:

简述转发与重定向的区别和联系。

请求转发: 跳转中不需要携带数据,推荐使用response.sendRedirect()方法
重新定向: 跳转中需要携带数据,推荐使用request.getRequestDispatcher(),共享一个request。

forward 是服务器端的跳转,从一个java程序转到了另一个java程序,所以此时request会被作为参数传递过去。
sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL,此时,request已经无效了。当然,此时session还是生效的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值