JavaWeb--------JSP语法基础学习(特别适合入门)
准备工作:
需要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语法基础学习(特别适合入门)的更多相关文章
- JavaWeb:JSP技术基础
JavaWeb:JSP技术 快速开始 介绍 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%> ...
- 编程基础学习JS的入门教程
将JavaScript 插入网页的方法 使用<script>标签在网页中插入Javascript代码. 插入JavaScript 与在网页中插入CSS的方式相似.使用下面的代码可以在网页中 ...
- 零基础学习C语言入门必备知识
今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...
- 零基础学习STM32之入门学习路线
可以说就目前的市场需求来看,stm32在单片机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝大部 ...
- 【APICloud】APICloud基础学习与快速入门
前言:回顾这几天学习情况,总的来说APICloud官网它的学习资料和社区还是足够了,但是我必须吐槽一句,实在是过于混乱了,视频资料文档资料它一股脑地都堆在了那里,这几天基本处于在各个地方跳转,然后现在 ...
- Maven基础学习(一)—Maven入门
一.概述 Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 ...
- Java语法基础学习DaySix
一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...
- JSP语法基础(一)
一.JSP页面中的凝视 (1)HTML凝视 <!-- comment [ <%=expression %> ] --> 能在client显示的一种凝视,标记内的全部JSP脚本元 ...
- Java语法基础学习DayEighteen(常用类)
一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...
随机推荐
- 金融新手投标模块布局小Demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- latex 字母上面加符号
加^号 输入\hat 或 \widehat 加横线 输入 \overline 加波浪线 输入 \widetilde 加一个点 \dot{要加点的字母} 加两个点\ddot{要加点的字母} 加箭头 输 ...
- HP-UNIX平台修改Oracle processes参数报错:ORA-27154、ORA-27300、ORA-27301、ORA-27302
OS 版本 :HP-UX B.11.31Oracle版本:11.2.0.4 (RAC) (一)问题描述 最近发现无法连接上数据库,报错信息为“ORA-00020:maximum number ...
- redis主从架构的搭建
本项目采用主从架构,一主两从一个哨兵.在x.x.x.69上部署主节点,在70上部署从节点1和哨兵节点,在71上部署从节点2. 准备: 1.首先上传redis文件到三台linux上,目录/home/sy ...
- Linux下安装 Redis
一.部署前准备 1.首先上官网下载Redis 最新稳定的压缩包 2.通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压操作 [root@CentOS6 ~]# tar zxvf redis- ...
- Python字符串必记函数
Python字符串函数数不胜数,想要记完所有几乎不可能,下列几个是极为重要的一些函数,属于必记函数. 一.join 功能: 将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 语 ...
- CentOS6.5 虚拟机 磁盘扩容
1. 关闭虚拟机 2. 编辑虚拟机设置:增加硬盘的置备大小,或者添加新的硬盘 3. 启动虚拟机,查看可用磁盘大小 : # df -Th Filesystem Type Size Used Avail ...
- JS DOM 1
接触JS也有快一个月了,现在来总结一下看过的书,一本本总结,之后再融会贯通,也许更有助于学习.废话不多说,现在看的是<JavaScript DOM编程艺术>,该书挺薄的,不太会望而生畏,( ...
- mysql 几种搜索引擎的比较
mysql中常见的数据库引擎之间的比较 转载自 深入浅出mysql数据库 MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表. 若 ...
- 20190121-n个人围成一圈,凡报到3的人退出圈子,最后留下的是原来第几号的那位
1. 报数问题:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位 思路:此题主要问题在于但凡报到3的人退出圈子,而报数的号码与圈子的 ...