【1.JSP内置对象简介】
内置对象:不加声明就可以在JSP页面脚本中使用的成员变量。(使用这些对象可以更容易收集客户端发送的请求信息,响应客户端的请求及存储客户信息。)
主要介绍:out,request,response,session
【2.页面输出对象out】
out对象代表了向客户端发送数据的对象,通过out对象发送的内容将是浏览器需要显示的内容(是文本一级的,可以通过out对象直接向客户端写一个由程序动态生成的HTML文件。)
常用方法:print,println;
out对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。如:(clear、clearBuffer、flush、getBufferSize、getRemaining)
<%
out.println("hello");
out.println("world");
%>
//hello world
【3.访问请求参数request对象】
request对象代表的是来自客户端的请求(例如在form表单中填写的信息等,是最常用的对象。)
常用方法:getParameter、getParameterNames、getParameterValues(通过调用这几个方法来获取请求对象中所包含的参数的值。)
setAttribute与getAttribute方法
request的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute方法根据属性获取到与该属性对应的对象值。
(setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。)getParameter方法
request的getParameter方法的作用是获取到客户端通过表单或url请求参数发送过来的参数值(是客户端与服务器端之间的交互,服务器端要想获取到客户端发送过来的数据,就需要使用getParameter方法来获取。)
[没有与getParameter方法对应的setParameter方法。]request对象内数据的存活范围
当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了。
(之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前的request对象中所存放的任何数据。)
开始了大伙们!!!
[3.1各种方法]
可以用request对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客户端的主机名称等。
对应类javax.servlet.http.HttpServletRequest
常用方法:
getParameter(String):返回客户端向服务器端传送的参数值
getMethod():返回客户端向服务器端传送数据的方法
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型的数据(Enumeration)
getParameterValues(String):获得指定参数的所有值,返回String[]
getRequestURL():获得发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的机器名称
getServerName():获取服务器的名字
getServletName():客户端所请求的脚本文件路径
getServerPort():获取服务器端的端口
例:
<%
String a=request.getProtocol();//获取的是协议的名称
String b=request.getServletPath();//嗯。。貌似是获取当前文件名
String c=request.getMethod();//返回客户端向服务器端传送数据的方法
int d=request.getServerPort();//获取服务器端的端口
%>
<%=a %><br>
<%=b %><br>
<%=c %><br>
<%=d %><br>
结果:
HTTP/1.1
/First.jsp
GET
8080
[3.2]管理请求中的属性
在进行请求转发时,需要把一些数据传递到转发后的页面进行处理。这时,就需要使用request对象的setAttribute()方法将数据保存到request范围内的变量中。
request对象的setAttribute()方法的语法格式如下:
request.setAttribute(String name,Object object);
request对象的getAttribute()方法的语法格式如下:
request.getAttribute(String name);
例:
【index.jsp】
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<%
request.setAttribute("name","jack");//传递属性name和对象值“jack”
%>
<jsp:forward page="forforward.jsp"/>
</body>
</html>
【forforward.jsp】
<html>
<head>
<title>forforward.jsp</title>
</head>
<body bgcolor=blue>
Welcome<br>
Here is forforward1.jsp<br>
<%= request.getAttribute("name")%>//根据属性name获取值jack
</body>
</html>
结果:
Welcome
Here is forforward1.jsp
jack
蓝色背景,嘻嘻(●'◡'●)
[3.3]处理中文[][][][#啊啊啊~本宝也没看懂 呜呜~O(┭┮﹏┭┮)O 咳咳,看懂再回来改 ][][][]
1.获取访问请求参数时乱码——对单个请求参数进行设置<%String myname=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); %>
2.获取表单提交的信息乱码——对请求对象的所有参数进行设置
注意:一定要在页面中没有调用任何request对象的方法之前使用<%request.setCharacterEncoding("UTF-8");%>
【4.页面响应对象response】
[][嘿嘿,第三个对象啦~还有俩就看完了(●'◡'●)][]
[4.1]
- response:表示返回给客户端的响应。
-
对应类javax.servlet.http.HttpServletResponse
(经常用于设置Http标题、添加cookie、设置响应内容的类型和状态、发送Http重定向和编码URL。) -
常用方法:
addCookie(Cookie):添加一个cookie对象。用于在客户端保存特定的信息
addHeader(String,String):添加http头信息,该Header信息将发送到客户端
containsHeader(String):判断指定名字的HTTP文件头是否存在
sendError(int, String):向客户端发送错误的信息
sendRedirect(String):重定向JSP文件。注意和jsp:forward的区别
setContentType(String):设置MIME类型与编码方式
[#上面这段过过过。。。]
[4.2 处理重定向 response.sendRedirect]
当你访问第一个页面的时候,页面要求你重新访问另外一个页面,因此客户端浏览器需要访问另外一个页面的地址。因此两个页面使用的是不同的request。
新建test.jsp:
<%
response.sendRedirect("forforward.jsp");
%>
访问test.jsp,在地址栏输入http://localhost:8080/servlet_example1/test.jsp,结果地址栏变为http://localhost:8080/servlet_example1/forforward.jsp,页面显示为forforward.jsp的页面
Welcome
Here is forforward1.jsp
null
在地址栏输入:http://localhost:8080/servlet_example1/test.jsp?name=zhangsan,页面还是
Welcome
Here is forforward1.jsp
null
无法接受参数。
【5. session对象】
[5.1]session对象简介
- session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。
HTTP是无状态协议;Web Server对每一个客户端请求都没有历史记忆;session用来保存客户端状态信息。
浏览器不关闭,session对象会一直存在,且session对象只有一个。如果浏览器关闭重启,会创建新的session对象
-
这里引入一个概念Cookie
Cookie是记录在客户端,session是记录在服务器端。但是cookie记录在客户端,用户可以设置不允许写入cookie,用户也可以删除cookie或者修改cookie,不够可靠。
Session是写在服务器端内存中的内容,当写session的时候会为客户端的浏览器记录一个唯一的编号,同时为session也赋予同样的号码。当用户访问第二个页面的时候,服务器端会根据浏览器的编号去找同一个编号对应的session。这个编号叫sessionid。
[5.2]session对象方法
创建及获取客户的会话:
这可以通过session对象的setAttribute()方法和getAttribute()方法实现。从会话中移除指定的绑定对象:
对于存储在session会话中的对象,如果想将其从session会话中移除,可以使用session对象的removeAttribute()方法,该方法的语法格式如下:
removeAttribute(String name)销毁session:
通过session对象的invalidate()方法可以销毁session,其语法格式如下:
session.invalidate();
会话超时的管理:
session.getLastAccessedTime()
返回客户端最后一次与会话相关联的请求时间
session.getMaxInactiveInterval()
以秒为单位返回一个会话内两个请求最大时间间隔
session.setMaxInactiveInterval()
以秒为单位设置session的有效时间
很重要哦!!!
【index.jsp】
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<form id="form1" action="session.jsp">//提交表单时,表单数据提交到session.jsp页面(action 属性规定当提交表单时,向何处发送表单数据。)
<input type="text" name="name"/>
<input type="submit" name="Submit" value="ok"/>
</form>
</body>
</html>
【session.jsp】
<body>
<%
String name=request.getParameter("name");//读取之前提交的数据提交表单的值
session.setAttribute("name",name);//将提交表单的值,①存入数据
%>
<form name="form2" action="result.jsp">////提交表单时,表单数据提交到result.jsp页面(action 属性规定当提交表单时,向何处发送表单数据。)
your address is:
<input type="text" name="address"/>
<input type="submit" name="Submit" value="ok"/>
</form>
</body>
【result.jsp】
<body>
<%String name=(String)session.getAttribute("name"); //读取刚刚①存下的数据
String solution=request.getParameter("address");//读取之前提交的数据
%>
your name is:
<%=name %>
your address is:
<%=solution %>
</body>
运行结果:
[5.3] pageContext对象
pageContext对象可以存取关于JSP执行期间所要用到的属性和方法。
可以获取JSP内置对象:
getSession():返回session对象
getServletConfig():返回config对象
getServletContext():返回application对象
[5.4] application全局应用程序对象
application对象在整个应用区域中都有效。application对象管理应用程序环境属性的方法分别介绍如下。
getAttributeNames():获得所有application对象使用的属性名。
getAttribute(String name):从application对象中获取指定对象名。
setAttribute(String key,Object obj):使用指定名称和指定对象在application对象中进行关联。
removeAttribute(String name):从application对象中去掉指定名称的属性。
【index.jsp】
<%@ page language="java" import="java.util.*" pageEncoding="Gb2312"%>
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<%
if(application.getAttribute("counter") == null)
{
application.setAttribute("counter", "1");
}
else
{
String strnum = null;
strnum = application.getAttribute("counter").toString();
int icount = 0;
icount = Integer.valueOf(strnum).intValue();
icount++;
application.setAttribute("counter", Integer.toString(icount));
}
%>
您是第<%=application.getAttribute("counter") %>位访问者!
</body>
</html>
得到下面的页面:
刷新后,页面变为:
ps:
application对象可以是ServletContext类型的。
application的存活范围比request和session都要大。只要服务器没有关闭,application对象中的数据就会一直存在,在整个服务器的运行过程当中,application对象只有一个,它会被所有的用户共享。
application适用于在同一个应用程序中的各个用户共享数据。
其中getRealPath这个方法可以获取资源在服务器上的物理路径(绝对路径),常用来获取上传文件时要存储文件的路径。
[5.5 获取配置信息对象config]
config对象是ServletConfig类型,包含初始化参数以及一些实用方法。
在初始化参数中可以读取web.xml文件中的环境设置和服务器配置信息。
常用方法:
1.getServletName():返回Servlet的名称
2.getInitParameterNames():返回Servlet程序初始化所有的参数名
3.getInitParameter(String):返回Servlet程序初始参数的值
---分割线---
补充:
【获取cookie】
Cookie是由服务器端生成,发送给浏览器,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
注意HTTP协议是无连接的,含义就是当客户端从服务器端得到某个文件的内容时,连接就会中断,相当于socket的close方法。但是考虑购物网站,当你在一个页面购买了东西,连接就断了,当你又访问另外一个页面去结账时,这时就不知道购买的东西是什么了。这时的解决办法就是cookie。也就是当你购买了某种商品后,服务器就在客户端记录下相应的信息来,这就是cookie。
但是要遵循两个原则:
(1)只允许写文本文档,不允许写其他类型的文件,避免那些恶意的程序。
(2)客户端可以阻止服务器写入。
结账的时候,服务器端只能拿到自己的web application写入的东西。张三和李四各买了同样的商品,那么可以通过浏览器的独一无二的编号来区分,通过这一点区分不同浏览器的内容。
Cookie:服务器端写到客户端的文本信息,是以名-值-对的形式。
通过cookie的getCookies()方法即可获取到所有cookie对象的集合;
通过cookie对象的getName()方法可以获取到指定名称的cookie;
通过getValue()方法即可获取到cookie对象的值。
另外将一个cookie对象发送到客户端使用了response对象的addCookie()方法。
【login.jsp】
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<html>
<head>
<title>Forward Example</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
String user = "";
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("mrCookie")) {
user = cookies[i].getValue();
}
}
}
if ("".equals(user)) {
%>
<form id="form1" action="deal.jsp">
<input type="text" name="name" /> <input type="submit" name="Submit"
value="ok" />
</form>
<%
} else {
%>
欢迎<%=user%>再次光临
<%
}
%>
</body>
</html>
【deal.jsp】
<%
String user = request.getParameter("name");
Cookie cookie = new Cookie("mrCookie", user);
cookie.setMaxAge(60 * 60 * 24 * 30);
response.addCookie(cookie);
%>
<script type="text/javascript">
window.location.href = "login.jsp"
</script>
地址栏输入:
http://localhost:8080/ch5_example/login.jsp
页面显示
填写bingbing后提交,地址栏变为
http://localhost:8080/ch5_example/deal.jsp?name=bingbing&Submit=ok
页面显示