前几天学习了javaee中的jsp(Java Server Pages),即java服务器页面,其实就是在html里面写java代码。
一、概述前言
在总结九大对象之前,有必要先搞清楚几个概念:请求,回话,响应以及http。
回话:一个用户访问服务器的整个过程是一个回话的过程,这个过程包括从打开浏览器登陆网站到关闭浏览器退出网站的整个过程,每次回话包括多个请求以及响应。
请求:回话当中会包括很多请求,每次页面的跳转、数据操作的跳转等等都是一个回话,而这些请求很多时候是利用http协议来实现的。
响应:服务器对客户端请求所作出的应答所对应的对象,该对象包含所有的对应请求的对应应答消息。
http:一种传输数据的方式、协议,在网站的传输数据中非常常用,具体的协议知识课自己查看百度。
二、JSP的有九大常用对象概况:
javax.serverlet.httpServerlet.Request(一般被初始化为request):客户段请求对象,每次请求的发起都会被创建,声明周期为该次请求
javax.serverlet.httpServerlet.Response(一般被初始化为response):服务器响应对象,每次响应客户端时都会被创建,生命周期为该次响应
javax.serverlet.httpServerlet.session(一般被初始化为session):可以理解为回话对象,在用户初次登陆的时候就被创建,生命周期为整个回话过程,可用于同一用户的不同回话之间的数据共享和传递,不同请求相应共用一个session。
javax.serverlet.ServerletContext(一般被初始化为appplication):服务器启动后便产生该对象,直到服务器关闭该对象的生命周期才会结束,所以该对象可用于不同用户之间信息的传递和共享,因为不同的用户共用一个application。
javax.serverlet.jsp.jspWriter(初始化为out):输出流,将服务器对应的信息输出到页面上来,可以简写为<%=%>的赋值形式。
javax.serverlet.jsp.pageContext(初始化为pageContext):该对象代表服务器本身,通过该对象的方法可以获取到服务器的所有其他内置对象。
javax.serverlet.ServerletConfig(初始化为config):包含服务器的配置信息的对象,通过该对象的方法可以获得服务器的配置信息。
javax.serverlet.Cookie(初始化为cookie):cookie是客户端中对应某次回话的一段文档,它直接存储在硬盘中。
java.lang.Exception:serverlet的异常对象。
总的来说:一次回话中:request和response可以理解为局部变量,session可理解为全局变量;而对服务器而言,session理解为局部变量,application理解为全局变量;而pageContext可以类比java中的this关键字。
三、常用对象的总结
1、request常用用法。话不多说,直接上代码
//常用方法一getSparameter
//该方法用于获取传递的参数
request.getParameter("传递的参数的名字");
//返回的是Object,所以很多时候需要进行强制转换
getParameter方法用于获取传递参数的值,返回的是一个对象,值得传递可以包括表单的get和post提交数据、url传参等,在传递参数的时候,这里要注意一个编码格式问题和注意get和post方法提交数据的区别
a、编码问题;
首先,为防止出现中文乱码,所以,在接受参数的时候需要注意将接受的参数转换为utf-8格式编码,转码的方法如下:
//设置编码格式问题的方法
request.setCharacterEncoding("utf-8");
另外,以上的方法只能解决get和post传递参数的中文乱码问题,对于URL传参的乱码问题,要进行二次编码和解码的操作,具体代码如下:
//1、首先要在传参的那个地方进行两次编码处理
String result = java.net.URLEncoder.encode("要编码的字符串","utf-8");
result = java.net.URLEncoder.encode(result,"utf-8");
//2、在接受除,进行解码操作
String result = java.net.URLDecoder.decode(request.getParameter("参数名字")),"utf-8");
b、表单中post和get提交数据的区别
首先,get的提交方式数据会在url中显示出来,所以相对来说不安全,同时,get的提交方法所传输的数据参数大小较小;
post提交数据不会再url中显示出来,同时可提交的数据大小可达2m;但是,get提交数据的速度比post更高效更快;
平时来说,一般建议使用post方法提交数据。
2、response的总结,话不多说,上代码
//response常用方法
//sendRedirect
response.sendRedirect(URL);//该方法用于跳转到另一个页面用,URL是页面的url,可以是相对路径
以上方法一般用于页面的跳转时调用。
3、session总结,还是先看代码
//session方法的用法
session.setAttribute(String key,Object ob);//该方法是用于将某个值传递给session,可以类比Map中的put(String key,Object object)
session.getAttribute(String key);//获取session对象中对应key索引的数据,类似于Map中的get方法。
其实session内部存储数据的方式就是利用Map容器的方式,每次将值put进容器的时候,要包括key和value,索引和值一一对应。这两个方法就实现了数据在不同的请求之间的传递。
4、application总结
其实,application用法其实是和session一样的,主要的方法还是getAttrubute和setAttribute两个方法,具体可参考session代码。
application和session的区别其实就是生命周期的不同而已。
5、out对象
ou.println(Infor);将对应的信息打印到界面。
6、pogeContext对象,该方法是指向当前服务器的指针,类比this关键字。先看以下的代码
//pageContext方法的用法
pageContext.setAttribute(String name,Value v,int scope);
//scope对应关系:PAGE_SCOPE,对应page页面的范围;REQUEST_SCOPE:对应request范围;SESSION_SCOPE对应session范围;APPLICATION_SCOPE对应application范围
pageContext.getAttribute(String name,int scope);//类似于setAttribute方法,getAttribute只是获取其中name对应的值。
解释以下,page范围其实就当前页面的范围,页面跳转之后page范围的值是无效的。