1.Jsp内置对象:WEB应用服务器(web容器)创建的一组对象,不用程序员创建可以直接使用
1)输入/输出对象: request、response、out
2)通信控制对象:pageContext、session、application
3)Servlet对象: page、config
4)错误处理对象:exception
out对象:向jsp页面输出数据
out对象方法:
print(“输出的数据”);或println
newLine(); 输出换行字符
flush(); 输出缓冲区数据
close(); 关闭输出流
clear(); 清除缓冲区的数据,但是不输出到客户端
clearBuffer(); 清除缓冲区的数据,输出到客户端
getBufferSize(); 获得缓冲区大小
getRemaining();获得缓冲区没有被占用的空间
isAutoFlush(); 是否为自动输出
request对象:包含了有关请求的信息,完成了对HTTP请求的封装。通过它可以获得从JSP页发出的:请求的头部信息、请求参数、cookie等。
request对象方法:
getAttribute(“属性名”); 获取指定属性的值,若属性值不存在返回null
getAttributeNames(); 获取所有属性名的集合
getCookies(); 获取所有cookie对象
getCharacterEncoding(); 获取请求的字符编码方式
getContentLength(); 获取请求正文的长度,如不确定返回-1
getMethod(); 获取客户端向服务器传送数据的方法
getParameter(“参数名”); 获取指定名字参数值
getParameterNames(); 获取所有参数的名字
getParameterValues(); 获取指定名字参数的所有值
getProtocol(); 获取客户端向服务器端传送数据的协议名称
getQueryString(); 获取以GET方法向服务器传送的查询字符串
getRequestURI(); 获取发出请求字符串的客户端地址
getRemoteAddr(); 获取客户端的IP地址
getRemoteHost(); 获取客户端的名字
getSession(); 获取和请求相关会话
getServerName(); 获取服务器的名字
getServerPort(); 获取服务器的端口号
removeAttribute(); 删除请求中的一个属性
setAttribute(“属性名”,属性值 ); 设置指定名字的参数值
setCharacterEncoding(); 设置请求的字符编码方式
response对象:完成了对HTTP响应的封装。 提供了多个方法来处理HTTP响应
response对象的方法:
sendRedirect(“a.jsp”); 把响应发送到另一个位置处理(重定向)
setContentType(); 设置HTTP响应的contentType类型
addCookie(); 添加一个cookie对象
encodeURL(); 使用sessionID封装URL
flushBuffer(); 强制把当前缓冲区内容发送到客户端
gerBufferSize(); 返回缓冲区大小
getOutputStream(); 返回到客户端的输出流对象
sendError(); 向客户端发送错误信息
session对象:
session对象的方法:
getAttribute(“属性名”); 获取对象指定属性的值,若属性值不存在返回null
getAttributeNames(); 获取所有属性名的集合
getCreationTime(); 返回session的创建时间
getID(); 获取sessionID
getLastAccessedTime(); 返回最后发送请求的时间
getMaxInactiveInterval(); 返回停止操作后session对象的有效时间(单位为秒)
invalidate(); 销毁session对象
isNew(); 每个请求是否会产生新的session对象
removeAttribute(); 删除指定名字的属性
setAttribute(); 设置指定名字的属性
setMaxInactiveInterval(); 设置停止操作后session对象的有效时间(单位为秒)
application对象:
application对象的方法:
getAttribute(); 获取对象中指定名字的属性值
setAttribute(); 设置指定名字的属性
getAttributeNames(); 获取所有属性名的集合
getInitParameter(); 返回对象中指定名字的初始参数值
getServletInfo(); 返回servlet编译器中的当前版本信息
getRealpath(); 获取服务器指定位置的真实路径
page对象:
page对象的方法:
forward(); 重定向到另一页面
include(); 动态加载指定页面
getAttribute(); 获取页面范围内指定名字的属性值
findAttribute(); 在页面范围内搜索指定名字的属性
removeAttribute(); 删除页面范围中指定名字的属性值
getException(); 返回当前异常对象
getRequest(); 返回当前请求对象
getResponse(); 返回当前响应对象
getServletConfig(); 返回页面的config对象
getServletContext(); 返回页面所在的application对象
getSession(); 返回页面所在的session对象
getOut(); 返回out对象
2.get方法和post方法的区别
get方法提交表单,
1.请求的参数放在头部,参数会显示在地址栏,不安全。
2.长度有限制(不同浏览器对地址栏长度有不同限制)。
3.必须使用字符方式提交。
post方法提交表单,
1.请求的参数放在请求体里,参数不会显示在地址栏,安全。
2.长度无限制(而请求体长度无限制)。
3.可以用字节方式,也可以用字符方式提交。
3.解决Jsp页面中文乱码
1.不让tomcat以默认字符集对中文字符进行编码,而采用请求的方式进行编码。
修改Tomcat的server.xml文件,在Connector节点增加uesBodyEncodingForURI="true"属性配置,在处理请求的页面中保留request.setCharacterEncoding("GBK"); 即可。
2.在接受参数时进行编码转换(先解码再转码)。对表单提交的get、set都适用
String s=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");
4.重定向和请求转发
转发:客户端和服务端执行了1次请求1次响应,浏览器显示原地址。转发的新地址必须是本web应用系统资源,重定向没有这个限制
重定向:客户端和服务端共执行了2次请求2次响应,浏览器显示新地址。
eg.
重定向
<body>
<%
request.setCharacterEncoding("GBK");
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
if(name.equals("admin")&&pwd.equals("admin")){
response.sendRedirect("admin.jsp");
}else{
response.sendRedirect("normal.jsp");
}
%>
</body>
请求转发 是通过 RequestDispatcher方法 调用forward()方法完成的
<body>
<%
request.setCharacterEncoding("GBK");
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
if(name.equals("admin")&&pwd.equals("admin")){
RequestDispatcher rd=request.getRequestDispatcher("admin.jsp");
rd.forward(request, response);
}else{
RequestDispatcher rd=request.getRequestDispatcher("normal.jsp");
rd.forward(request, response);
}
%>
</body>
5.cookie
web服务器为了辨别用户身份、进行会话跟踪而存在客户端上(通常经过加密)的数据
cookie由服务器端产生,发送给浏览器,cookie以键值对的形式保存在文本中。不是九大内置对象,要先创建再使用。
应用:记录登录信息,购买商品信息,跟踪统计用户访问习惯(什么时间访问,访问了哪些页面,页面停留时间)
cookie对象方法:
getName(); 获取cookie的名称
getValue(); 获取cookie的值
setValue(); 创建cookie后对cookie进行赋值
setMaxAge(); 设置cookie的有效期(单位:秒)
getMaxAge(); 获取cookie的有效期
eg.
增加cookie的jsp文件
<body>
<%
//创建cookie
Cookie cookiename=new Cookie("name","jacky");
//设置cookie有效时间为3分钟
cookiename.setMaxAge(3*60);
//关于cookie的有效期设置要注意:
1)设置有效期的方法:setMaxAge(),参数单位是秒
2)参数设置成>0的整数,表示cookie的生命周期,切不随着浏览器关闭失效
3)参数设置为0,表示删除该cookie。不设置或设置为-1,cookie会在窗口关闭后失效
//向response对象中写入cookie
response.addCookie(cookiename);
response.sendRedirect("getCookie.jsp");
%>
</body>
获取cookie的jsp文件
<body>
<%
//获取cookie对象数组
Cookie[]cookies=request.getCookies();
String userName="";
if(cookies!=null){
//以遍历的方式指定cookie
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("name"))
userName=cookies[i].getValue();
}
}
out.print("用户名"+userName);
%>
</body>
6.session
会话:是指在一定时间内,一个用户通过浏览器与服务器之间进行的一系列的请求和响应的交互过程。
当用户向web应用服务器发送第一次请求时,服务器会为该用户创建一个唯一标识的会话,会话将一直延续到访问结束(浏览器关闭或长时间不访问web应用)
session运行机制:
服务器接到客户端请求时,先会检查服务器是否已经为这个客户端建立了session,也就是判断客户端是否包含了sessionID(session的唯一标识)。如果包含了sessionID,就通过sessionID找到session,来确定是哪个客户端访问的。客户端的请求中没有sessionID,就创建一个session,并产生了sessionID,然后sessionID随着本次响应返回给客户端。客户端用cookie保存sessionID(若禁用了cookie就自动转化为用URL-rewriting技术实现【URL重写,URL中包含了sessionID的信息】)
7.session和cookie的区别
session保存在服务器端,存储的是对象,随会话结束而关闭,存放重要信息
cookie保存在客户端,存储的是字符串,可以指定存在的时长,存放不重要的信息
8.jsp内置对象范围
page:在一个页面范围内有效,通过pageContext对象访问该范围内的对象
request:在一个服务器请求范围内有效,与客户端请求绑定在一起
session:在一次会话范围内有效,在会话期间与session绑定的对象皆属于该范围
application:在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并与所有用户共享
9.什么是静态包含,什么是动态包含?描述两者的区别。
1.语法:
静态包含:<%@ include file="a.jsp "%> 将两个jsp页面合成了一个jsp页面进行处理,在一个page范围内
动态包含:<jsp: include page="a.jsp "%>
2.静态包含时,包含页面和被包含页面中的html.head,body等标签总共只有出现一次,否则会报错;而动态包含不会。
3.静态包含不会检查所包含文件中的变化;但是动态包含,可以检查所含文件中的变化,并且可以带参数
4.静态包含是先将文件中内容导入被包含的文件中,再一起编译,最后再展现给用户(先包含再编译)
5.动态包含可以自动区分被包含文件是静态的还是动态的,如果是静态,则与静态包含一样处理;若是动态页面,
则可以先进行动态的处理,再将结果包含进来。(先编译再包含)
理解:
使用 <%@include...%> 静态包含
简单的理解就是你可以认为 这两个页面代码是写在同一个页面里。
使用 <jsp:include...> 动态包含
当 向这个页面发出请求后。会转发到 include 的哪个页面去执行。 执行完了后又接着执行本页面余下的代码。
本文暂时没有评论,来添加一个吧(●'◡'●)