JSP相关知识

        JSP的本质是Servlet,当用户向指定的Servlet发送请求时,Servlet利用输出流动态生成HTML页面。JSP页面由静态部分和动态部分组成。静态部分是标准的HTML标签、静态的页面内容,这些内容通过该JSP页面生成的Servlet的out输出流对象以字符的形式输出到客户端。动态部分是受java程序控制的内容,这些内容由Java程序动态生成。

        每个JSP页面就是一个Servlet实例,JSP页面通过系统编译成Servlet,Servlet再来负责相应用户的请求。JSP是Servlet的一种简化,使用JSP时,其实还是使用Servlet,Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。


        JSP文件必须在JSP服务器内运行。

        JSP文件必须生成Servlet才能执行。

        每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。

        JSP页面的访问者无需安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准的HTML页面

        

        JSP页面会编译成一个Servlet类,每个Servlet在容器中只有一个实例(单例)


JSP的3个编译指令:page, include, taglib。编译指令是通知Servlet引擎的处理消息,在将JSP编译成Servlet时起作用

JSP的7个动作指令:jsp:forward, jsp:param, jsp:include, jsp:plugin, jsp:useBean, jsp:setProperty, jsp:getProperty。动作指令只是运行时的动作,通常可替换成JSP脚本。


静态导入(<%@ include %>)和动态导入(jsp:include)的区别

1、静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中实用include方法来引入被导入页面的内容。

2、静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容

3、动态导入还可以增加额外的参数。


jsp:setProperty和jsp:getProperty要求的属性名与java类中定义的属性有一定的差别,例如setProperty和getProperty需要使用那么属性,但JavaBean中是否定义了name属性并不重要,重要的是在JavaBean中提供了setName和getName方法即可。实际上用到就是反射机制,根据用到的属性名,大写首字母后加set或get得到相应的方法。


JSP脚本中的9个内置对象,pageContext, request, response, session, application, out, page, config, exception

pageContext:代表该JSP页面的上下文。使用该对象可以访问页面中的共享数据

page:代表该页面本身,就是该JSP页面生成的对应的java Servlet类中的this关键代表的对象

out:代表JSP页面的输出流,用于输出内容,生成HTML页面

application:javax.servlet.ServletContext的实例。该变量代表JSP页面所属的Web应用本身。

config:javax.servlet.ServletConfig的实例,代表JSP页面的配置信息。该对象通常用在Servlet中。


JSP内置对象的实质:其实就是该JSP生成的对应Servlet类中的_jspService()方法的形参或该方法中的局部变量


Web服务器负责接收客户端请求,每当接收到客户端连接请求后,Web服务器应该使用单独的线程为该客户端提供服务:接收请求参数、送回响应数据。

对于每次客户端请求而言,Web服务器大致需要完成如下几个步骤:

1、启动单独的线程。

  2、使用I\O流读取用户的请求数据(流来自Socket对象,深入剖析tomcat中介绍)

3、从请求数据中解析参数。

4、处理用户请求。

5、生成响应数据。

6、使用I\O流向客户端发送请求数据

第1、2、6步是通用的,可以由Web服务器完成。3、4、5存在差异。Web服务器会调用Servlet的_jspService()方法来完成第3、4和5步,当编写JSP页面时,页面里的静态内容、JSP脚本都会转换成_jspService()方法的执行代码,这些代码完成解析参数、处理请求、生成响应等业务功能,Web服务器则负责完成多线程、网络通信等底层功能。Web服务器在解析到用户的请求参数后,将需要通过这些请求参数来创建HttpServletRequest、HttpServletResponse等对象,作为调用_jspService()的参数。


每个Web应用只有一个ServletContext实例。web.xml文件中使用<context-param/>元素配置的参数对整个Web应用有效。可以通过application对象来操作(getInitParameter())

config对象主要用在Servlet中,用于获取对应的Servlet类在web.xml文件中配置的初始化参数信息(config.getInitParameter())

pageContext可用使用getAttribute(String name)、getAttribute(String name, int scope)方法来获取page、request、response、application范围的变量。PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE等


GET方式请求:GET方式的请求会将请求参数的名和值转换成字符串,并附加在原URL之后,因此可以在地址栏中看到请求参数名和值。且GET请求传送的数据量较小,一般不能大于2KB。

POST方式的请求:POST方式传送的数据量较大,通常认为POST请求参数的大小不受限制,但往往取决于服务器的限制,POSt请求传输的数据量总比GET传输的数据量大。而且POST方式发送的请求参数以及对应的值放在HTML HEADER中传输,用户不能在地址栏里看到请求参数值,安全性相对较高。


forward用户请求时,请求参数和request范围的属性都不会丢失,即forward动作还是原来的请求。重定向是response的另一个用处,与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生产第二次请求


通常只应该把与用户会话状态相关的信息放入session范围内,不要仅仅为了两个页面之间交换信息就讲该信息放入session范围内。如果仅仅是为了两个页面之间交换信息,可以将该信息放入request范围内,然后forward请求即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值