准备工作:

需要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. 十三、IntelliJ IDEA 中的版本控制介绍(下)

    我们已经简单了解了 IntelliJ IDEA 的版本控制机制,那么接下来,就让我们一起看看在 IntelliJ IDEA 中进行具体的版本控制操作. 标注1:Checkout from Versio ...

  2. Ajax全局加载框(Loading效果)的配置

    在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常明确的提示,也就是我们所谓的进度条 废话完成~ 实现原理: Jquery可以对ajax进 ...

  3. java中匿名内部类总结

    在java的世界里,提供了匿名内部类语法糖,用于帮助大家简化代码,本文简要从接口,抽象类以及常规类以代码的形式描述其常用模式. 1. 接口模式 public interface IWriter { v ...

  4. Oracle中插入千万条测试数据

    测试需求,id.姓名.邮箱.手机号不可重复 1.创建序列 create sequence id_sequence; //创建序列id_sequence 2.创建表 create table USERI ...

  5. 丑数(Ugly Numbers, UVa 136)

    丑数(Ugly Numbers, UVa 136) 题目描述 我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因 ...

  6. TinyMCE:下载、安装、配置

    第一步:下载 官网下载:https://www.tiny.cloud/download/ TinyMCE从4.0开始,不再支持直接下载,而是直接使用提供免费的CDN,让用户免除安装过程,可以在网站中使 ...

  7. 微信小程序实现watch属性监听数据变化

    Vue 提供了一种通用的方式来观察和响应 Vue 实例上的数据变动:监听属性 watch. 虽然watch的滥用会导致性能不佳,但在一些情况下我们还是需要watch,使得代码更加简洁.逻辑更加清晰(其 ...

  8. yii学习笔记(3),自定义全局工具函数

    在平时开发是经常需要打印数据来调试 常见的打印方式有print_r和var_dump,但是这样打印出来格式很乱不好浏览 在打印函数前后加上<pre></pre>就可以将内容原样 ...

  9. PHP curl 携带cookie请求抓取源码,模拟登陆。

    公司需要采集一批手机号码,有指定网站.但是需要登陆后才能看到客户号码,手动点击复制太慢,如此就写了以下模拟登陆采集号码程序,分享给大家参考参考. function request_url_data($ ...

  10. day 16 初试面试对象

    1.初识面向对象      面向过程:             一切以事物的发展流程为中心      面向对象:             一切以对象为中心.一切皆为对象.具体的某一个事务就是对象 打比 ...