JSP九大内置对象+其他对象Cookie

1.背景

    学习九大对象可以帮助我了解更多jsp的运行机制

2.内容

2.1九大对象

request
response
out
session
application
config
pageContext
page

exception


主要的两个对象request和response:在JSP中request对象被包装成HttpServletRequest接口,客户请求经Servlet容器处理后,由request对象进行封装,作为service()的一个参数传递给JSP页面,response同理。两个对象作为输入输出留被servlet容器封装,对用户黑箱操作。

1.request

例如一个form表单的提交,信息被封装在了request.顺带一提get请求数据拼接在url后面,post则会隐藏

request不仅可以获取头部信息、cookie、session、encoding、method、protocol、hostname、ip、

getParameter()获得由name指定的参数值

getParameterValues(String name)获得name的多个参数值

getAttribute()获得name指定的属性值,如果没有则返回null

request.getRequestDispatcher().forward(request,response)转发页面

2.response

sendRedirect:直接跳转到其他页面,而forward只是页面的转发

setStatus():服务器相应的状态行,一般不用修改。

setContentType() 修改响应的ContentType,与page的ContentType类似,但是只能指定一个值,不能动态修改页面的显示方式。而使用此方法可以动态的修改页面的显示方式。

text/html  html

text/plain  txt

application/msword  word

还有一些设置头部、内容长度、获取输出流

3.out

可以从response哪里获取输出流

被包装JspWiter接口,是一个为客户打开的输出流,out对象内部包含了一个缓冲区。

4.session

被包装成HttpSession的接口,存活时期为游览器打开到关闭这段时间。为了让无状态的Http协议有状态,用session保留用户的

个人信息。用户首次登陆页面的时候,jsp引擎(tomcat)创建一个独一无二的session,session的Id通过cookie返回到游览器客户端。

最重要的设置用户信息保存:setAttribute()

获得session对象的生存时间:getMaxInactiveInterval()

消除session的会话状态:invalidate()  

5.application 

功能类似于全局变量,生存时间是服务器开始到关闭这段时间。可以用来保存所有用户的共享数据

获取页面文件在服务器的绝对路劲:getRealPath()

获取jsp引擎的当前版本信息:getServerInfo()

获取某个页面的MIME类型:getMimeType()

6.execption

为了处理异常,可分成两类。第一种是自己抓取异常直接处理。第二种是自己抛出异常,在本页面设置errorpage=true的时候,页面将会跳转到isErrorPage=true页面进行页面处理。在这个页面可以拿到execption进行信息的分析和处理。

7.page

代表的是jsp编译后的servlet实例,就等于用this调用。

getClass()

hashCode()

...

8.pageContext

主要功能是存储与当前页面有关的所有属性和内置对象。例如request、session等等

getRequest()

返回的对象是ServletConfig,相当于jsp的config: getServletConfig()

返回的对象是ServletContext,相当于jsp的Applicaiton:getServletContext()

9.config

保存页面的初始化信息

方法与上面类似,不重复。

2.2其他对象

Cookie

1.cookie

当客户第一次访问服务器的时候,服务器会在用户的硬盘上创建一个小文本,用来记录客户的跟中信息,例如访问站点次数等等。

它的内容由Web服务器决定,可以随时读取,但是只能被web站点的页面读取。Cookie文件存放在Windows的Cookies文件夹下。

<%
      Cookie cookie=new Cookie("llg","liliguang");
      response.addCookie(cookie);
      for(Cookie cookie1:request.getCookies()){

          if(cookie1.getName().equals("llg")){
    %>
              <%=cookie1.getValue()%>
    <%
          }
      }

当然了最重要的是设置cookie过期时间:setMaxAge()

不过虽然设置了时间,但是如果从request那边查看是看不见的。应为cookie默认只是把name和value传到服务器的.

如果客户端禁用cookie,那么按照默认方式session将会失效。但是我们可以把sessionId通过url的方式携带到后台服务器。

 String id=session.getId();
        HttpSession mySession=request.getSession();
        String myid=session.getId();
        session.setAttribute("llg","liliguang");
int sessionIdStart = semicolon + match.length();

            int semicolon2 = uriBC.indexOf(';', sessionIdStart);//看这行,就知道为什么是;了

            if (semicolon2 >= 0) {

                request.setRequestedSessionId
当我尝试使用火狐游览器禁用cookie后,如果不传递sessionID,那么每次得到的session都是新的sessionID.当我们自己在url上拼接http://localhost:8080/index.jsp;jsessionid=296DF5937900B4252A01AA26CB12770F的时候发现可以拿到其他人的session。也就是说我们实现了两个人共享一个session的问题(安全隐患)。如果没有禁用cookie,那么拼接的sessionid会被cookie的sessionid覆盖掉

3.总结

九大对象我个人觉得request、response、session对我比较重要,而session一般又跟cookie相关。所以理解http协议的传输是非常重要的,输入输出流被封装成request、response。用URL进行模拟传输感觉更加强烈。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值