JSP———数据交互【1】
JSP的内置对象 不用声明就可以在JSP页面中使用
request对象
内置对象 request 封装了用户提交的信息,主要用于处理客户端请求
<FORM action="tom.jsp" method= “post” > <INPUT type="text" name="boy" value= “ok” > <INPUT TYPE="submit" value=" 送出" name= “submit”> </FORM>
Tom.jsp文件中request 对象可以使用 getParameter(String s) 方法获取该表单通过 text 提交的信息。比如:
request.getParameter(“boy”);
request 对象常用方法
request.getParameterValues(String name)是获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量,如checkobx类型
request.getParameter(String name)是获得相应名的数据,如果有重复的名,则返回第一个的值. 接收一般变量,如text类型
简例:
学生注册页面
<form name="form1" method="post" action="reginfo.jsp">
<table border="0" align="center">
<tr> <td>用户名</td><td> <input type="text" name="name"></td></tr>
<tr><td>密码</td><td > <input type="password" name="pwd"> </td></tr>
<tr> <td>信息来源</td><td>
<input type="checkbox" name="channel" value="报刊">报刊
<input type="checkbox" name="channel" value="网络">网络
<input type="checkbox" name="channel" value="朋友推荐"> 朋友推荐
<input type="checkbox" name="channel" value="电视"> 电视
</td></tr>
<!--省略提交、取消按钮 -->
</table>
</form>
reginfo.jsp
<%
//读取用户名和密码
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
……//HTML页面
//读取复选框选择项
String[] channels = request.getParameterValues("channel");
if (channels != null) {
for (String channel : channels) {
out.println(channel);
}
}
%>
结果发现都是乱码
中文乱码解决办法:
- 在页面设置支持中文字符的字符集,如:UTF-8
- 获取数据时解决中文乱码问题
也可以将获取的字符串用 ISO-8859-1 进行编码,并将编码存放到一个字节数组中,然后再将这个数组转化为字符串对象即可。如下列所示:
String str=request.getParameter("girl"); byte b[]=str.getBytes( “ISO-8859-1”); str=new String(b);
【在接收验证信息的文件中】
先执行setCharacterEncoding方法然后再执行getParameter()方法取值才有效。
response
作用:对客户的请求作出动态响应,向客户端发送数据
Response对象其实就是servlet中的HttpServletResponse的封装
页面重定向
void sendRedirect(String location) 客户端将重新发送请求到指定的URL
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("userName");
String pwd = request.getParameter("pwd");
if ("sa".equals(name) && "sa".equals(pwd))
response.sendRedirect("welcome.jsp"); //匹配后,跳转至欢迎页面
%>
使用转发实现页面跳转
实现页面跳转后,请求信息不丢失
转发的作用
在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理
转发的实现
RequestDispatcher对象的forward()方法
会话
一个会话就是在一段时间内,一个客户端与Web服务器的一连串相关的交互过程
当一个客户首次访问服务器上的一个 JSP 页面时,JSP 引擎产生一个 secssion 对象,
这个 session 对象调用相应的方法可以存储客户在访问各个页面期间提交的各种信息,比
如,姓名、号码等信息。这个 session 对象被分配了一个 String 类型的 Id 号,JSP 引擎
同时将这个 Id 号发送到客户端,存放在客户的 Cookie 中。这样,session 对象和客户之
间就建立起一一对应的关系,即每个客户都对应着一个 session 对象(该客户的会话),
这些 session 对象互不相同,具有不同的 Id 号码。我们已经知道,JSP 引擎为每个客户启
动一个线程,也就是说,JSP 为每个线程分配不同的 session 对象。当客户再访问连接该
服务器的其它页面时,或从该服务器连接到其它服务器再回到该服务器时,JSP 引擎不
再分配给客户的新 session 对象,而是使用完全相同的一个,直到客户关闭浏览器后,服
务器端该客户的 session 对象被取消,和客户的会话对应关系消失。当客户重新打开浏览
器再连接到该服务器时,服务器为该客户再创建一个新的 session 对象
Session对象在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效
在page指令配置如下信息,session对象将不可使用
<%@page session="false" %>
session 对象能和客户建立起一一对应关系依赖于客户的浏览器是否支持 Cookie。如
果客户端(浏览器)不支持 Cookie,那么客户在不同网页之间的 session 对象可能是互不相同的,因为服务器无法将 Id 存放到客户端,就不能建立 session 对象和客户的一一对应关系。
session 对象的常用方法:
(1) public void setAttribute(String key ,Object obj)
session 对象调用setAttribute方法将对象 obj添加到 session 对象中,如果添加的两个对象的关键字相同,则先前添加的对象被清除
(2) Object getAttibue(String key)
如果客户的浏览器不支持 Cookie,我们可以通过 URL 重写来实现 session 对象的唯
一性。
所谓 URL 重写,就是当客户从一个页面重新连接到一个页面时,通过向这个新的
URL 添加参数,把 session 对象的 Id 传带过去,这样就可以保障客户在该网站各个页面
中的 session 对象是 完 全 相 同 的。可以使用 response 对象 调 用 encodeURL() 或
encodeRedirectURL()方法实现 URL 重写,比如,如果从 tom.jsp 页面连接到 jerry 页
面,首先实现 URL 重写:
String str=response.encodeRedirectURL("jerry.jsp");
然后将连接目标写成<%=str%>
session对象常用方法:
session和窗口的关系
- 每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建一个session对象
- 通过超链接打开的新窗口,新窗口的session与其父窗口的session相同
使用session实现访问控制
1.在控制页面获取用户请求的登录信息进行验证
<%
if ("admin".equals(name) && "admin".equals(pwd)) { // 如果是已注册用户
session.setAttribute("login", name); //在session 中存放用户登录信息
// 设置session过期时间
session.setMaxInactiveInterval(10*60);
request.getRequestDispatcher("admin.jsp").forward(request, response);
} else {
response.sendRedirect("index.jsp");
}
%>
2.在管理页面增加登录验证
<%
String login = (String) session.getAttribute("login");
if (login == null) {
response.sendRedirect("index.jsp");
return;
} %> //如果session中不存在用户的登录信息,转入登录页面
session.getAttribute(String key)方法的返回值是一个Object,必须进行强制类型转换
session对象的失效
include指令
Include指令是 静态包含
静态包含:
因为include包含了head.jsp和foot.jsp文件,所以在执行1.jsp文件时会把head.jsp和foot.jsp文件的代码内容先包含进来,然后再编译!
因此,插入head.jsp和foot.jsp文件后,必须保证新合并成的JSP 页面符合 JSP 语法规则,即能够成为一个 JSP 页面文件。比如,如果一个 JSP 页面使用 include 指令插 入另一个 JSP 文件,被插入的这个 JSP 页面中有一个设置页面contentType 属性的 page 指令:
<%@ page contentType="text/html;charset=GB2312" %>,
而当前 JSP 页面已经使用 page 指令设置了 contentType 的属性值,那么新合并的JSP页面就出现了语法错误,当转译合并的 JSP 页面到 Java 文件时就会失败.
前提条件:head.jsp和foot.jsp文件必须和1.JSP 页面在同一 Web 服务目录中。
另一种包含文件的方式:JSP行为(动态包含)
JSP行为(也叫:jsp标签)是一组JSP内置的标签,JSP标签是对常用的JSP功能的抽象和封装。
- 其实include标签就是封装了request.getRequestDispatcher(String url).include(request,response)
- include标签语法是这个样子的
<jsp:include page="文件的名字"/> 或 <jsp:include page= “文件的名字”> </jsp:include>
例如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>包含页头和页尾进来</title>
</head>
<body>
<jsp:include page="head.jsp"/>
<jsp:include page="foot.jsp"/>
</body>
</html>
说明:
动态包含是:先编译被包含的页面(head.jsp和foot.jsp文件),再将结果写入到包含的页面中(1.jsp)
现在有静态包含和动态包含,使用哪一个更好呢?答案是:动态包含。
因为动态包含是将被包含页面分别编译后得出的结果再写进包含页面,可以避免报错【如果head.jsp和foot.jsp文件有相同名称的变量,使用静态包含就会报错!】
注意:
书写 include 动作标签:<jsp:include page …../>时要注意:“jsp”、“:”、
“include”三者之间不要有空格。
如果其它页面中同样需要加入登录验证————可将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件
1.创建登录验证文件 loginControl.jsp
<%
String login = (String) session.getAttribute("login");
if (login == null) {
response.sendRedirect("index.jsp");
return;
} %>
2.引用登录验证文件
<%@ include file="loginControl.jsp" %>
out 对象
out对象是一个输出流,用来向客户端输出数据。与之对应的是Servlet的PrintWriter对象。
out.print(long),out.println(long) :输出一个长整型数据。
out.print(String),out.println(String) :输出一个字符串对象的内容。
out.newLine() :输出一个换行符
out.flush() :输出缓冲区里的内容
out.close() :关闭流
只有向out对象中写入了内容,且满足如下任何一个条件时内容才真正写入到Servlet中。
- 设置page指令的buffer属性关闭了out对象的缓存功能
- out对象的缓冲区已满
- 整个JSP页面结束
一般我们在JSP页面输出都是用表达式(<%=%>),所以out对象用得并不是很多
JSP———数据交互【1】的更多相关文章
- JSP数据交互
JSP数据交互 一.jsp中java小脚本 1.<% java代码段%> 2.<% =java表达式%>不能有分号 3.<%!成员变量和函数声明%>二.注释 1 ...
- #学习笔记#JSP数据交互
#学习笔记#JSP数据交互 数据库的使用方式: 当用户在第一个页面的查询框输入查询语句点提交的时候我们是用什么样的方式完成这个查询的? 答:我们通过在第一个页面提交表单的形式,真正的数据库查询时在 ...
- JSP/Servlet开发——第二章 JSP数据交互(一)
1. JSP内置对象:JSP内置对象是 Web 容器创建的一组对象: ●JSP常用的内置对象:out.request.application.session.response等: ●内置对象不需要 ...
- jsp数据交互(一).2
01.什么是JSP内置对象(jsp核心)? Java 内置对象 Java 作用域 解析:jsp内置对象是web容器创建的一组对象.我们都知道tomcat这款软件可以看成是一种web容器,所以我们可以 ...
- 第二章 jsp数据交互(一)
JSP如何处理客户端的请求? 解析:通过jsp内置对象 表单数据被提交到了jsp页面! 什么是JSP内置对象(jsp核心)? Java 内置对象 Java 作用域 解析:jsp内置对象是web容器创 ...
- JSP数据交互(二)和Servlet基础
01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...
- jsp数据交互(一),九大内置对象
九大内置对象 九大内置对象 内置对象 类型 说明 作用域 request javax.servlet.ServletRequest 请求对象——在 一次请求/一个Request请求周期 中传递数据,请 ...
- JSP数据交互——九大内置对象及其方法详解(一)
①既然说到JSP内置对象,那么什么是JSP内置对象呢? 解析:JSP内置对象,就是在编写JSP页面时,不需要做任何声明就可以直接使用的对象. 如下代码片段: <% int[] value ...
- JSP数据交互(一)
1.JSP内置对象 请求对象:request 输出对象:out 响应对象:response 应用程序对象:application 会话对象:session 页面上下文对象:pageContext 页面 ...
随机推荐
- 理解BurpSuit Intruder几种攻击方式
Intruder标签下有四种攻击方式 Sniper Battering Ram Pitchfork Cluster Bomb 假设用户名密码词典分别如下: user1,user2,usre3 pass ...
- robots.txt防止向黑客泄露网站的后台和隐私
为了不让搜索引擎索引网站的后台页面或其它隐私页面,我们将这些路径在robots.txt文件中禁用了.但矛盾的是,robots.txt文件任何人都可以访问,包括黑客.为了禁止搜索引擎,我们把隐私泄露给了 ...
- Web Api 接口测试工具:WebApiTestClient
前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点多,每 ...
- php:页面乱码的解决方法
在 <?php header("Content-Type:text/html;charset=utf-8"); ////设置页面显示的文字编码 头部就写header函数处理成 ...
- linux命令历史
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- vue项目中引入vant 使用rem布局问题
postcss.config.js const autoprefixer = require('autoprefixer') const pxtorem = require('postcss-pxto ...
- LAMP 系统性能调优之内核调优措施
LAMP 系统性能调优之内核调优措施 2011-03-18 11:21 Sean A. Walberg 网络转载 字号:T | T 在对系统的 Apache.PHP 和 MySQL 组件进行调优之前, ...
- hdu 6377 : 度度熊看球赛
题目链接 题解: 将原问题转换为 对于全部 (2n)! 种情况,每种情况对ans的贡献为 D^k,其中k表示该情况下有k对情侣座位相邻. 预处理好共有 i (1<=i<=N)对情侣时,出现 ...
- lazarus 连接mysql5.7 (deepin linux)
在mysql下载站点下载驱动文件:libmysqlclient20_5.7.28-1debian9_amd64 64位 ,1.5M 安装后,lazarus IDE 就可以直接连MYSQL ...
- python深度学习:矩阵转置(transpose)
转置:即行列转换. import numpy as np import matplotlib.pyplot as plt C=np.array([[1,2,3],[4,5,6]]) # Display ...