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标签,使用此标签可以完成与<%%>同样的功能。

格式:

<jsp:scriptlet>
    java scriptlet 代码
</jsp:scriptlet>

四、JSP声明

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

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

五、JSP表达式

在JSP页面中执行表达式。

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

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

1、page指令

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

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

对于以上的操作指令,只有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类型:

<mime-mapping>
    <extension>doc</extension>
    <mime-type>application/msword</mime-type>
</mime-mapping>

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"%>
<h1>程序出错了</h1>

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


服务器端跳转

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

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

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

<error-page>
    <error-code>500</error-page>
    <location>/ch05/error.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-page>
    <location>/ch05/error.jsp</location>
</error-page>
<error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/ch05/error.jsp</location>
</error-page>

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

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <%!
            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();
        %>
    <center>
        <table border="1" width="80%">
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        <%
            while(rs.next()) {
                
            }
        %>
        
        </table>
    </center>
        <%
            } catch(Exception e) {
                System.out.println(e);
            } finally {
                rs.close();
                pstmt.close();
                conn.close();
            }
        %>
    </body>
</html>
2、include指令(包指令)

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

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

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

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

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

静态包含语法:

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

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

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

动态包含语法:

//不传递参数
<jsp:include page="{要包含的文件路径 | <%=表达式%>}" flush="true | false"/>
//传递参数
<jsp:include page="{要包含的文件路径 | <%=表达式%>}" flush="true | false">
    <jsp:param name="参数名称" value="参数内容"/>
</jsp:include>

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

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

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

3、taglib指令

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

七、跳转指令

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

页面跳转语法

//不传递参数
<jsp:forward page="{要包含的文件路径 | <%=表达式%>}">
//传递参数
<jsp:forward page="{要包含的文件路径 | <%=表达式%>}" flush="true | false">
    <jsp:param name="参数名称" value="参数内容"/>
</jsp:forward>

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

八、JSP页面生命周期

JSP页面的生命周期

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

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

1.1、创建数据库表

user表结构

1.2、程序设计思路

登录操作流程图
JSP页面
2、开发实战练习

2.1、增加分页显示功能。


表结构

程序显示格式如下:


简书

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 1.什么是JSP (1)jsp全称是Java Server Pages,它和Servlet技术一样都是sun公司定...
    yjaal阅读 3,628评论 5 99
  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,116评论 1 18
  • 前面讲了servlet入门实践现在开始介绍jsp入门实践,开发环境的搭建请参考我前面的tomcat的文章,jsp入...
    伊豚wall阅读 3,358评论 2 56
  • 什么是jsp? 很久之前,我们的网页都是静态的,就是我们所看到的页面在编写好之后总是唯一的。后来有人便提出动态页面...
    ezsync小智阅读 1,491评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139