JSP基础语法(语法、指令、生命周期)

一、JSP简介

JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了在Java当中使用HTML标签。JSP是一种动态网页技术标准,也是JavaEES的标准。JSP与Servlet一样,是在服务器端执行的。

常见动态网站开发技术对比
  • JSP:Java平台,安全性高,适合开发大型的,企业级的、分布式的Web应用程序。
  • Asp.net:Net平台,简单易学,安全性以及跨平台性差。
  • PHP:简单,高效,成本低开发周期短,特别适合中小型企业的Web应用开发。(LAMP:Linux+Apache+MySQL+PHP)。
JSP页面的元素构成
  • 静态内容
  • 指令
  • 表达式
  • 小脚本
  • 声明
  • 注释

在JSP中其基本的核心语法都来源于Java。

二、JSP注释

在JSP中支持两种注释语句的操作,一种是显示注释,这种注释客户端是可见的;另外一种是隐式注释,这种注释客户端是无法看见的。

1、显示注释语法:(HTML注释,客户端可见)

 

2、隐式注释语法:(JSP注释)

<%-- 注释 --%>,JSP注释

3、隐式注释语法:(JSP脚本注释)

 //注释,单行注释
/* 注释 */,多行注释

三、JSP脚本

在JSP页面中执行的java代码。

1、Scriptlet(脚本小程序)

在JSP中,最重要的部分就是Scriptlet(脚本小程序),所有嵌入在HTML代码中的Java程序都必须使用Scriptlet标记出来。在JSP中一共有3中Scriptlet代码。

  • <% java代码 %>;在此Scriptlet中可以定义局部变量、编写语句等。

注意:

  • 尽量不要再JSP中定义类或方法,当JSP中需要类或方法时,往往会通过JavaBean的形式调用。
  • 尽量不要使用out.println()输出,而使用表达式输出。
2、Scriptlet标签

在程序中如果过多的出现<%%>会导致代码混乱,所以在新版本的JSP中提供了一种Scriptlet标签,使用此标签可以完成与<%%>同样的功能。

格式:


    java scriptlet 代码

四、JSP声明

在JSP页面中定义变量或者方法。

  • <%! java代码 %>;在此中可以定义全局变量、方法、类。

五、JSP表达式

在JSP页面中执行表达式。

  • <%=表达式 %>;在此中可输出一个变量或一个具体内容。

六、JSP指令(三大指令page、include、taglib)

1、page指令

page指令通常位于JSP页面的顶端,同一个页面可以有多个page指令。

page指令在JSP开发中较为重要,使用此属性,可以定义一个JSP页面的相关属性,包括设置MIME类型,定义需要导入的包,错误页的指定等。

JSP基础语法(语法、指令、生命周期)_第1张图片

对于以上的操作指令,只有import指令可以重复出现多次,而对于其他属性只能出现一次。且在以上若干指令中,比较常用的是Language、contentType、pageEncoding、errorPage/isErrorPage、import这5个指令。

page指令语法:

<%@ page 属性="内容"%>

1.1、设置页面的MIME
在page指令中,contentType属性是使用最多的一个属性,如果想让一个JSP文件显示中文,则必须对整个页面指定MIME编码。

什么是MIME,有什么作用?
许多文件都存在扩展名,如.doc、.htm ,根据这些不同的扩展名可以打开不同的应用程序,那么MIME(Multipurpose Internet Mail Extensions,多功能Internet邮件扩充服务)就是指定某个扩展名文件将使用何种应用程序打开的一个说明。当该扩展名文件被访问时,浏览器会自动指定应用程序来打开。

为JSP页面指定编码

<%@ page language="java" contentType="text/html;charset=GBK"%>

从Tomcat安装目录/conf/web.xml中可以查询MIME类型。例如,如果现在希望页面可以按照Word文档的形式显示,则可以使用如下的MIME类型:


    doc
    application/msword

1.2、设置文件编码
除了使用contentType指定MIME类型外,还使用charset进行页面编码的指定,当然,在page指令中也可以使用pageEncoding进行编码的指定。

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>

contentType使用charset设置编码,和使用pageEncoding设置有什么区别?
pageEncoding指的是JSP文件本身的编码,而contentType中的charset指的是服务器发送给客户端的内容编码(更常使用)。

1.3、错误页面的设置
当一个页面出错后,会自动跳转到一个页面上进行错误信息的提示,那么这个操作,就可以通过错误页面来指定。
要想完成错误页的操作,则一定要满足一下两个条件:

  • 指定错误出现时的跳转页,通过errorPage属性指定。
  • 错误处理页必须有明确的标识,通过isErrorPage属性指定。
    如果一个JSP页面运行时出现了错误,会通过errorPage指定的页面进行跳转,被跳转的页面中必须将isErrorPage的内容设置为true。
    会出现错误的页面:
// show.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page errorPage="error.jsp"%>
<%
    int result = 10 / 0;
%>

错误处理页:

//error.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page isErrorPage="true"%>

程序出错了

注意:
错误页的跳转属于服务器端的跳转。
一旦发生错误后,页面的显示内容将变成error.jsp中设置的内容,但是在地址栏上依然是show.jsp。在整个操作工程中,客户端对服务器只发送了一次请求,服务器对客户端也只回应了一次。


JSP基础语法(语法、指令、生命周期)_第2张图片
服务器端跳转

以上的错误页是在每一个JSP页面中指定,当然,也可以在整个虚拟目录中指定全局的错误处理,要想达到这个效果,就必须修改web.xml文件,在其中加入错误页的操作。

全局的错误处理可以处理两种类型的错误,一种是HTTP代码的错误,如404或500;还有一种是异常的错误,如NullPointerException等。

修改web.xml文件加入错误处理


    500
    /ch05/error.jsp


    404
    /ch05/error.jsp


    java.lang.NullPointerException
    /ch05/error.jsp

1.4、数据库连接操作
在page指令中可以使用import导入所需要的Java开发包,所以直接利用此属性将java.sql包导进来,即可进行数据库的开发操作。
配置数据库的驱动程序,将mysql的驱动程序复制到Tomcat\lib目录中。
配置完成后需要重新启动服务器。只有这样,才能将新配置的jar包在服务器启动时加载进来,不会出现找不到驱动程序的错误。

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>

    
        
    
    
        <%!
            public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
            public static final String DBURL = "jdbc:mysql://localhost:3306/databasename";
            public static final String DBUSER = "root";
            public static final String DBPASS = "";
        %>
        <%
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet = null;
        %>
        <%
            try{
                Class.forName(DBDRIVER);
                conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
                String sql = "select * from tablename";
                pstmt = conn.prepareStatement(sql);
                rs = pstmt.executeQuery();
        %>
    
<% while(rs.next()) { } %>
<% } catch(Exception e) { System.out.println(e); } finally { rs.close(); pstmt.close(); conn.close(); } %>
2、include指令(包指令)

将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。

在一般的页面开发中会有很多内容要重复的显示。
要实现这种效果有两种方法:

  • 让每一个页面都分别包含该部分。
  • 将每个部分做成一个文件,然后在需要的地方导入(包含)。

要想实现这样的包含功能,在JSP中可以通过静态包含和动态包含两种方式完成。

2.1、静态包含
静态包含指令是在JSP编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,而包含的文件可以是JSP文件、HTML文件、文本文件,或是一般java程序。

静态包含语法:

<%@ include file="要包含的文件路径"%>

包含时不管文件的后缀是什么,都会将内容直接包含并显示。

2.2、动态包含
使用指令可以完成动态包含的操作,与之前的静态包含不同,动态包含语句可以自动区分被包含的页面是静态还是动态。如果是静态页面,则与静态包含一样,将内容包含进来进行处理;而如果被包含的页面是动态页面,则可以先进行动态的处理,然后再将处理后的结果包含进来。

动态包含语法:

//不传递参数

//传递参数

    

flush属性设置为false表示这个网页完全被读进来以后才会输出。在每一个JSP的内部都会有一个Buffer,所以如果是true,当Buffer满了就输出,一般此属性都会设置成true。

静态包含的操作属于先包含后处理,而动态包含如果被包含的页面是动态页,则属于先处理后包含。

在实际开发中建议使用动态包含。

3、taglib指令

是一个标签库。使用标签库定义新的自定义标齐,在JSP页面中启用自定义的标签。

七、跳转指令

在Web中可以使用指令,将一个用户的请求(request)从一个页面传递到另一个页面,完成跳转的操作。

页面跳转语法

//不传递参数

//传递参数

    

此跳转语句也属于服务器端跳转。

八、JSP页面生命周期

JSP基础语法(语法、指令、生命周期)_第3张图片
JSP页面的生命周期

jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统资源的需求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步问题,由于该Servlet始终驻于内存,所以响应是非常快的。

八、项目联系
1、实例操作:用户登录程序实现(JSP+JDBC实现)

1.1、创建数据库表

JSP基础语法(语法、指令、生命周期)_第4张图片
user表结构

1.2、程序设计思路

JSP基础语法(语法、指令、生命周期)_第5张图片
登录操作流程图
JSP基础语法(语法、指令、生命周期)_第6张图片
JSP页面
2、开发实战练习

2.1、增加分页显示功能。


JSP基础语法(语法、指令、生命周期)_第7张图片
表结构

程序显示格式如下:


2.2、在以上程序中增加模糊查询的功能,之后对查询出的数据进行分页显示。

你可能感兴趣的:(JSP基础语法(语法、指令、生命周期))