·· 在JSP中为了简化用户的开发,提供了9个内置对象,这些内置对象将由容器自动为用户进行实例化,用户直接使用即可
setAttribute(String name, Object value,int scope);此方法可以设置属性并且指定属性的保存方法,此方法是pageContext特有的,其他三个属性范围对象没有。其中scope代表范围,取值:
<body>
<%
pageContext.setAttribute("info1", "pageContext.helloword");
%>
info1:<%=pageContext.getAttribute("info1") %>
<a href="MyJsp.jsp">客户端跳转a>
<jsp:forward page="MyJsp.jsp">jsp:forward>
body>
只在服务器跳转内有值
本质上是因为服务器访问只响应一次;request得属性值保存在这一次响应中;客户端需要服务器两次响应;故访问不到。
index.jsp
<body>
<%
request.setAttribute("info1", "request.helloword");
%>
info1:<%=request.getAttribute("info1") %>
<a href="MyJsp.jsp">客户端跳转a>
<jsp:forward page="MyJsp.jsp">jsp:forward>
body>
MyJsp.jsp
<body>
info: <%=request.getAttribute("info1") %>
This is my JSP page. <br>
body>
限制条件是一次会话内,在一次会话内不管是服务器跳转还是客户端跳转,都能正常传值。
本页面显示和客户端跳转
<body>
<%
session.setAttribute("info1", "session.helloword");
%>
info1:<%=session.getAttribute("info1") %>
<a href="MyJsp.jsp">客户端跳转a>
body>
跳转后得页面
<body>
info: <%=session.getAttribute("info1") %>
This is my JSP page. <br>
body>
服务器跳转 直接跳转;不等页面加载完
<body>
<%
session.setAttribute("info1", "session.helloword");
%>
info1:<%=session.getAttribute("info1") %>
<jsp:forward page="MyJsp.jsp">jsp:forward>
body>
页面Jsp.jsp
<body>
info: <%=session.getAttribute("info1") %>
This is my JSP page. <br>
body>
作用范围是服务器启动;关闭后在重启参数就无效了
本页面上显示Applicatuon设置参数
<body>
info:<%
application.setAttribute("info","application.hello");
%>
innfo:<%=application.getAttribute("info") %>
body>
跳转后得 MyJsp页面上显示参数。
客户端上跳转也显示
<%@ page language="java" import="java.util.*"
pageEncoding="UTF-8"%> <% String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html> <head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting pagetitle> <meta http-equiv="pragma" content="no-cache">
<meta
http-equiv="cache-control" content="no-cache"> <meta
http-equiv="expires" content="0"> <meta
http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<% info:
application.setAttribute("info","application.hello"); %>
innfo:<%=application.getAttribute("info")
%>
<a href="MyJsp.jsp">客户端跳转a>
body> html>
只有重启就不好使了
setAttribute(String name,Object value,int scope);
方法可以设置属性,并且指定属性得保存方法/
scope:
1.APPLICATION_SCOPE:代表application范围
2.SESSION_SCOPE:代表session范围
3.REQUEST_SCOPE:代表request范围
4.PAGE_SCOPE:dai表page范围
<body>
<%
pageContext.setAttribute("info","world",pageContext.APPLICATION_SCOPE);
%>
需要记住对象类型得名称
javax.servlet.http HTTPServletRequest接口实例化来的对象
HTTPServletRequest是ServletRequest得子接口;
看request对象得方法 需要查看俩接口得方法。
我们不需要创建对象,web容器已经帮我们创建好了
HTTPServletRequest接口 只要一个
对应于HTTP协议; 目前只要一个网络应用层协议;通用得方法都封装在ServletRest中,
在诞生新的协议,直接写一个新的子接口实现ServerRequest接口 使得程序可扩。
父接口: 一个请求对象提供了数据 包含 name parameter values attribute 和 inputStream 添加了一个协议数据,在这个接口上使用了Http,及继承子类HTTPServeletRequest后。
1.getContentLength()
请求信息得长度
2. getContentType()获取MIME类型
3. getInputStream()获得输入流
4. getAttributeNames()获取所有得Ming
5. getLocalAddr() 可以获取发送请求人得IP地址
6. getParametor() 获得请求参数
子接口HTTPServletResult
getCookies() 获取cookies
getHeader(String name);获取请求头信息
<body>
<%
String username=request.getParameter("username");
String password=request.getParameter("password");
%>
<%=username %>
<%=password %>
body>
正常是由乱码
在获得字符前
request.setCharacterEncoding(“UTF-8”);
respond.setCharacterEncoding(“UTF-8”);
2. 接受数据
//获取复选框
/*只能获取但一值*/
//String hobby=request.getParameter("hobby");
String[] hobby=request.getParameterValues("hobby");
%>
<%=username %>
<%=password %>
<%
if(hobby!=null&&hobby.length>0){
for(int i=0;i<hobby.length;i++){
%>
<%=hobby[i] %>
<%
}
}else{
%>
<%="此人无爱好" %>
<%
}
<input type="checkbox" name="hobby" value="foot"/>足球
<input type="checkbox" name="hobby" value="bathcatball"/>篮球
<input type="checkbox" name="hobby" value="game"/>游戏
获得所有得请求参数:request.getParameterNames();
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'receive.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<%
request.setCharacterEncoding("UTF-8");
//获取所有得请求参数得名称 返回值是枚举器
// 1.2版本之前 用Vector比较多 集合最开始最正确得遍历 是迭代器
// vector得迭代器就是Emulation 这是出现集合之前所用得迭代器
Enumeration<String> ens= request.getParameterNames();
//1.5之后才出现泛型
while(ens.hasMoreElements()){
String name=ens.nextElement();
if(name.startsWith("args-")){
String[] values=request.getParameterValues(name);
if(values!=null&&values.length>0){
for(int i=0;i<values.length;i++){
%>
<%=values[i] %>
<%
}
}else{
String value=request.getParameter(name);
%>
<%=value %><br/>
<%
}
}
}
%>
This is my JSP page. <br>
body>
html>
必须在提交表单后,在提交得目标位置才有头文件
String str=request.getHeader(“Content-Type”);
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<form action="MyJsp.jsp" method="post">
Username:<input type="text" name="username" /><br/>
Password:<input type="password" name="password"/><br/>
<input type="checkbox" name="hobby" value="foot"/>足球<br/>
<input type="checkbox" name="hobby" value="bathcatball"/>篮球<br/>
<input type="checkbox" name="hobby" value="game"/>游戏<br/>
<input type="hidden" name="userid" value="1"/>
个人简洁:<input type="text" name="info"/><br/>
<input type="submit" value="提交"/>
form>
body>
html>
目标jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String username=request.getParameter("username");
String password=request.getParameter("password");
//获取复选框
/*只能获取但一值*/
//String hobby=request.getParameter("hobby");
String[] hobby=request.getParameterValues("hobby");
String str=request.getHeader("Content-Type");
%>
<%=username %>
<%=password %>
<%=str%>
body>
html>
常用的方法:
1.public void addCookie(Cookie cookie):用来向客户端设置Cookie数据的
2.public void setHeader(String name,String value):设置响应信息中的响应头。
3.public void sendRedirect(String location):用来实现页面的跳转。
4.public void addCookie(Cookie cookie):向客户端设置Cookie
接口继承ServerRespond接口
<body>
<%!
int count=0;
%>
<%
response.setHeader("refresh","5;URL=myjsp.jsp");
%>
body>
JSP和HTML都可跳转,HTML跳转一般在只要HTML代码静态网页时选择HTML跳转
我门很少使用HTMl 时前台
我们Java工程师使用jsp时 都是用 respond或者jsp:forward得方式。
1.使用respnd跳转
response.sendRedirect(“index.jsp?username=‘张三’”);
不支持中文,支支持英文
response.sendRedirect("");
使用response进行传值
<body>
<%!
int count=0;
%>
<%
response.sendRedirect("myjsp.jsp?username=as");
%>
body>
<body>
<%
String username=request.getParameter("username");
%>
<%=username %>
body>
<%
request.getRequestDispatcher("myjsp.jsp").forward(request,response);
%>
地址栏不会发生改变。
在使用request属性范围时,只要服务器跳转才能保证参数得在多个页面跳转,且立刻跳转。客户端跳转无法进行request属性得传递
addCookie()
第一次访问服务器,服务器会自动给你一个唯一的sessionId; session对象被赋予了一个序列值。作为kookie得形式写在浏览器中
服务器按照session ID区分每一个用户, 过失效后,服务器会分布新的id给用户。
在各个系统中都会有用户登录验证及注销得功能,此功能完全使用Session实现。
登陆成功后,设置一个session范围得属性,然后在其他页面中判断是否存在session范围得属性,如果存在,则表示登录过的合法用户。 不存在,跳回登录页提示用户重新登录。用户登录后可ui进行注销操作