JSP基础

JSP基础

 

 

        /*print和write都是输出内容到客户端
    *共同点:两者都不会刷新页面,都是在原来的基础上继续增加内容
    *两个方法都重写了抽象类里面的write方法
    *不同点:print方法可以将各种数据类型转换为字符串进行输出,write方法只能输出字符串,字符,字符数组等
    */
    out.print("1");
    out.print(1);
    //print输出的所有内容都会转换成字符串型
    out.write("2");
    out.write(2);
    //write方法只能输出字符和字符串,第二个2不会显示

Java server page:服务器端动态网页技术
jsp实际上就是在html里面嵌套java代码,将其分为模版和脚本

servlet的缺陷:

  • servlet的编码部署和调试任务繁琐
  • 生成动态网页繁琐,不利于项目分工

采用JSP技术编写动态页面

  • 由HTML语言和嵌套在其中的Java代码组成的一个普通文本文件
  • JSP页面的扩展名必须为.jsp

JSP运行机制-页面翻译

Web容器第一次接收到对某个JSP页面的请求后,首先自动将该JSP页面翻译成为Servlet代码
tomcat将翻译后的代码放在tomcat安装目录的/work子目录下
所有JSP页面本质上就是一个Servlet程序:jsp继承了HttpJspBase。HttpJspBase又继承了HttpServlet

JSP执行流程

  1. jsp引擎将jsp页面变成java代码。jsp引擎是容器自动配置的。*.jsp,*.jspx都由引擎来处理
  2. 将生成的java代码编译成字节码
  3. 将字节码加载到容器里面
  4. 实例化
  5. 初始化
  6. service方法调用
  7. 销毁
  8. 整个过程编译和翻译只执行一次

JSP通常用于简化创建产生文本的servlet,而servlet更适合于发送原生字节到客户端或需要用java源代码完全控制源代码的场合。二者可以很好的分开

在jsp里面嵌套java代码

  <!-- 在jsp里面嵌套java代码的第一种:脚本声明:<%!%>声明静态块,静态变量,常量,方法 默认会将声明的内容变成全局的-->
<%!
        int i = 0;
        static{
        int j=0;
        }
 %>
 <%!
    public void add(){
    }
  %>
this is jsp
<!--第二种: 脚本片段:在jsp里面写常规的java代码,所有代码默认放在service方法里面,定义的变量是局部变量
    片段中不能出现模版元素,语法必须是java语法,一段代码可以拆分成多个部分
 -->
<% 
    for(i=0;i<4;i++){
%>
<h1>h1</h1>         这里会在网页循环打印4个h1标签
<%} %>

<!-- 第三种:脚本表达式,动态将内容输出到客户端,用来替换out.write或out.print -->

<%="这是脚本表达式输出的内容,后面不能加分号" %>

JSP注释

jsp中可以使用三种注释:

jsp注释<%-- 内容--%>
java代码注释//  /**/        /** */
html注释<!-- neirong -->

JSP指令

jsp中有三种类型的指令:

  • page指令:为当前页面提供处理指令
  • include指令:用于把另一个文件包含在jsp中
  • taglib指令:指定如何包含和访问自定义标签库

page指令

设定整个jsp页面的属性和相关功能 属性名:
language、info、contenType、import、buffer、autoFLush、session、isThreadSafe、errorPage、isErrorPage

include指令

inclde指令表示在JSP编译的时候插入一个包含文本或者代码的文件
把文本中的文本静态的包含过去
语法格式为:
<%@ include file="relativeURL" %>,relativeURL为要包含进来的文件,可以是HTML也可以是jsp,还可以是普通的文本文件。在引入的过程中,属于包含内容,先将外部文件所有内容包含进来,再通过jsp引擎转换成一个servlet,所以说文件里面不能出现变量相同的情况。所以称include包含为静态包含。
包含的文件如果有重复java代码会报错,但是如果网页结构有重复,会以主文件为准

taglib

倒入标签库

JSP动作

用于在jsp页面里面提供的业务逻辑功能,避免了在jsp里面写过多的java代码造成难以维护的局面
<jsp:include>
动作是一种动态的包含(包含结果):包含的 的如果是动态的网页,先生成多个servlet,再把结果包含进来,如果包含的是普通的文本文件,就相当于静态包含
定义了同样的变量,不会报错

<jsp:include page="footer.jsp"></jsp:include>

<jsp:forward> </jsp:forward> 
用于将请求转发给另一个资源

JSP隐式对象

在jsp中操作请求,相应,绘画以及其他servlet中使用的对象
九大隐式对象:
request,response,pageContext,session,application,out,config,page,exception

pageContext

pageContext是jsp中非常重要的一个对象,代表了jsp的运行环境,范围大到可以单独作为一个容器
它的功能主要是用来保存数据,并且还包含了其他八个隐式对象(封装了其他八个对象的引用),它还封装了web中的一些操作(动作):如引用其他资源(include),控制页面跳转

pageContext提供了getAttribute()方法,只会从自身去找键,获取值。 pageContext.findAttribute(),首先也是从自身去找,自身没有键,从其他对象里面获取值。
从小到大的一个范围获取内容page-request-session-application
如果键不存在,则返回null

通过pageContext实现跳转,pageContext类中定义了很多方法,例如forward:替代了servlet的request。getRequestDispacher.forward()

<%
    pageContext.forward("header.jsp");
 %>
posted @ 2017-03-15 19:14  刘秋池  阅读(193)  评论(0)    收藏  举报