Jsp学习(一)

JSP简介

1、定义

  • JSP(Java Server Pages) 是一种运行在 WEB 服务器的脚本语言,它的本质就是 Servlet
  • 当jsp页面第一次被访问时,服务器会把jsp编译成java文件,然后再把java编译成.class,然后创建该类对象,最后调用它的service()方法,第二次请求同一jsp时,直接调用service()方法。
  • jsp 生成的xxx_jsp.java 文件和xxx_jsp .class 文件存放在tomcat的目录下的workCatalinalocalhost部署文件orgapache当前 WEB 应用 的 路径 包名的目录下。例如D:softwareTomcatapache-tomcat-8.0.38workCatalinalocalhostjsporgapachejspjsp
  • jsp和servlet的关系

2、生命周期

  • JSP(xxx.jsp)----"翻译"----->Servlet(xxx_jsp.java)
  • Servlet(.java)------编译------>字节码(.class)
  • 被Servlet容器加载(加载类)--->实例化--->初始化(_jspInit)
  • 提供服务: _jspService(反复被调用)
  • 结束生命周期: _jspDestory()

3、与servlet生命周期比较

  • Servlet Lifecycle:

    创建实例
              初始化(init)
              反复调用 service( req , resp )  
         最后destory()

  •     JSP Lifecycle:

             "翻译" jsp --> servlet
             编译 java --> class
             加载到容器
             创建实例
             初始化 (_jspInit )
             提供服务 ( _jspService )
             _jspDestory()

4、组成

  • jsp页面主要包括4部分:JSP 指令元素,JSP 脚本元素,JSP 动作元素和注释
  • jsp脚本元素 包括声明,脚本程序和表达式
  • 指令:程序通过 JSP 源码 向 JSP 容器 ( Tomcat ) 下达的命令
    <%@ 指令名称 属性名称 = "属性值" %>

    例如

    <%@ page language = "java" %>
  • 表达式
    <%= 表达式 %>

    例如

    <%= reqeust.getContextPath() %>
  • 声明
    <%! 声明属性或方法 %>

    例如

    <%! public  String name = "Java Server Pages" ; %>
  • 脚本
    <% 直接书写 Java 代码块 %>

    例如

    <% for ( int i = 0; i<5 ;i++ ){

         System.out.println(i);

      }

    %>

  • 注释:只存在于 JSP 文件中,相应的 .java 文件和 .class 文件中都不存在
    <%-- Jsp注释--%>

指令

1、page指令

  • 通过 page 指令的属性可以命令 Tomcat 按照要求去处理 JSP
  • page.jsp --"翻译"--> page_jsp.java --"编译"--> page_jsp.class
属性描述
buffer 指定out对象使用缓冲区的大小
autoFlush 控制缓存区是否自动刷出
contentType 指定当前JSP页面的MIME类型和字符编码等同与response.setContentType(“text/html;charset=utf-8”);
errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends 指定servlet从哪一个类继承
import 导入要使用的Java类,导包可以多次使用
info 定义JSP页面的描述信息
isThreadSafe 指定对JSP页面的访问是否为线程安全
language 定义JSP页面所用的脚本语言,默认是Java
session 指定JSP页面是否使用session
isELIgnored 指定是否执行EL表达式
isScriptingEnabled 确定脚本元素能否被使用

 2、include指令

  • 使用 include 指令可以包含 一个 .html 、.jsp 、 .txt 文件(只能是字符文件,不能是图片(inner.jpg)等文件,也不能是 Servlet(InnerServlet.java) )
  • 使用 include 包含一个文件,包含操作发生在 .jsp 被翻译成 .java 阶段
  • 包含,与RequestDispatcher的include()方法的功能相似
  • 解决乱码问题

    方法一:在文件设置pageEncoding编码,即添加<%@page pageEncoding="UTF-8"%>,尽管不能识别该指令,但通过include指令引入时该指令就能起作用

    方法二:在web.xml里统一配置pageEncoding的编码,在web-app标签里添加如下配置:

    <jsp-config>  
        <jsp-property-group>  
            <description>html encoding</description>  
            <display-name>JSPConfiguration</display-name>  
            <url-pattern>*.html</url-pattern>  
            <el-ignored>true</el-ignored>  
            <page-encoding>UTF-8</page-encoding>  
            <scripting-invalid>false</scripting-invalid>  
            <include-prelude></include-prelude>  
            <include-coda></include-coda>  
        </jsp-property-group>  
    </jsp-config>  

测试案例:

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8 "%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>include 指令</title> </head> <body> <div> 使用 include 指令可以包含 一个 .html 、.jsp 、 .txt 文件(只能是字符文件,不能是图片(inner.jpg)等文件,也不能是 Servlet(InnerServlet.java) )</div> <div style="border: 1px solid blue ;">
     <%@ include file = "inner.jsp"%>
    </div>
    
    <div style="border: 1px solid blue ;">
     <%@ include file = "inner.html"%>
    </div>
    
    <div style="border: 1px solid blue ;">
     <%@ include file = "inner.txt"%>
</div> <div>使用 include 包含一个文件,包含操作发生在 .jsp 被翻译成 .java 阶段</div> <div><b>坑:</b> 怎么解决被包含的文件的 乱码问题 ( 在 .jsp 转换成 .java 文件阶段,怎么控制编码 ) ?</div> </body> </html>

 inner.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8"%>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>inner</title> </head> <body>    <% for( int i = 0 ; i < 10 ; i++ ) { out.println( i ) ; // 这个 out 是 JSP 内置对象 } %> </body> </html>

 inner.html

<%@page pageEncoding="UTF-8"%>  
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>我是内部的HTML页面</h1>
</body>
</html>

inner.txt

<%@page pageEncoding="UTF-8"%>  
你好,我是文本文件

运行结果如下:

3、taglib 指令

  • 导入标签库

 测试案例:

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8"%>
<%@ taglib prefix = "c" uri= "http://java.sun.com/jsp/jstl/core" %>
<!-- prefix前缀 对应的uri--> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>taglib指令</title> </head> <body> <c:forEach begin="1" step="2" end="11" var="x"> <!-- EI表达式 --> ${ x } </c:forEach> </body> </html>

表达式

1、定义

  • 表达式可以是 1 + 1 ,或者是 request , 或者是 request.getContextPath()
  • 表达式都会有自己的 "运算" 结果
  • 表达式被用来用作 输出 或 赋值

测试案例:

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8"%>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSP表达式</title> </head> <body> <h4>
  
   <%= 1 + 1 %> </h4> <h4>
     <%= request %> </h4> <h4>
     <%= request.getContextPath() %>
</h4> </body> </html>

声明

 1、定义

  • 在JSP中可以通过声明来声明属性和方法
  • 被声明的属性和方法都被包含在 jsp 对应的那个 servlet 类中

测试案例:

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8"%>
<%@ page import= "java.io.IOException"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>声明</title> </head> <body>    <%-- 声明属性 加到类里面直接作为成员,全局 --%>
  <%! public  String name = "Java Server Pages" ; %> 
  <%-- 声明方法--%> 

    <%!
        public void hello( JspWriter out ) throws IOException {
            System.out.println( name );
            out.print( name );
        }
  %>

  <%-- 通过脚本来调用方法 --%>    
    <%! hello( out ); %> 
</body>
</html>

 脚本

1、定义

  • 在JSP中可以嵌入Java代码

测试案例:

<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8"%>
<%-- jsp注解--%> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>脚本</title>
</head>
<style>
h1 {
    /*css 注释*/
    color: blue;
}
</style>

<script>
    //js单行注释
    var i = 0;
    /*js多行注释
     function f1(){
     alert(i);
     }*/
</script>

<body>
    <!--HTML注释  -->
   <% for (int i = 1; i < 5; i++) { //java注释 %> <h1></h1>
   <%
        }
   %>
 </body> 
</html>

注释

1、各类注释

jsp注释:<%-- jsp注解--%>

js注释://js单行注释  /*js多行注释*/

css注释: /*css注释*/

java注释://java单行注释  /*Java多行注释*/   /**Java文本注释*/

html注释:<!--HTML注释 -->

xml注释:<!--XML注释 -->

转载请于明显处标明出处

http://www.cnblogs.com/AmyZheng/p/9051076.html

原文地址:https://www.cnblogs.com/AmyZheng/p/9051076.html