准备工作:

需要Tomcat8.0,MyEclipse,JDK

JSP是一种运行在服务器端的脚本语言,JSP页面又是基于HTML网页的程序,它是Java Web 开发技术的基础。

基本内容:

JSP页面的结构

JSP指令

脚本元素,注释和动作

JSP内置对象(9个)

JSP页面的基本结构(5个部分组成)

HTML元素

注释:包括JSP注释和HTML注释

脚本元素:声明,表达式,脚本片段等;

指令:包括page指令,taglib指令,include指令等;

动作:包括<jsp:useBean>、<jsp:forward>、<jsp:include>等动作标记

1.1         JSP注释

JSP注释,用户在客户端看不到(隐藏注释)

HTML注释,用户在客户端可以看到(输出注释)

<%--   此处维注释内容   --%>

1.2         脚本元素

1.2.1声明变量

变量的类型可以是Java允许的任何类型

<%!   声明语句;   %>
例如下面的代码声明一个整型变量i和一个Date类型的变量
<%!
int i = 0;
java.util.Date date = new java.util. Date();
%>

1.2.2声明方法

例如下面的代码声明一个两个整数之和的方法
<%!
int add(int opt1, int opt2)
{
return opt1 + opt2
}
%>

注意:该声明是页面级的,它们在声明语句所在的页面有效。当服务器把JSP页面变为Java类时候,声明的变量标为类的成员变量,声明的方法变为类的方法,成员变量被所有用户共同使用,所以当多个用户访问JSP页面时候,改变成员变量的值,会影响其他用户使用此成员变量。

JSP页面中的表达式

表达式在Tomcat服务器运算后结果转换维字符串

<% = 表达式 %>

JSP页面中的Java程序段

<%     Java程序段     %>

Java程序段中声明的变量为局部变量,不同用户进行访问时候,这些局部变量即使相同也互不影响。

<%
for(int i = 1; i < 6; i++)
{
out.println("打印了" + i + "次<br>");
}
%>

JSP指令

JSP指令主要有page、include和taglib,JSP指令负责提供JSP页面的相关信息以及设置JSP页面的属性等。

1.page指令

<%@page language = "java"
contentType = "MIMETpye; charset = characterSet"
pageEncoding = "characterSet"
import = "package.class"
extends = "package.class"
buffer = "none|size kb|8kb"
errorPage = "URL"
autoFlush = "false|true"
isThreadSafe = "false|true"
isErrorPage = "true|false"
isELIgnored = "true|false" %>
属性  
language JSP页面脚本语言
contentType JSP页面的MIME类型和字符编码集,默认为“text/html;charset = ios-8859-1”
pageEncoding JSP页面的字符编码
import JSP页面所使用的Java API,
extends JSP页面产生的Servlet继承自哪个父类,默认维HttpJspBase
buffer 设定输出流缓存的大小,默认为8kb
errorPage JSP页面发生错误时网页被重定向指向的错误处理页面
autoFlush 指定输出流缓冲区的内容是否自动清除,默认为true
session 指定该JSP页面是否需要一个HTTP会话,默认维true
isThreadSafe 指定该JSP页面是否支持多个用户同时请求(即多线程同步请求),默认为true
isErrorPage 指定JSP页面是否维错误处理页面,默认维false
isELIgnored 指定是否忽略EL表达式,默认为false
info 该属性可以设置为任意字符串

例子:

<%@ page 	language="java"
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>例子</title>
</head> <body>
<%Date date = new Date(); %>
当前的系统日期为:<%= date %>
<br>
<%
for(int i = 1; i < 6; i++ )
out.print("打印了"+i+"次<br>");
%>
</body>
</html>

运行结果

2.include指令

include指令是页面包含指令,在JSP页面中可以使用inclue指令包含另一个文件,包含的文件可以是HTML文件,也可以是HSP页面甚至是普通文本文件。

inclue指令只有一个属性,即file属性,file属性值是一个包含文件的URL。

include指令将会在JSP页面编译时插入包含的文件,它是静态的。

<%    include file = "url"    %>

例子:

<%@ page 	language="java"
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>例子:</title>
</head> <body>
<%@ include file = "sub.jsp"%>
------------------------------------<br>
这是主文件
</body>
</html>
<%@ page 	language="java"
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
<!DOCTYPE html">
<html>
<head>
<meta charset = "utf-8">
<title>包含页面sub</title>
</head> <body>
这是包含文件<br>
</body>
</html>

注意两个JSP页面的Page指令的contentType属性值务必一致,否则将导致错误。

3.taglib指令

taglib指令的作用是指定该JSP页面使用自定义标签,使JSP页面更加个性化,其语法格式如下:

<%@ taglib = url = "tagURL" prefix = "prefix"  %>

uri:指定自定义标签的路径

prefix:指定自定义标签的前缀

<!--使用taglib指定引用Struts2标签库,前缀为s-->
<%@ taglib uri = "/struts - tags " prefix = "s" %>
<!-- 使用property标签 -->
<s:property value = "user.name"/>

JSP动作

JSP动作标记有20多种,以下详细介绍一种

1.<jsp:include>动作标记:将一个指定的页面包含到使用此动作标记的JSP页面中

<!--方法一-->
<jsp:include page = "文件的URL | <%= 表达式 %>" flush = "true" />
<!--方法二-->
<jsp:include page = "文件的URL | <%= 表达式 %>" flush = "true" >
嵌套的子标记
</jsp:include>

page:指定包含页面的相对路径(URL),或者表示相对路径的表达式

flush:如果使用flush属性,若该属性值为true,表示缓存将会被清空。

<jsp:include>动作标记和include指令标记的作用非常相似,区别如下

include:指令是静态包含,执行时间是在编译阶段,引入的内容为静态文件,在编译为Servlet时和主页融合在一起。

<jsp:include>动作标记是动态包含的,执行时间是在请求处理阶段,引入的内容在执行页面被请求时动态生成后再包含到页面中,

<%@ page 	language="java"
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
<!DOCTYPE html">
<html>
<head>
<meta charset = "utf-8">
<title>例子:</title>
</head> <body>
以下是包含文件include.jsp中的内容:<br>
-----------------------------------------<br>
<jsp:include page = "include.jsp" flush = "true"/>
以下为主文件:<br>
-----------------------------------------<br>
测试include动作标记的用法
<!-- 我们在这里用include的两种不同形式来引入date.jsp这个文件 -->
</body>
</html>
<%@ page 	language="java"
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.*"
%>
<%
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String date_cn = "";
String dateStr = "";
switch( cal.get(Calendar.DAY_OF_WEEK) ){
case 1:date_cn = "日";break;
case 2:date_cn = "一";break;
case 3:date_cn = "二";break;
case 4:date_cn = "三";break;
case 5:date_cn = "四";break;
case 6:date_cn = "五";break;
case 7:date_cn = "六";break;
}
dateStr = cal.get(Calendar.YEAR) + "年" + (cal.get(Calendar.MONTH) + 1) + "月" + cal.get(Calendar.DAY_OF_MONTH) + "日(星期" + date_cn + ")";
out.print(dateStr);
%>

运行第一个文件结果:

<jsp:param>动作标记主要用来传递参数语法格式如下:

<jsp:param name = "参数名称" value = "参数值"/>

<jsp:forward>动作标记的作用是页面重定向,即跳到page属性指定的页面,该页面可以说一个HTML页面,jsp页面,甚至是一个程序段,其语法格式有下面两种。

<!--方法一-->
<jsp:forward page = "跳转页面的URL|<% =表达式 %>" />
<!--方法二-->
<jsp:forward page = "文件的URL | <%= 表达式 %>" >
<jsp:param value = "参数值" name = "参数名"/>
</jsp:forward>

在本例中,使用Math类的random()方法产生一个0~100的随机数成绩,使用<jsp:forward>动作标记跳转到forward.jsp页面,并且根据成绩是否及格传递不同的参数。

注意:在使用<jsp:forward>动作标记跳转页面时,其URL并不会随之改变为跳转后的页面地址,仍是跳转前的URL。此外,一旦执行了<jsp:forward>动作标记,那么当前页面的后续代码将停止执行,例如example3_5.jsp页面中<jsp:forward>标记后的代码将不会被执行,并且当刷新页面的时候会导致重复提交.

<jsp:useBean>动作标记

<!--方法一-->
<jsp:useBean id = "bean的名字" class = "引用bean的类" scope = "bean的作用域">
</jsp:useBean>
<!--方法二-->
<jsp:useBean id = "bean的名字" class = "引用bean的类" scope = "bean的作用域"/>
属性 意义
id 引用的JavaBean在所定义的作用域内的名称,在此作用域内使用该id就代表所引用的JavaBean。注意id值的大小写,Java是严格区分大小写的。
class

所引用JavaBean的完整包路径,一般格式为"package.class"

scope 指定该JavaBean的作用域以及id变量名的有效范围,取值可以为page、request、session、application,默认值维page.
page 其作用在当前页面有效,当用户离开此页面时JavaBean无效,不同用户访问同一个页面作用域维page的JavaBean时,两个用户的JavaBean的取值是互不影响的,即一个用户改变自己的JavaBean属性不会影响其他用户。
request

作用在用户的请求期间有效,用户在访问Web网站期间可能会请求多个页面,如果这些页面有取值范围为request的JavaBean引用,那么在每个页面分配的JavaBean也是互不影响的;当Web服务器对该请求做出响应之后,该JavaBean无效。

session 在用户的会话期间有效,用户在某个页面改变了JavaBean的属性,会影响其他用户。
application 作用范围是整个Web应用

<jsp:setProperty>动作标记

<jsp:setProperty>通常与<jsp:useBean>动作标记一起使用

<jsp:setProperty name = "useBean标记中属性id的值" property = "* | JavaBean 的属性名"
value = "JavaBean属性的值| <% = 表达式 %>" />

<jsp:getProperty>动作标记

<jsp:setProperty>通常与<jsp:useBean>动作标记一起使用

<jsp:getProperty name = "useBean标记中属性id的值" property = "* | JavaBean 的属性名"  />

JSP内置对象

JSP提供了9种内置对象

内置对象 作用域 属性
request request 表示HTTP协议的请求,提供对请求数据的访问,JSP页面可以在请求范围内共享数据
response page 表示HTTP协议的响应,提供了访问响应报文的相关方法
page page 代表JSP页面对应的Servlet实例
pageContext page 表示JSP页面本身的上下文,它提供了一组方法用于管理具有不同作用域的属性
session session 表示HTTP协议的会话,可以共享服务器与浏览器之间的会话数据,一旦关闭了浏览器,会话数据将自动销毁
application application 代表应用程序上下文,允许JSP页面与同一应用程序中的Web组件共享数据
out page out提供输出流的访问
config page config提供了一组方法访问Web应用程序的配置文件web.xml
exception page 表示异常对象,该对象含有特定JSP异常处理页面访问的异常信息

request对象

当客户端向Web服务器发送请求获取某种资源时,相当于向Web服务器发送了一个HTTP请求( request ),一个HTTP请求报文一般包括4个部分,即请求行,请求首部,空行和请求数据等。

request对象主要是用来获取客户端的请求信息,以获取通过HTTP协议传送给服务器端的数据。

request常见的对象:https://mp.csdn.net/postedit/82049435

request内置对象一些方法的使用

example3_6.jsp

<%@ page 	language="java"
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.*"
%>
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>例子</title>
</head> <body>
<form action = "result.jsp" method = "post">
请输入内容:<input type = "text" name = "param"/><br>
<input type = "submit" value = "确定"/>
</form> </body>
</html>

result.jsp

<%@ page 	language="java"
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.*"
%>
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>例子</title>
</head> <body>
<%
//设置请求报文的字符编码为UTF-8,避免中文字符发生乱码
request.setCharacterEncoding("utf-8");
%>
从example3_6.jsp页面中传过来的值为:<%= request.getParameter("param") %><br>
客户端的IP地址为:<%= request.getRemoteAddr() %><br>
客户端的主机名为:<%= request.getRemoteHost() %><br>
客户端的端口号为:<%= request.getRemotePort() %><br>
服务器的名称为:<%= request.getServerName() %><br>
服务器的端口号:<%= request.getServerPort() %><br>
客户请求使用的协议为:<%= request.getScheme() %><br>
客户端提交信息的页面为:<%= request.getServletPath() %><br>
客户端提交信息的长度为:<%= request.getContentLength() %><br>
采用的信息编码为:<%= request.getCharacterEncoding() %><br>
HTTP文件头中的User-Agent值为:<%= request.getHeader("User-Agent") %><br>
HTTP文件头中的accept值为:<%= request.getHeader("accept") %><br>
Web应用的目录为:<%= request.getContextPath() %><br>
</body>
</html>

运行结果:

JavaWeb--------JSP语法基础学习(特别适合入门)的更多相关文章

  1. JavaWeb:JSP技术基础

    JavaWeb:JSP技术 快速开始 介绍 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%> ...

  2. 编程基础学习JS的入门教程

    将JavaScript 插入网页的方法 使用<script>标签在网页中插入Javascript代码. 插入JavaScript 与在网页中插入CSS的方式相似.使用下面的代码可以在网页中 ...

  3. 零基础学习C语言入门必备知识

    今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...

  4. 零基础学习STM32之入门学习路线

    可以说就目前的市场需求来看,stm32在单片机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝大部 ...

  5. 【APICloud】APICloud基础学习与快速入门

    前言:回顾这几天学习情况,总的来说APICloud官网它的学习资料和社区还是足够了,但是我必须吐槽一句,实在是过于混乱了,视频资料文档资料它一股脑地都堆在了那里,这几天基本处于在各个地方跳转,然后现在 ...

  6. Maven基础学习(一)—Maven入门

    一.概述      Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 ...

  7. Java语法基础学习DaySix

    一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...

  8. JSP语法基础(一)

    一.JSP页面中的凝视 (1)HTML凝视 <!-- comment [ <%=expression %> ] --> 能在client显示的一种凝视,标记内的全部JSP脚本元 ...

  9. Java语法基础学习DayEighteen(常用类)

    一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...

随机推荐

  1. [转]TestNG的多线程并行

    前言 最近在做项目里的自动化测试工作,使用的是TestNG测试框架,主要涉及的测试类型有接口测试以及基于业务实际场景的场景化测试.由于涉及的场景大多都是大数据的作业开发及执行(如MapReduce.S ...

  2. 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)

    洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...

  3. admin源码解析及自定义stark组件

    admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单 ...

  4. window下安装composer

    1.什么是composer 一个智能的下载工具.比如说我的项目要安装yii框架,而yii是依赖于其他东西的,仅仅安装yii是不够的,这样会导致我的项目也不能正常运行:怎么办呢,我们可以一个一个手动的将 ...

  5. ie浏览器下载文件时文件名乱码

    做一个文件下载功能时,用ie浏览器下载时文件名乱码,火狐和谷歌正常,修改后ie显示正常,修改方法如下: @RequestMapping(value = "fileDownload" ...

  6. Windows10 IIS安装php manager和IIS URL Rewrite 2.0组件的方法

    Windows10中自带的Server:Microsoft-IIS///8.5/10上安装.微软脑子秀逗,跳过了9,以为能解决版本识别的问题,没想到弄成10,还是出现了版本识别的问题,真是自己打自己的 ...

  7. Folyd + 路径存储

    一.Folyd 算法原理 如果 AB + AC < BC 那么, BC最短路就要经过 A. 在算法进行过程中,应该是 ,B-A 有很多路径,B 代表这些路径权值之和,A-C也有很多路径,C是这些 ...

  8. 简单的反编译class文件并重新编译的方法

    在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...

  9. TinyMCE插件:RESPONSIVE filemanager 9 文件名统一格式化

    上传图片方法(filemanager/UploadHandler.php) 在上传图片的函数中查看,发现$file->name是一个完整的[文件名.后缀名],所以使用explode(),文件名和 ...

  10. sass的嵌套

    sass的嵌套包括两种: 1.选择器的嵌套.(最常用到) 指的是在一个选择器中嵌套另一个选择器来实现继承,从而增强了sass文件的结构性和可读性. 在选择器嵌套中,可以使用&表示父元素选择器 ...