实验名称: 实验三 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传入sessionresponse.sendRedirect("messageBoard.jsp");}elseout.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的值为nullif(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还是生效的。

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

  1. Jsp内置对象及EL表达式的使用

    一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...

  2. jsp内置对象【02】四种内置对象【02】session、application

    我们继续来学习,上一篇文章中说到了request属性,那么既要想客户端和服务端都都能实现跳转的话,就用到了session. 第三种:session属性 我们接着修改一下上一篇文章中的代码来对比一下: ...

  3. java遇上html,JAVA遇见HTML——JSP篇:JSP内置对象(上)

    JSP九大内置对象 JSP内置对象是Web容器创建的一组对象,不使用new关键就可以使用的内置对象. int[] value={60,70,80}; for(int i:value){ out.pri ...

  4. JSP内置对象:request、response、out、session、application等内置对象

    Java程序的功能主要是由Java包下的各个类在运行期所产生的对象所提供,并且应用这些对象组织构建程序所需的功能. 所谓JSP内置对象,是指在JSP网页环境之下,用户不需要声明而直接可以在JSP网页中 ...

  5. JavaWeb第三讲 JSP内置对象、基本动作指令、常见编译指令及四大作用域

    JSP内置对象.基本动作指令.常见编译指令及四大作用域 (一) JSP工作原理 当一个jsp页面第一次被访问的时候,jsp将执行以下三个步骤,之后的访问速度会因为class文件已经生成而大大提高,当j ...

  6. Java Web复习——task03:JSP 内置对象和生命周期

    文章目录 前言 一.JSP内置对象 1.1 HttpServletRequest类和Request对象 1.2 HttpServletResponse类和Response对象 1.3 JspWrite ...

  7. JAVA Web入门之JSP内置对象的解析及使用(超详细必看)

    创作不易 觉得有帮助请点赞关注收藏~~ 概述:由于JSP使用java作为脚本语言 所以JSP具有强大的对象处理能力 并且可以动态创建web页面内容 但java语言在使用一个对象前  需要先实例化这个对 ...

  8. jsp内置对象+Servlet

    一,jsp内置对象 1. request:请求对象: request.getParameter();得到一个参数:获得提交表单中唯一的值: request.getParameterValues();得 ...

  9. [02] JSP内置对象

    1.内置对象的来历 JSP是由一些内置对象的,即不需要定义,也不需要我们主动创建,就可以直接使用的对象.当然,其对象名称也是固定的,无法修改,我们可以直接调用其相关方法. 在 [01] JSP的基本认 ...

最新文章

  1. 马腾宇的AI学术历程:做科研要考虑长期的影响力
  2. 2021年春季学期-信号与系统-第九次作业参考答案-第三小题
  3. 微软热门知识点之------c#3.0新特性【转】
  4. 七步精通Python机器学习
  5. 10 行代码构建常见目标检测应用
  6. linux中脚本引入计算bc,linux BC命令行计算器
  7. IDEA 分享项目到 Git@OSC/GitHub
  8. Mysql8.0安装+navicat for Mysql安装+navicat for Mysql。
  9. L2-012 关于堆的判断(模拟堆+字符串处理)
  10. 6月份个人:修改Windows系统多人使用多账号同时远程登陆 并修改脚本自动生成每个用户登录日志。...
  11. 基于spring reactor3构建的即时通讯api。
  12. 3ds max 2020 vray 5.0 渲染设置
  13. 计算机网络数据通信部分之网络层IP报文格式解析
  14. 2016 Multi-University Training Contest 2 1012 La Vie en rose (暴力)
  15. 淘淘商城第77讲——实现商品详情页面展示
  16. Powell算法、Powell修正算法_matlab仿真
  17. 12天背诵楞严咒的技巧_楞严咒快速背诵方法,我试了n种,最后选择了这些土方法...
  18. 【学算法的辅助练习1】北大POJ2388:Who‘s in the Middle
  19. Windows7安装IE11步骤和中文安装包超简单
  20. 好心情患者故事|致抑郁症患者:我们能被治愈,也值得被爱

热门文章

  1. 12:CORS跨域设置-Java Spring
  2. 使用计算机日常注意事项,笔记本电脑日常维护注意什么笔记本电脑维护注意事项介绍【详解】...
  3. Excel教程(13) - 统计函数
  4. 粽子节的来历(人们说的端午节)
  5. 成功创业的“六字真言”
  6. 批量清除Maven本地仓库下载失败的垃圾文件
  7. VFP读写MifareOne IC卡 M1卡
  8. 3分钟教会你如何将不同表格中的数据关联在一起
  9. python——socket编程
  10. 微信小程序在真机上发起网络请求失败