JavaWeb--------JSP语法基础学习(特别适合入门)

时间:2023-02-16 12:01:25

准备工作:

需要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>

运行结果

JavaWeb--------JSP语法基础学习(特别适合入门)

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>

 JavaWeb--------JSP语法基础学习(特别适合入门)

注意两个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);
%>

运行第一个文件结果:

JavaWeb--------JSP语法基础学习(特别适合入门)

<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语法基础学习(特别适合入门)