JAVAWEB_实验二 JSP 的内置对象

news2024/10/3 6:37:22

文章目录

  • 一、Part 1 JSP 的内置对象
    • 一、实验目的
    • 二、实验要求
    • 三、实验内容
  • 二、Part 2 JSP 的内置对象
    • 一、实验目的
    • 二、实验要求
    • 三、实验内容
  • 思考:页面重定向有哪些方式?区别时什么?

一、Part 1 JSP 的内置对象

一、实验目的

通过编程和上机实验理解 JSP 各个页面之间的响 应和传递的过程。并且能够熟练的掌握 JSP 的内置对象的属性和方法,并能灵活运用。

二、实验要求

1. 基础练习:request 常用方法的使用。
2. 编写获取表单数据。

三、实验内容

(一)基础练习:request 常用方法的使用
1.用 request 的各种方法输出 request 中的各种方法,新建页面 requestApp.jsp 源代码如下:

<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<html>
<head>
</head>
<body>
请求信息如下:<br>
请求的方法是:<%=request.getMethod()%>
<br>
请求的 URI:<%=request.getRequestURI()%>
<br>
请求的协议是:<%=request.getProtocol()%>
<br>
接受客户提交信息的页面路径是:<%=request.getServletPath()%>
<br>
请求的协议是:<%=request.getProtocol()%>
<br>
请求中的查询字符串是:<%=request.getQueryString()%>
<br>
请求信息的总长度是:<%=request.getContentLength()%>
<br> 服务器名称是:<%=request.getServerName()%>
<br>
提供 HTTP 服务的服务器端口号是:<%=request.getServerPort()%>
<br>
客户端 IP 地址是:<%=request.getRemoteAddr()%>
<br>
客户端机器的名称是:<%=request.getRemoteHost()%>
<br>
HTTP 头文件中 User-Agent 的值是:<%=request.getHeader("User-Agent")%>
<br>
HTTP 头文件中 servlet.accept 的值是:<%=request.getHeader("servlet.accept")%>
<br>
HTTP 头文件中 Host 的值是:<%=request.getHeader("Host")%>
<br>
HTTP 头文件中 servlet.accept-encoding 的值是:<%=request.getHeader("servlet.accept-encoding")%>
<br>头名字的一个枚举:
<% Enumeration enumHead = request.getHeaderNames();
    while (enumHead.hasMoreElements()) {
        out.println((String) enumHead.nextElement());
    }
%>
<br>头文件中指定头名字的全部值的一个枚举:
<% Enumeration enum_headedValues = request.getHeaders("cookie");
    while (enum_headedValues.hasMoreElements()) {
        out.println((String) enum_headedValues.nextElement());
    }
%>
</body>
</html>```

# 二、Part 2  JSP 的内置对象
Part 1   JSP 的内置对象## 1.引入库
代码如下(示例):

```c
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

运行结果:
在这里插入图片描述
(二)获取表单数据
1.建立一个新的WEB工程,再建立一个 Register.jsp 和 Accept.jsp。
(1) 程序功能:实现页面与页面之间的信息交换。
(2) 程序源代码如下:
Register.jsp:

<%@ page contentType="text/html;charset=gb2312" %>
<script language="javascript">  function on_submit() {//验证数据的合法性
    if (form1.username.value == "") {
        alert("用户名不能为空,请输入用户名!");
        form1.username.focus();
        return false;
    }
    if (form1.userpassword.value == "") {
        alert("用户密码不能为空,请输入密码!");
        form1.userpassword.focus();
        return false;
    }
    if (form1.reuserpassword.value == "") {
        alert("用户确认密码不能为空,请输入密码!");
        form1.reuserpassword.focus();
        return false;
    }
    if (form1.userpassword.value != form1.reuserpassword.value) {
        alert("密码与确认密码不同");
        form1.userpassword.focus();
        return false;
    }
    if (form1.email.value.length != 0) {
        for (i = 0; i < form1.email.value.length; i++)
            if (form1.email.value.charAt(i) == "@")
                break;
        if (i == form1.email.value.length) {
            alert("非法 EMail 地址!");
            form1.email.focus();
            return false;
        }
    } else {
        alert("请输入 Email!");
        form1.email.focus();
        return false;

    }
}
</script>
<html>
<head>
    <title>新用户注册</title>
</head>
<body>
<form method="POST" action="accept.jsp" name="form1" onsubmit="return on_submit()">
    新用户注册<br>
    用户名(*)<input type="text" name="username" size="20"><br>&nbsp;(*)<input type="password" name="userpassword" size="20"><br>
    再输一次密码(*)<input type="password" name="reuserpassword" size="20"><br>
    性别:<input type="radio" value="男" checked name="sex"><input type="radio" name="sex" value="女"><br>
    出生年月:<input name="year" size="4" maxlength=4><select name="month">
        <option value="1" selected>1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="8">7</option>
        <option value="9">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
    </select><input name="day" size="3" maxlength=4><br>
    电子邮箱(*)<input name="email" maxlength=28><br>
    家庭住址:<input type="text" name="address" size="20"><br>
    <input type="submit" value="提交" name="B1">
    <input type="reset" value="全部重写" name="B2"><br>
</form>
</body>
</html>

Accept.jsp:

<%@ page contentType="text/html;charset=gb2312" %>
<%!
    public String codeToString(String str) {//处理中文字符串的函数
        String s = str;
        try {
            byte tempB[] = s.getBytes("ISO-8859-1");
            s = new String(tempB);
            return s;
        } catch (Exception e) {
            return s;
        }
    }
%>
<html>
<head>
    <title>接收新用户注册</title>
</head>
<body>
这是新用户注册所提交的数据:
<br>
用户名是:<%=codeToString(request.getParameter("username"))%><br>
密码是:<%=codeToString(request.getParameter("userpassword"))%><br>
性别是:<%=codeToString(request.getParameter("sex"))%><br>
出生年月是:<%=request.getParameter("year") + request.getParameter("month") + request.getParameter(" day")%><br>
电子邮箱是:<%=request.getParameter("email")%><br>
家庭住址是:<%=codeToString(request.getParameter("address"))%><br>
</body>
</html>

运行结果:
在这里插入图片描述
在这里插入图片描述

二、Part 2 JSP 的内置对象

一、实验目的

通过编程和上机实验理解 JSP 各个页面之间的响应和传递的过程。并且能够熟练的掌握 JSP 的内置对象的属性和方法,并能灵活运用。

二、实验要求

1.编写页面重定向程序。
2.编写 session 属性设置和获取的程序。
3.编写用 out 对象输出表格程序。

三、实验内容

(一)页面重定向
1.在建立的 WEB 工程中建立 Redirect.jsp 文件, 程序功能:实现页面的重定向。 Redirect.jsp 程序的源代码如下。
Redirect.jsp:

<%@ page contentType="text/html;charset=gb2312" %>
<html>
<body>
<%
    //页面重定向程序片
    String url;
    url = request.getParameter("goaddress");
    if (url != null) {
        response.sendRedirect(url);
    }
%>
<form name="form1" action="Redirect.jsp" method="post">
    页面重定向:
    <select name="goaddress" onchange="javascript:form1.submit()">
        <option value="">========请选择========</option>
        <option value="http://www.csai.cn">中国系统分析员</option>
        <option value="http://www.51cmm.com">软件工程专家网</option>
        <option value="http://www.glut.edu.cn">桂林理工大学</option>
        <option value="http://www.csdn.net">中国程序员</option>
    </select>
</form>
</body>
</html>

运行结果:
在这里插入图片描述
(二)session 属性设置和获取
在建立的 WEB 工程中建立 Login.jsp 和 LoginInfor.jsp 文件。 程序功能:实现 session 属性在整个页面缓存信息的保存和销毁。 程序源代码如下:
Login.jsp:

<%@ page contentType="text/html;charset=gb2312" %>
<script language="javascript">
    function on_submit() {//验证数据的合法性
        if (form1.username.value == "") {
            alert("用户名不能为空,请输入用户名!");
            form1.username.focus();
            return false;
        }
        if (form1.userpassword.value == "") {
            alert("用户密码不能为空,请输入密码!");
            form1.userpassword.focus();
            return false;
        }
    }
</script>
<%!
    public String codeToString(String str) {//处理中文字符串的函数
        String s = str;
        try {
            byte tempB[] = s.getBytes("ISO-8859-1");
            s = new String(tempB);
            return s;
        } catch (Exception e) {
            return s;
        }
    }
%>
<%
    String username = request.getParameter("username");
    String userpassword = request.getParameter("userpassword");
    if (username != null & userpassword != null) {//如果用户名和密码都合法,记下用户名,一般把用户和密码存在数据库中,
        //用数据库中的信息与提交的用户名和密码比较以进行用户合法性检查,
        //这些内容在后续章节中会继续学习
        session.setAttribute("username", codeToString(username));
        response.sendRedirect("LoginInfo.jsp");
    }
%>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
<table aligin="center">
    <form name="form1" method="post" action=" Login.jsp" onsubmit="return on_submit()">
        <tr aligin="center">
            <td>
                用户登录
            </td>
        </tr>
        <tr aligin="center">
            <td>
                请输入用户名:<input type="text" name="username" size="20">
            </td>
        </tr>
        <tr aligin="center">
            <td>
                请输入密码:&nbsp;&nbsp;<input type="password" name="userpassword" size="20">
            </td>
        </tr>
        <tr aligin="center">
            <td>
                <input type="submit" value="提交" name="B1">
                <input type="reset" value="全部重写" name="B2">
            </td>
        </tr>
    </form>
</table>
</body>
</html>

LoginInfor.jsp:

<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
    <title>用户登录成功</title>
</head>
<body>
用户登录成功!<br>
您的用户名是:<%=(String)session.getAttribute("username")%>
</table>
</body>
</html>

运行结果:
在这里插入图片描述
在这里插入图片描述
(三)用 out 对象输出表格程序
在建立的WEB工程中建立Outapp.jsp文件 程序功能:通过使用out输出静态表格,从而掌握利用内置对象实现静态网页的方法。
Outapp.jsp:

<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<head>
    <title>out应用示例</title>
</head>
<BODY><%
    out.print("<table border='1' width='100%'><tr><td width='100%' colspan='4'>");
    out.print("参会人员名单(用out输出表格)" + "</tr>");
    out.print("<tr><td width='25%'>" + "姓名" + "</td>");
    out.print("<td width='15%'>" + "年龄" + "</td>");
    out.print("<td width='15%'>" + "性别" + "</td>");
    out.print("<td width='45%'>" + "工作单位" + "</td></tr>");
    out.print("<tr><td width='25%'>" + "张弛华" + "</td>");
    out.print("<td width='15%'>" + "20" + "</td>");
    out.print("<td width='15%'>" + "男" + "</td>");
    out.print("<td width='45%'>" + "桂林理工大学" + "</td></tr>");
    out.print("<tr><td width='25%'>" + "张赐" + "</td>");
    out.print("<td width='15%'>" + "27" + "</td>");
    out.print("<td width='15%'>" + "男" + "</td>");
    out.print("<td width='45%'>" + "长沙凌科远信科技有限公司 " + "</td></tr>");
    out.print("<tr><td width='25%'>" + "袁树雄" + "</td>");
    out.print("<td width='15%'>" + "31" + "</td>");
    out.print("<td width='15%'>" + "男" + "</td>");
    out.print("<td width='45%'>" + "计算机学院" + "</td></tr>");
    out.print("</table>");
%>
</BODY>
</HTML>

运行结果:
在这里插入图片描述

思考:页面重定向有哪些方式?区别时什么?

答:

  1. RequestDispatcher.forward():在服务器端起作用,重定向后浏览器地址栏URL不变。通常在servlet中使用,不在jsp中使用。
  2. response.sendRedirect() :在用户的浏览器端工作, 重定向后在浏览器地址栏上会出现重定向页面的URL!使用response.sendRedirect时,前面不能有HTML输出; response.sendRedirect之后,应该紧跟一句return。
  3. <jsp:forward page=“” /> :它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。除此之外,如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用。并且它不能改变浏览器地址,刷新的话会导致重复提交。
  4. 修改HTTP header的Location属性来重定向,通过设置直接修改地址栏来实现页面的重定向。
  5. JSP中实现在某页面停留若干秒后,自动重定向到另一页,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法刷题打卡第33天:香槟塔

香槟塔 难度&#xff1a;中等 我们把玻璃杯摆成金字塔的形状&#xff0c;其中第一层有 1 个玻璃杯&#xff0c;第二层有 2 个&#xff0c;依次类推到第 100 层&#xff0c;每个玻璃杯 (250ml) 将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&#xff0c;当顶层的杯子满…

【JavaWeb】Servlet系列 --- 使用纯Servlet做一个单表的CRUD操作(oa小项目,超详细笔记)

使用纯Servlet做一个单表的CRUD操作实现步骤第一步&#xff1a;准备一张数据库表&#xff08;sql脚本/可视化工具&#xff09;第二步&#xff1a;准备一套HTML页面&#xff08;页面原型&#xff09;【前端开发工具使用vscode / IDEA】第三步&#xff1a;分析我们这个系统包括哪…

分布式共识协议 Raft 是如何工作的?

Raft 解决的问题 提供一种共识算法&#xff08;分布式一致性算法&#xff09;。 Paxos是早先的一个分布式共识算法&#xff0c;Paxos 逻辑复杂而难以理解和实现。相比早先的 Paxos&#xff0c; Raft 提供一个容易理解和实现的共识算法&#xff0c;在很多的系统比如 etcd, ozon…

力扣hot100——第3天:11盛最多水的容器、21合并两个有序链表、22括号生成

文章目录1.11盛最多水的容器1.1.题目1.2.解答1.2.1.题解1.2.2.自己对参考题解的进一步解释2.21合并两个有序链表2.1.题目2.2.题解3.22括号生成3.1.题目3.2.题解1.11盛最多水的容器 参考&#xff1a;力扣题目链接&#xff1b;题解 1.1.题目 1.2.解答 1.2.1.题解 这道题目可以…

GIS工具maptalks开发手册(一)——hello world初始化

GIS工具maptalks开发手册(一)——hello world初始化 为何使用maptalks&#xff1f; ​ Maptalks项目是一个HTML5的地图引擎, 基于原生ES6、Javascript开发的二三维一体化地图。 通过二维地图的旋转、倾斜增加三维视角&#xff0c;通过插件化设计, 能与其他图形库echarts、d3.…

微信小程序实战十四:小程序及APP端实现客服功能

文章目录 1.效果预览2.小程序后台添加客服3.小程序代码中集成客服4.APP中添加客服5.企业微信登陆6.获取企业ID值7.设置多客服说明:项目用uni开发的,有小程序版本和APP版本,最开始项目中集成了第三方美洽的客服,2个客服一年收3600,老哥咨询我是否有稍微优惠点的方案,老哥带…

QuEra将研发可重构中性原子量子计算机

&#xff08;图片来源&#xff1a;网络&#xff09; 上个月&#xff0c;借助Amazon Braket&#xff0c;QuEra Computing开始提供对其中性原子量子系统Aquila的访问, Aquila具有256个量子比特。如今&#xff0c;量子公司的数量与日俱增&#xff0c;QuEra是其中之一&#xff0c;它…

java httpclient的digest验证(可恨,找遍全网没有靠谱的,不是少包就是少文件。含泪整理o(╥﹏╥)o~~~~)

背景&#xff1a;调用第三方接口&#xff0c;使用的是digest auth鉴权方式&#xff0c; basic auth和digest auth比较&#xff1a; basic认证是把用户和密码通过base64加密后发送给服务器进行验证。 Basic认证过程简单&#xff0c;每次请求都有发送密码。安全性较低。 为了解决…

[附源码]JAVA毕业设计衡师社团管理系统(系统+LW)

[附源码]JAVA毕业设计衡师社团管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【allegro 17.4软件操作保姆级教程八】布线操作基础之三

目录 1.1扇出操作 1.2差分对过孔间距调整 1.3差分线换层自动添加回流过孔 1.4多人协同操作 1.5导入pin delay 1.6走线导圆弧 1.1扇出操作 关于信号扇出有如下一些需要注意的点&#xff1a; 1、过孔扇出要考虑其间距&#xff0c;要求2个过孔之间保证能过一根信号线&#x…

java+jsp基于ssm的校园OTO超市系统-计算机毕业设计

项目介绍 本网站主要是针对高校学生以超市购物为重点开发的网站。系统从用户上分为三种&#xff1a;卖家、买家和游客。系统从模块分为买家模块和卖家模块&#xff0c;买家模块包括用户注册登录、商品浏览、商品详情、商品加入购物车、购物车中商品删除、购物车商品数量变更、…

vue 微信登录

文章目录前言一、第一步用户授权获取code1、PC扫码方式一方式二&#xff1a;踩坑记录2、移动端微信内置浏览器授权获取code二、第二步 通过code获取access_token三、获取用户个人信息前言 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信…

没想到吧,Spring中还有一招集合注入的写法

Spring作为项目中不可缺少的底层框架&#xff0c;提供的最基础的功能就是bean的管理了。bean的注入相信大家都比较熟悉了&#xff0c;但是有几种不太常用到的集合注入方式&#xff0c;可能有的同学会不太了解&#xff0c;今天我们就通过实例看看它的使用。 首先&#xff0c;声…

[附源码]JAVA毕业设计衡水特产展销系统(系统+LW)

[附源码]JAVA毕业设计衡水特产展销系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

正则匹配删除指令

// 删除以 SameSeed 开头的整行 ^SameSeed.*$执行前&#xff1a; 执行后&#xff1a; 这样我们就可以在代码发布时删除代码中所有的调试信息&#xff0c;使代码中不包含任何 DEADCODE&#xff0c;但这样会导致一个问题&#xff0c;就是会出现一个空行&#xff0c;同时代码中…

生命在于学习——docker逃逸

注意&#xff1a;本篇文章仅用于学习记录&#xff0c;不得用于其他用途。 一、docker逃逸 docker逃逸就是从当前docker容器权限中逃逸出来&#xff0c;获得宿主机的权限。 二、常见的逃逸方法 1、配置不当引起的逃逸 &#xff08;1&#xff09;Docker Remote API未授权访问…

jsp汽车租赁管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

一、源码特点 jsp汽车租赁管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库sqlserver2008&#xff…

应用现代化方案实践,重塑企业应用价值—工业篇

应用现代化是指通过更现代和新兴的IT技术来改造或部署传统应用&#xff0c;从而使应用更适合企业发展的一种优化方式。在企业上云背景下&#xff0c;应用现代化改造是将遗留的传统应用改造升级到云计算环境&#xff0c;从而兼容更现代和新兴的计算技术的过程。这种改造升级的同…

软件测试分类

1、是否关注源代码 黑盒测试 - 不关注代码逻辑&#xff0c;只关注输入输出 白盒测试 - 看代码的具体实现逻辑 灰盒测试 - 既关注输入输出&#xff0c;也关注代码 2、基于测试的不同阶段 单元测试 - 在底层进行的测试&#xff0c;又称模块测试&#xff08;module testing&a…

python数组处理方法

一、数组对象的属性 数组的大小&#xff08;元素个数&#xff09; array.size数组的维度 array.ndim数组元素的数据类型 array.dtype数组的形状 array.shape数组中每个元素占用的内存空间 array.itemsize数组所有元素占用的内存空间&#xff08;字节&#xff09; array.nbytes…