您好,欢迎访问三七文档
JSP基础知识一、什么是JSP?JSP是JavaServerPage的缩写,是基于JavaServlet以及整个Java体系的WEB开发技术,是一种动态网页技术标准。类似于ASP、PHP等动态网页编程技术。JSP本就是一个文档,他不仅可以包含静态的HTML代码,也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet发布,并接受请求。二、JSP页面的组成?在传统的html页面文件中加入Java代码段和JSP标签就构成一个JSP页面。三、JSP的运行原理?客户端请求服务端的一个JSP页面,如果该JSP页面被第一次请求,服务器的JSP引擎首先将JSP页面文件转译成Java源文件(其实是将JSP文件转换为一个Servlet),接着编译Java源文件并将生成的字节码文件存储在服务器的localhost\work\网站目录\,最后执行这个字节码文件响应客户的请求;当该JSP文件被第二次请求的时候,服务器将检查该JSP文件自最后一次被存取后是否经过修改,如果没有修改则请求将交给还在内存中的servlet的jspService()方法,如果被修改,文件被重新编译并取代内存中的servlet,并执行jspService()方法。JSP运行过程1,JSP文件先要翻译成Java文件(Servlet),在tomcat中翻译后的java文件在tomcat下的WEB-INF\classes中相应名字的应用目录里。2,编译Java文件3,运行.class文件Tomcat的全局配置文件在Tomcat下的conf目录中的web.xml是服务器全局的配置文件,其中要想关闭列表显示叫要把init-paramparam-namelistings/param-nameparam-valuefalse/param-value/init-paramTomcat的管理员设置在tomcat下的conf目录中的tomcat-use.xml文件中可以配置tomcat的用户角色tomcat-usersrolerolename=managerdescription=/rolerolename=admin/!--设定角色的名字,admin是管理员,manager是项目管理--userusername=managerpassword=123roles=manager/!--设定用户名密码,和角色--userusername=adminpassword=123roles=admin//tomcat-usersJSP的特点1,JSP不需要编译2,JSP不需要进行配置3,JSP本质上就是一个Servlet4,JSP是以静态页面为主的。四、JSP和JavaServlet的关系?JavaServlet是Java语言的一部分,JavaServlet编写的Java程序称为一个Servlet,Servlet通过HTML与客户交互信息五、JSP与CGI(通用网关接口)的异同?首先,两者都是服务端的动态编程技术,但主要的区别是当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,这些线程由JSP引擎服务器管理;而传统的CGI为每个客户启动一个进程,相对而言,线程占用的CPU资源少,所以效率要高。六、JSP包含的基本内容?JSP的语法格式1、JSP的变量、方法、表达式%=%:被计算的表达式一定要有返回结果。2、注释元素:%----%,与html注释不同,用这种方式的注释是完全不会暴露给客户端的,但在%%中还是使用'//'作注释.3、脚本元素%%:书写JSP页面内所需的任何逻辑,该部分代码会被编译到servlet的service方法中。通过在page指令中使用import参数,可以从%%内调用所有JavaAPI,因为任何JSP代码实际上都被编译成JavaServlet,它本身就是一个类,所以在JSP中我们有权使用整套丰富的JavaAPI,因此几乎没有任何局限性。4、声明元素%!%:用于定义全局变量或是在页内任何地方都可以访问的Java方法,相当于在servlet类中定义了全局变量和成员方法,被声明的变量或方法并不在JSP页内产生任何输出,除非在%%中被引用,它们仅仅用于定义。5、指令元素:通过使用JSP指令,可以包含非Java代码模块,如HTML文件;JSP定义了三个页内指令用于设置JSP参数或扩展代码1)%@page%:可以为网页设定一些基本参数,包括编程语言,页面的编码格式,导入类,转向错误页等2)%@include%:使一个JSP文件可以包含其他文件(html,jsp)的内容,如存于单独文件中的HTML报头和页脚。如果引入的页面已经声明过变量和方法,就可以直接使用而不必再次声明,被引入的页面也会被编译成本页面的一部分,声明可以扩展范围,也就是说可以扩展到任何静态的JSP文件,如:xx.jsp声明了一些变量和方法,用include指令引入yy.jsp,那么yy.jsp就可以继承和使用这些变量和方法;如果在xx.jsp中使用jsp:include引入yy.jsp,若yy.jsp是静态文件,则可以继承并使用声明的变量和方法,动态则不可以。3)%@taglib%:用于扩充标准的JSP标签集。表示JSP文件使用了自定义的标签,同时引用标签库,也指定了标签的前缀.uri属性:标签库描述符,uri统称为'资源标识符',代表web上可用的资源,如果标记库文件是放在远程服务器,那么就要使用绝对路径来访问,如果下载到本地,只需要用相对uri的方式指明标记库文件在本地的目录路径。JSP容器如何能够使用和识别标签库中的自定义行为(标签)?prefix定义一个标签库的前缀,所有使用该前缀的自定义行为都属于同一个标签库,而uri为每个自定义行为找到对应的类,容器用它来定位TLD文件,在TLD文件中可以找到标签库中所有标签处理类的名称。web应用启动,容器从web-inf的目录结构的meta-inf搜索所有以.tld结尾的文件,对于每个TLD文件,容器会先获取标签库的uri,然后为每个TLD文件和对应的uri创建映射关系。(tld文件描述了标签的拥有的属性,处理类)%@includefile=....%包含指令,包含指令会将要包含的文件代码原样输出到本页面(在翻译时把包含文件的内容引入并合并),不进行翻译,file属性制定要包含的文件的名字(注意要包含的文件的路径),这个指令可以实现页面的复用。注意:%@includefile=%要包含的JSP文件中不能定义重名的变量,如果不使用包含指令,那么JSP中的最小转换单元就是JSP文件,使用了包含指令就会将多个jsp的结果合并到一起。%@pagepageEncoding=GBK%设定页面显示的字符集%@pagecontentType=text/html;charset=GBK%设置输出流的编码方式和文件格式。注意:输出的字符集编码方式要和页面显示的字符集相同,一般定义输出流的编码方式,注意以上两个页面指令在JSP中最好只出现一次。注意在请求中传送的参数的值是中文的话需要调用请求request的setCharacterEncoding(..)方法设置相应的编码方式,只适用于post请求,也可以通过Servlet的Filter来进行中文编码方式的处理。%@pagelanguage=java%指定JSP的脚本语言,现在只能写java%@pageextends=..指定翻译后代码类型的父类,最好不要使用这个指令%@pagesession=true|false%指定是否自动创建Session,最好不自己指定,使用默认值%@pagebuffer=..autoflush=true|false%设置输出的缓存和是否自动刷新缓存,一般情况下都使用默认值,缓存的默认值为8KB。%@pageisThreadSafe=true|false%是否线程安全,默认为true,也就是线程安全,只使用默认值。%@pageinfo=..%设置页面信息,一般不用%@pageerrorPage=%指定异常处理页面%@pageisErrorPage=true|false%设定本页面就是异常后跳转的页面%@pageisELIgnored=true|false%设定本页面是否忽略JSP2.0种EL表达式%@taglib..%标签库指令,用于引入自定义标签库JSP动作jsp:......jsp:includepage=...flush=true|falseinclude动作是在翻译和编译后运行时进行响应的合并,也就是对应了Servlet中RequestDispatcher类的include(ServletRequestrequest,ServletResponseresponse)方法。include动作可以传递参数jsp:includepage=test.jspjsp:paramname=uservalue=/jsp:include在使用参数时,可以用request内置对象来获取参数的值。jsp:forwardpage=xxx/xxx.jspforward动作对应的是Servlet中RequestDispatcher类的forward(ServletRequestrequest,ServletResponseresponse)方法,也就是把请求进行转发。也可以写成jsp:forwardjsp:attributename=pagexxx/xxx.jsp/jsp:attribute/jsp:forward这种写法等价于上面的写法。在使用Servlet的response的重定向sendRedirect(Stringlocation)方法在使用时要包含应用的路径,注意,重定向会放弃这个请求,并向服务器发送一个新的请求,但是响应对象还是一个。重定向是用来避免重复提交的。注意:对页面的刷新操作就会再一次运行程序,也就仿佛进行了再一次的提交一样,这也就是重复提交的问题,所以需要使用重定向来解决这个问题。jsp:plugintype=bean|appletcode=....../jsp:pluginjsp:plugin动作可以使页面上运行applet,或者是使用java代码。jsp:useBeanid=对象名class=类全名|type=类全名(使用多态时使用)beanName=类全名scope=page|request|session|applicationjsp:useBean动作,可以通过这个动作来使用java代码,id就是变量名,clss和type的区别在于,使用type是不会创建对象,而只是会先查找如果有该对象就会使用,如果没有就会抛出异常,class在没有该对象存在时,则会创建新对象。scope是用来保存实例的空间范围,page、request、session、application,由小到大,默认为page。jsp:setPropertyname=对象名property=属性名value=属性值/直接指定Bean属性的值,必须类型一致。jsp:setPropertyname=对象名property=属性名param=from表单中的响应的参数名/用表单中指定的参数来为Bean属性赋值,系统会自动作类型转换。jsp:setPropertyname=对象名property=属性名/用表单中和Bean属性同名的标单项来给Bean属性赋值,这样写只会为指定的属性赋值jsp:setPropertyname=对象名property=*/这种方式会自动用表单中的同名参数来为Bean的所有属性赋值jsp:setPropertyname=对象名property=属性名value=%=...%/使用表达式来为Bean的属性进行赋值jsp:getPropertyname=对象名pro
本文标题:JSP知识点
链接地址:https://www.777doc.com/doc-2879467 .html