jsp原理

来源:互联网 发布:自己写js插件 编辑:程序博客网 时间:2024/05/19 18:10
    首先,我打算简单地叙述一下jsp的工作原理。    在互联网初期,人们通过html这种静态网页的方式来宣传信息或做一些个人展示,在当时这是很酷的事,毕竟拥有电脑人可不多。但是随着计算机用户的激增,传统的静态网页已经远远不能满足分享这个互联网主题,于是servlet应用而生,这很nice,但是工作者们很快发现servlet的不便利之处,对于一些界面的控制并不是那么顺心如意,你想想前端页面只负责接受数据并传向后台,可是前端界面却不能接受后台传来的数据来显示出来(纯html...)我么恩必修在servlet用那样的PrintWriter out=new PrintWriter();    out.print("");这种方式将我们的数据一点点打印出来,又要兼顾逻辑又要兼顾界面,代码维护困难程度可想而知,痛苦不?于是jsp 出来咯。扯远了。。。jsp其实你可以理解就是servlet,在首次运行jsp时,jsp容器会把它转化为对应的servlet文件,(servlet大家都知道,在程序运行的过程中在容器中只存在一个实例,只初始化一次,调用jspInit(),然后每次用户访问servlet就会通过调用一个新的线程调用_jspService()来运行你所实现的servlet逻辑)他就是将servlet中那一些频繁的out.print()给省去了,而且在初始化时自动会初始化一些对象,这也就是我们常说的内置对象(这些对象完全是为了方便我们开发)     所以,所以我们就讲讲这些个内置对象吧,我们从它们的方法大概介绍一下他们自身的作用。首先我得谈谈我们最常用的几个request,response,session,application,out,exception。 个人理解,这些东西就是为了联通不同处理逻辑操作之间的桥梁,他们在jsp页面中就变成了在页面中传递那些我们需要传递并显示的数据,很nice 1,request。请求,很显然其作用范围是request(一次页面的跳转,或者页面跳到servlet,其实前者在本质上和后者一样)。它所拥有的的函数request.setAttribute(name,value);request.getAttribute(name);request.getParameter(name);还有request,setParameter(name,value)(这个主要是前台利用form传递数据给后台时会用到);request.getParameters();得到前台form传给后台那些参数,然后可以遍历。request.setContentType()(设置请求的字符编码格式,防止乱码);然后,我们就可以利用这些函数在一次请求过程中保存我们在一个逻辑(界面)得到的结果,然后传给下一个界面显示。2,response。响应,是为了将servlet的一些应答信息传给发给这个servlet的客户端(servlet在初始化时,初始化这两个对象并把他们作为参数传给service函数然后就实现请求,应答这一过程)response主要是为了设置后台返回给前台数据的编码以及设置响应消息的。函数有:response.addCookie(cookie)(向前台添加cookie用于保存一些信息),response.setHeader(name,value)(设置消息头用于控制前台一些逻辑),response.sendRedirect()(重定向,可以跳到站内网址也可以调到站外网址);response.setContentType()(设置响应消息的编码格式)3,out。用于向前台界面输出信息,可以含有html标签会在前台进行相应显示。主要就是out.print(),out.println();out对象是基于缓冲输出模式,所以有out.flush()将缓冲区内容输出;out.clear()清除缓冲区内容不输出;out.clearBuffer()清除缓冲区内容并且输出;out.getBufferSize()不用多说;out.getRemaining()缓冲还剩多大;out.newLine()输出换行符;4,exception。异常对象,很显然是为了在错误处理页面显示错误信息。简单的几个函数exceeption.getMessage();exception.printStackTrace();5.session。会话,意思是浏览器和服务器的一次连接,因为客户端每次与服务器建立联系是通过http协议,每次连接后又会断开,那么为了保存用户状态信息就引进了session,通常是为了保存用户信息以辨认用户是否是合法用户,某些操作是否是合法操作。一段时间未操作也会失效。session.setAttribute(name,value);session.getAttribute(name);session.getLastAccessTime()(上次有效访问时间);session.getCreationTime()此次session的创造时间;session.setInavactionInterval()即一段时间不操作就会失效,设置这个时长的;session.invalidate()清除seession信息;6,application。应用,存在于应用的整个过程中,所以用它保存什么样的数据你应该清楚吧。application.setAttribute(name,value);application.getAttribute(name);   剩下的就是一些不常用的config,page,pageContext

config是ServletCofig类型的数据保存servlet的配置信息,常常用在servlet初始化中获取一些servlet初始化参数config.getInitParameter(name);config.getParameters();还可以获得整个应用的applicationcontext(WebApplicationContext context = (WebApplicationContext)config.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);)获取servletcontext(config.getServletContext())(具体servletcontext等对象的具体概念我下个博文再讲);config.getServletName()得到所在servlet名字;
pageContext主要是为了获取上面我们讲的一些对象如request,response,application,session,config等具体方法就不再给出,大家自己查阅,而且在jsp中由于那些内置对象已经给出所以这些方法很少用到。
page指的是当前页面本身。有page.getClass()返回当前Object对象。page.hashCode()返回当前对象的hashCode;还有一些其他的不常用的就不在指出。