jsp服务端页面技术

来源:互联网 发布:三网合一网站源码 编辑:程序博客网 时间:2024/06/04 19:32

JSP概述:

         JSP全名是JavaServer Pages,它是建立在Servlet规范之上的动态网页开发技术(Java语言中的动态页面技术).

         其它动态页面技术:

                  ASP:Active Server Page

                  C#:MS

PHP:

CGI:Common Gateway Interface:公共网关接口

JSP技术所开发的web应用程序时基于Java的,它可以用一种简捷而快速的方法从Java程序生成web页面,其使用上具有如下几点特点:

         跨平台    业务代码相分离    组件重用        预编译   

                  为什么会产生JSP技术:因为使用Servlet进行动态页面的开发成本太高,需要在Java代码中使用输出流输出页面内容。(1、一旦页面发生修改,都需要对类进行重新编译和部署。2、因为把页面中的内容放到了Java程序中,直接导致前端人员无法介入开发。)所以我们需要一种修改后不需要重新编译部署,且代码是直接编写HTML/CSS/JS的内容,只在需要的部分嵌入Java代码的动态页面技术。

                  如何创建一个JSP:在项目目录中创建一个文本文件,后缀为.jsp。第一行是JSP的声明。剩下的部分直接写HTML、CSS、JavaScript内容即可。

 

源文件和Class文件可以在”Tomacat”安装目录/work/……………下找到

JS文件转换成类文件时会带有包名,该包名为org.apache.jsp 

 

 

 

JSP就是Servlet

         三种脚本

         <%Java代码(变量,方法,语句等) %>:页面中所有的Java代码都会被翻到JSP所对应的Servlet类中的_jspService方法中。所以,一个页面中有多个<%%>Java代码段是可以的。JSP页面在被翻译后,<%%>中的Java代码就是_jspService方法中的代码,页面上的标签等静态内容是_jspService方法中用out输出流向浏览器输出的内容。

 

 

         <%=Java表达式 %>:计算表达式的值并替换到页面中的当前位置

                  标记之间插入的是表达式,不能插入语句

                  注意:脚本之间不能嵌套

                  表达式不能加分号结束

                 

         <%!声明(成员)定义的变量或方法等 %>【了解】

                  声明属性:

                  声明方法

 

 

三种注释

         JSP的注释:<%-- 注释内容 --%>:直接写在JSP页面中的。生存周期最短。翻译后消失。

         Java的注释:在<%%>中可以使用Java中的单行(//)和多行注释(/**/)(文档注释不能用/**   */)。编译后消失。

         标记语言的注释:<!---->:一直存在(把这种注释当成和HTML标签一样的页面内容发给浏览器)。【最好不用:浪费带宽。把程序结构暴露给客户了,黑客可以猜测程序结构和漏洞,进行攻击】

 

 

三个编译指令(JSP指令):page,include,taglib三种指令

         <%@page %>:设置当前JSP页面中的一些信息

         contentType:有效的文档类型

         import:导包:一个import属性可以同时导多个包,逗号分隔

         pageEncoding:当前页面                指定页面的编码格式

         isErrorPage:指定该页面是否为错误处理页面,如果有,则有Exception对象

         errorPage:       某个JPS页面的相对路径    指定一个错误页面,如果该JSP抛出未捕捉的异常,则跳到errorPage指定的页面

         等等一些属性

         除了import属性外,其他属性都只能出现一次,否则会编译失败.page指令是区分大小写的

         Page指令对整个页面有效,而与其书写的位置无关,但是习惯上把page指令写在JSP页面的最前面

        

 

 

<%@ include%>:静态包含(另一个页面):只有一个file属性,该属性用来指定插入jsp页目标位置的文件资源

         file:引用被包含的页面(相对路径)

         在翻译阶段,把被包含页面的内容直接合并到主页面中。所以,被包含页面是不单独进行翻译和编译的。

         主页面和被包含页面中的指令属性值必须完全一样,差一个空格都会导致500错误(contentType=”text/html; charset=UTF-8”)

 

 

<%@ taglib %>:导入第三方标签库,在JSEL时讲解

 

 

 

七个动作指令【了解,只需要理解动态包含和静态包含的区别】

         <jsp:include>:动态包含:

         page:引用被包含的页面的路径

         主页面和被包含页面都单独进行翻译和编译,在执行时,由主页面调用方法来引用被包含页面。

         <jsp:forward>:内部转发

         <jsp:param>:在动态包含 和内部转发时传参数

         <jsp:useBean>:使用JavaBean

         <jsp:setProperty>:设置属性值

         <jsp:getProperty>:取得属性值

         <jsp:plugin>:在页面中嵌入APPLET

 

 

 

九个内置对象:可以直接用的对象

         page                                   this(Object):没有域对象的那三个方法的

         request                              HttpServletRequest

         session                               HttpSession

         application                        ServletContext

         response                           HttpServletResponse

         config                                ServletConfig

         exception                                   Throwable                表示JSP页面所发生的异常,在错误页才起作用

         out                                      JspWriter

         在实际运行时,此输出流的缓冲区内容会追加到PrintWriter输出流的缓冲区后面。所以实际得到的页面内容和代码的执行顺序不一样。

         pageContext                    PageContext  JSP的页面容器

         操作域(操作所有四个域)

                  setAttribute(String name , Object value [ , int scope ] )

                  注意:如果最后一个整型 参数不指定,则操作的是Page域。如果指定,则只操作指定的域。

                  findAttribute(Stringname):在四个域中从小到大挨个查找名为“hi”的属性,找到即返回

         得到其它内置对象:给其它框架用的。框架在完成功能时,需要传入页面中的某些内置对象,此时,只需要传入pageContext即可,可以通过此对象再去取得其它内置对象,从而减少传参的数量。

总结:

         JSP:一种Java语言实现的动态页面技术。本质是Servlet。和servlet的区别:

         JSP是在页面的静态内容中嵌入Java代码(Servlet是用输出流输出页面内容)

         JSP文件是和静态资源保存在一起的,Servlet是编译后保存在WEB-INF/classes中,所以JSP可以直接访问,而Servlet不能直接访问。

         不需要在web.xml中注册。

         JSP是在第一次被访问时,进行了翻译和编译,之后执行的。

         三种脚本:

                  <%Java代码 %>

                  <%=表达式 %>

                  <%!声明 %>

         三种注释

                  JSP的注释:<%--  --%>:翻译即消失

                  Java的注释://   /**/:编译才消失

                  标记语言的注释:<!--  -->:永远不消失

         三个编译指令

                  <%@page%>:设置当前JSP页面中的信息(字符集、内容类型、使用语言、错误处理页)

                  contentType

                  import

                  errorPage

                  isErrorPage

                  <%@include%>:静态包含(主页面在翻译时,把被包含页面合并到主页面中进行翻译和编译)

                  file

                  <%@taglib%>

         七个动作指令

                  <jsp:include>:动态包含(主页面和被包含页面各自进行翻译和编译执行,在执行时,通过调用include方法把被包含页面包含到主页面中)

                  page

         九个内置对象

                  page:当前页面

                  request:请求

                  session:会话

                  application:ServletContext

                  response:响应

                  config:ServletConfig

                  out:JspWriter

                  exception:异常对象(isErrorPage=true,必须是某个页面发生异常转跳过来的此对象才有值,否则为null)

                  pageContext:操作Page域

 

 

JSTL和EL(替代JSP中的Java代码的)