JSP页面的基本结构

时间:2023-01-22 15:22:06
一:一个JSP页面由以下基本元素组成。
(1)HTML标签
(2)CSS
(3)变量和方法
(4)Java代码段
(5)JSP动作和指令
(6)其他脚本元素(如Javascript)
二:JSP的基本标签
1.<%或<jsp开头 ,%>或>结尾   推荐<% %>
2.变量声明 <%!或<%开头 ,%>结尾 推荐<%!  %>
3.JSP代码段 <%开头 ,%>结尾   
4.JSP表达式 <%=开头  %>结尾
三:JSP三种注释
1.隐藏注释  <% --注释语句 --%>   被JSP页面完全忽略
2.HTML注释 <!-- 注释语句-->
3.Java注释 <% /*注释语句*/ %>
四:变量和方法的声明
1).<!-- 声明变量 -->
1.作用范围:只在本JSP页面中有效
2.<%!  %>中声明
3.命名方法与JAVA一样,必须以分号结尾
4.可以直接使用<% @ page    %>中声明的变量
<%! int sum=0; %>
2).<!-- jsp代码段 -->
1.在请求期间执行可以使用JSP页面所定义的变量,方法,表达式或者JavaBean.
2.脚本定义的变量和方法在当前整个页面有效,但不会被其他线程共享,用户对该变量的不会影响其他用户,当变量所在的页面关闭时该变量就会被销毁
1.普通代码段
  <% for(int i=1;i<=100;i++){
  sum=sum+i;
  ++i; }
%>
2.含方法的代码段
<%! int a=0; %>
  <%! int add(){
  a++;
  return a;
  }
  %>
  <p><%= add() %>
3.含对象的代码段
<body>
  <%! class test{
       int add(int a){
  a++;
  return a;
   }  } %>
  <%! test test1=new test();int b=0; %>
  <% b=test1.add(3); %>
  <p><%=b %>
3).<!--表达式-->
1.向页面输出内容
2.生成动态的链接地址
3.动态指定form表单处理页面
<p>1加到100的和为:<%=sum %></p>
五:JSP常用指令
1).page指令(12个属性)
1.language属性-指定JSP页面使用的脚本语言
<% @page language="java" %>
2.extends属性--指定JSP编译器父类的完整限定名(不建议使用)
<% @page extends="javax.servlet.httpService"%>
3.imPort属性--用于导入JSP页面使用的JAVA API类库。是唯一一个可以多次使用的属性。
<% @page import="java.util.Date" %>
4.session属性--用于指定是否可以使用session对象,若允许页面参与HTTP会话则为true.默认为true
<% @page session="true" %>
5.buffer属性--用于设定页面缓冲区大小(字节数)
<% @page buffer="64k" %>
6.autoFlush8属性--用于指定JSP页面是否自动刷新,若不自动刷新,当缓冲区满时抛出一个异常。
<% @page autoFlush="false" %>
7.isThreadSafe属性--用于指定JSP页面是否能够处理一个以上的请求,若是,则该页面肯恶搞同时收到多个JSP引擎发出的多个请求。
8.info属性--用于指定JSP页面的相关信息文本
9.errorPage属性--用于指定错误页面,无默认值。
10.isErrorPage属性
11.contentType属性--用于指定内容MIME类型和JSP页面的编码方式
12.pageEncoding属性--用于指定Jsp页面的编码方式
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2.include指令
用于在当前JSP页面中加载需要插入的文件代码,即为页面插入一个静态文件,如JSP页面,HTML页面,文本文件或是一段JAVA程序,这些加载的代码和原有的JSP代码合并成一个新的JSP页面,使用此命令有助于实现JSP的模块化。<% @include  %>将会在JSP编译时插入一个包含文本或代码的文件,这个过程是静态的。静态的包含的是指这个被包含的文件将会被插入到JSP文件中去
<% @include file="文件名"%>
<!--JSP_02-->
<P> 接下来会嵌入JSP_01的页面</P>
<hr>
<%@ include file="JSP_01.jsp"%>
<!--JSP_01-->
<body>
  <%! class test{
       int add(int a){
  a++;
  return a; } }%>
<%! test test1=new test();int b=0; %>
<% b=test1.add(3); %>
<p><%=b %>
</body>
JSP页面的基本结构
3.taglib指令
用来指定页面中使用的标签库以及自定义标签的前缀
<% @taglib uri="tagLibraryURI" prefix="tagPrefix" %>
1.prefix属性
用于指定标记库中所有动作元素名中使用的前缀,无默认值。
2.uri属性
统一资源标识符属性用于指定标签库存放的位置,并告诉JSP引擎在编译JSP页面时如何处理指定标签库中的标签 ,无默认值。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
六:JSP常用动作
1.<jsp:param>
用于<jsp:include>,<jsp:forward>动作体中,为其他动作传送一个或者多个参数
<jsp:param name="参数名" value="参数值"/>
name:指定参数名称,不可接受动态值
value:指定参数值,可接受动态值
2.<jsp:include>
用来把指定的文件动态插入正在生成的页面中。该动作允许包含静态文件和动态文件,这两种包含的效果是不同的,如果包含的是静态文件,那么包含仅仅是把包含文件的内容添加JSP文件去,这个文件不会被JSP编译器执行,如果包含的文件是动态的,那么这个包含的文件也会被JSP编译器执行
下面讲解include命令和include动作的区别
1)include命令
include命令可以在JSP指令转换成Servlet之前,将JSP插入其中。
2)include动作
在主页面被请求时,将其他页面的输出包含进来
差别:
1.在于二者被调用的时间。include动作在 请求期间被激活,而include命令在页面转换期间被激活。
2.在使用上也有差异。include指令并include动作的页面难以维护,include维护起来更容易,但include指令更强大,执行速度稍快,include指令允许包含的文件中含有影响主页面的JSP代码,如响应内容的设置和属性方法的定义
<jsp:include page="文件名" flush="true"/>
page:指定所包含资源的相对路径,可以接受动态值
flush:包含目标资源之前是否刷新输出缓冲区,默认值为false,不可接受动态值。
例子1:
<body>
<P>接下来会嵌入JSP_01的页面</P>
<hr>
<jsp:include page="JSP_01.jsp"/>
</body>
例子2:
<!--JSP_02-->
<P>接下来会嵌入JSP_01的页面</P>
<hr>
<jsp:include page="JSP_01.jsp">
   <jsp:param name="name" value="caizhen"/>
</jsp:include>
<!--JSP_01-->
<body>
  <%=request.getParameter("name") %>你好,欢迎访问!
</body>
例子2演示的是动态功能。其中<%=request.getParameter("name") %>中的request.getParameter("name")通过使用内置方法获取name的值
3.<jsp:useBean>
该动作用来加载在JSP页面中使用到的JavaBean.这个功能非常有用,能够实现JavaBean组件的重用
<jsp:useBean
id="Bean实例名称"
scope="page  |request |session  |application"
clsss="JavaBean"类
type="对象变量的类型"
beanName="Bean名字"/>
1).id属性:指定该JavaBean的实例名称,不可接受动态值。如果找到id和scope相同的Bean实例,该动作将使用已有的Bean实例而不是创建新的实例。
2).scope属性:指定Bean的作用域,一个作用域内Id值属性的值是唯一的。
1.page(默认),表示该Bean的作用范围是本页面内(保存在当前页面的PageContext内).
2.Request:表示该Bean在当前的客户端请求内有效。
3.Session:表示Bean在当前HttpSession内所有页面都有效,即会话作用域
4.Application:表示该Bean在任何使用相同的applicaton的JSP页面中有效,即整个应用程序范围内有效。
3).class属性:指定Bean的类路径和类名,不可接受动态值,这个class不能是抽象的。
<jsp:useBean id="time" class="java.util.Date"/>
<p>现在的时间为:<%= time %>
4).type属性:指定引用该对象的变量的类型,它必须是Bean类的名字,超类的名字,超类名字,该类所实现接口名字之一。变量的名字是由id属性指定的。
5)beanName属性:用于指定Bean的名字,可以接受动态值。beanName属性必须与type属性结合使用,不能与Class属性同时使用
<jsp:useBean id="time"
type="java.io.Serializable"
beanName="java.util.Date"/>
<p>现在的时间为:<%= time %></p>
4.<jsp:setProperty>
用来设置,修改已实例化Bean中的属性值
<jsp:setProperty
name="Bean的名称"
property="*"  | property="属性" [param=“属性“ value="值"]/>
1.name属性:必选,表示要设置的属性是哪个Bean的,不可接受动态值
2.property属性: 必选,表示要设置哪个属性。如果Property的值是”*“,表示所有名字和Bean属性名字匹配请求参数都将被传递给相应属性的set方法。
3.param属性:可选,指定用哪个请求参数作用Bean属性的值。如果当前请求没有参数,则什么事也不做,系统不会将null传递给Bean属性的set方法。因此可以上Bean自己提供默认属性值,只有在请求参数明确指定了新值时才修改默认属性值。
4.value属性:可选,用来指定Bean属性的值。
value和param不可同时用
<jsp:useBean id="time" class="java.util.Date">
  <jsp:setProperty name="time" property="hours" param="hh"/>
  <jsp:setProperty name="time" property="minutes" param="mm"/>
  <jsp:setProperty name="time" property="seconds" param="ss"/>
  </jsp:useBean>
  <%=time %>
5.<jsp:getProperty>
该动作获取指定的Bean属性值并转换成字符串输出。
<jsp:getProperty  name="Bean的名称" property="Bean的属性”
1.name属性:指定获取属性值的Bean的名称,不能接受动态值。
2.property属性:指定要获取的Bean的属性名,不可接受动态值
<!--注册页面-->
<form action="register.jsp" action="get">
<table border="1">
<tr>
<td>姓名:<input name="userName" type="text" size="16"></td>
</tr>
<tr>
<td>密码:<input name="passWord"  type="password" size="18"></td>
</tr>
<tr>
<td><input type=submit value="提交"></td>
</tr>
<!--数据处理页面-->
<body>
<!--使用声明好的JavaBean,id为user-->
<jsp:useBean id="user" scope="page" class="Bean.UserRegisterBean"/>
<!--设置JavaBean的属性-->
<jsp:setProperty name="user" property="*"/>
<p>注册成功</p>
<br/>
<!--使用Bean的方法获取属性值-->
用户名:<%= user.getuserName() %>
密码:<%= user.getpassWord() %>
<hr/>
<!--使用getProperty动作获取Bean的属性-->
用户名:<jsp:getProperty property="userName" name="user"/>
密码:<jsp:getProperty property="passWord" name="user"/>
<!--数据处理页面使用UserRigisterBean来保存数据-->
</body>
JSP页面的基本结构
6.<jsp:forward>
该动作用于转发客户端的请求到另一个页面或者另一个Servlet文件中去
<jsp:forward page="地址或者页面"/>
<jsp:forward>动作可以包含一个或者多个<jsp:param>子动作,用于向要引导进入的页面传递参数。当动作发生时,如果已经有文本被写入输出流而且页面没有设置缓冲,将抛出异常。
1.page属性:
page属性指定资源的相对路径,可接受动态值。
<!--登陆界面-->
<body>
<form action="JSP_04.jsp">
<table>
<tr>
<td>输入用户名:</td>
<td><input type="text" name="name" size="16" >
</td>
</tr>
<tr>
<td>输入密码:</td>
<td><input type="password" name="password" size="18">
</td>
</tr>
<tr>
<td><input type="submit" value="登陆"></td>
</table></form>
</body>
<!--数据处理界面-->
<body>
<%
String name=request.getParameter("name");
String password=request.getParameter("password");
if(name.equals("QQ")||password.equals("123")){
%>
<jsp:forward page="success.jsp">
<jsp:param value="<%=name%>" name="user"/>
</jsp:forward>
<%
}
else{
%>
<jsp:forward page="JSP_03.jsp">
<jsp:param value="<%=name %>" name="user"/>
</jsp:forward>
<%
}
%>
</body>
内置对象request调用getParamter()方法获取参数值
六:JSP内置对象
JSP提供了一些由JSP容器实现和管理的内置对象,在JSP应用程序中不需要预先声明和创建这些对象就能实现特定的功能,使Java Web编程更加快捷,方便。常见JSP内置对象有
1.out
out对象主要用于向客户端输出各种数据,同时管理应用服务器上的输出缓冲区。应用服务器上缓冲区默认值为8kb,可以通过Page指令中的Buffer属性来设置缓冲区大小。。
1.print()/println():用于输出数据。
2.newLine():用于输出一个换行字符,实现换行功能
3.flush():用于输出缓冲区里的数据,该方法先把缓冲区的数据输出到客户端,而后再清除缓冲区中的数据。
4.clearBuffer():用于清除理的数据,并把数据输出到客户端。
5.clear():用于清除缓冲区里的数据,但是不会把缓冲区的数据输出到客户端。
6.getBufferSize():用于获取缓冲区的大小。
7.getRemaining():用于获取缓冲区的剩余大小。
8.isAutoFlush():用于自动刷新缓冲区,自动刷新返回true,否则返回false.
9.close():用于关闭输出流。
<%
for(int i=0;i<3;i++)
out.println("<h3>我奋斗的目标是....</h3>");
String str="我将成为一名优秀的Java工程师";
out.println(str+"<br>");
out.println("加油");
 
%>
2.request:
request对象能获取客户端的各种信息。
request对象的生命周期由JSP容器控制。
     当客户端通过HTTP协议请求一个JSP页面时,JSP容器就会创建request对象并将请求封装到request对象中;当JSP容器处理完请求,request对象将会销毁。
    当用户请求一个JSP页面时,JSP页面所在的Web服务器会将用户的请求信息封装到内置对象request中。request对象主要用于接收客户端通过HTTP协议传送给服务器端的数据,可以通过其方法对数据进行操作。
1.getAttribute(String name):用于返回name指定的属性值,若不存在指定的属性,就返回Null。
2.getAttributeNames();用于返回request对象保持的所有属性值,其结果集是一个Enumeration(枚举)实例
3.getCookies().用于返回客户端所Cookies对象,结果是一个Cookie数组
4.getCharacterEncoding()。用于返回客户端请求中的字符编码方式。
5.getContentLength().:用于以字节为单位返回客户端请求的大小。如无法得到该请求的大小,则返回-1.
6.getHeader(String name):用于获得HTTP协议定义的文件头信息
7.getHeaders(String name):用于返回指定名字的值。
8.getHeaderNames():用于返回HTTP协议所有文件头信息,其结果是一个Enumeration实例。
9.getInputStream():用于返回输出流,获得请求中的数据。
10getMethod();用于获得客户端向服务器端传送数据的方法。如;get,post.
11.getParameter(String name):
用于获得客户端传送给服务器端的参数值。获取表单提交的信息,以字符串形式返回客户端传来的某一请求参数值,该参数名由name指定。当传递给此方法的参数名没有实际参数与之对应时,返回Null.
12 getParameterNames():
用于获得客户端传送给服务器的所有参数值,其结果是一个Enumeration实例。
13getParameterValues(String name):
用于获得指定参数的所有值。返回客户端传送给服务器端的所有参数名,结果集是一个Enumeration实例。当传递给此方法的参数名没有实际参数与之对应时,返回NULL。
14getProtocol()
用于获取客户端向服务端传送数据所使用的协议名称。
15getRequestURL():
获取获取客户端的地址。
16getRemoteAddr()
获取客户端的Ip地址。
17getRemoteHost()
用于获取客户端的名字
18getSession([Boolean create] :
用于返回和请求相关的session。create参数是可选的。当有参数值且为true时,如果客户端没有创建session,那么将创建一个新的session.
19:getServerName():
获取服务器的名字。
20getServerPath():
用于获取客户端服务器所请求的脚本文件的文件路径
21.getServerPort()
用于获取服务器的端口号
22.removeAttributr(String name)
用于删除请求中的一个属性
23setAttribute(String name,java.lang.Object obj);
用于设置参数。
1.<!--留言板-->
<body>
<form action="check.jsp">
<table>
<td>留言:<input type="text" name="context" size="16" %></td>
<td><input type="submit" value="发表" name="submit"></td>
</table></form>
</body>
<!--数据处理页-->
<%
String name=request.getParameter("context");
String password=request.getParameter("submit");
%>
获取到客户端提交的文本和按钮信息如下
<hr>
文本框的信息为:<%=name %>
按钮信息为:<%=password %>
2.<!--在线成绩测试-->
<body>
<form action="JSP_04.jsp" method="get">
1.测试测试测试测试测试()re
<input type="radio" name="1" value="B">测试2<br>
<input type="radio" name="1" value="C">测试3<br>
<input type="radio" name="1" value="D">测试4<br>
<input type="submit" value="提交">
</form>
</body>
<!--数据处理页-->
<body>
<%
int examResult=0;
String str1=request.getParameter("1");
if(str1==null)
str1=" ";
if(str1.equals("B"))
examResult++;
%>
<h3>你本次的测试成绩时:</h3>
<%=examResult*100 %>
</body>
3.response
该对象将服务器端数据发送到客户端,该对象包含了响应客户请求的有关信息,其封装了JSP产生的响应,然后发送到客户端以响应客户的请求。他与request对象组成了一对接受,发送数据的对象,这也是动态的基础,response对象的生命周期由JSP容器自动控制。当服务器向客户端传送数据时,JSP容器就会自动创建response对象并将请求信息封装到该response对象中:当JSP容器处理完请求后,response对象就会被销毁。
常见的方法如下
1.addCookie(Cookie cookie):用于给用户添加一个Cookie对象,保存客户端的相关信息。。可以使用Request的getCookies()方法获取该Cookie对象。
2.addHeader(String name,String value);用于添加带有指定名称和字符串的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就添加,存在就覆盖。
3.addDateHeader(StrIng name,String value):用于添加带有指定名称和字符串的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就添加,存在就覆盖。
4.flushBuffer():强制把当前缓冲区所有内容发送到客户端
5.getBufferSize():用于获取实际缓冲区的大小,如果 没使用缓冲区则返回0
6.getCharacterEncoding():用于获取响应的字符编码方式
7.getContentType():用于获取响应的MIME类型
8.getOutputStream():获取客户端的输出流
9.sendError():用于向客户端发送错误信息,如404指网页找不到错误
10.sendRedirect();用于重新定向客户端的请求
11.setCharacterEncoding():用于设置响应的字符编码方式
12;setContent():用于设置响应的MIME类型。
13.setContentLength():用于设置响应内容的长都(字节数)
14.setHeader();用于设置指定名称和字符串的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就设置,存在就覆盖。
15.setDateHeader():用于设置指定名称和日期值的HTTP文件头信息,该Header信息将传送到客户端,如果不存在就设置,存在就覆盖
<!--服务器定时刷新,然后输出到客户端-->
<body>
<%=new java.util.Date() %>
<% response.setHeader("refresh","1"); %>
</body>
<!--下拉框选择访问url-->
<!--前端-->
<form action="check.jsp" method="post">
<select name="link">
<option value="baidu" selected>  baidu</option>
<option value="hao123" selected> 网址导航</option>
</select>
<input type="submit"  name="sunmit" value="确定">
</form>
<!--数据处理-->
<%
String address=request.getParameter("link");
if(address!=null)
{
if(address.equals("baidu")){
                   response.sendRedirect("https://www.baidu.com/");
   }else{
              response.sendRedirect("https://www.hao123.com/");
              }
}
%>
4.session
1.session对象用于存储特定的用户会话所需的信息。当用户在应用程序的web页之间跳转时,存储在session对象的变量将不会丢失,而是在整个用户会话中一直存在下去。
2.当用户请求来自应用程序web页时,如果该用户还没有会话,则web服务器将自动创建一个session对象。当会话过期或被放弃后,服务器将终止该会话。
seesion对象在服务器端
cookie对象存在客户端
session对象处理客户端与服务器的会话,从客户连接到服务器开始,直到客户端与服务器断开连接为止。session对象用来保存每个用户的信息,以便跟踪每个用户的操作状态。其中,session信息保存在容器里,session的ID保存在客户计算机的Cookie中。用户首次登陆系统时容器会给用户分配一个唯一的session id 标识用于区别其他的用户。当用户退出系统时,这个session就会自动消失。
当一个用户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在cookie中,这样session对象和用户之间一一对应的关系。当用户再次访问连接该服务器的其他页面时,不再分配给其新的session对象。直到关闭浏览器后,服务器端该用户的session对象才取消,和用户的对应关系也一一消失。
sessIon的常用方法
1.getAttribute(String name):用于获取与指定名字相联系的属性,如果不存在则返回null。
2.getAttributeName():用于返回session对象中存储的每一个属性对象。
3.getCreatTime()。用于返回session对象被创建的时间,单位为毫秒
4.getId():用于返回session对象在服务器端的编号。
5.getLastAccessTime():用于返回和session对象相关的客户端最后发送请求的时间。
6.getMaxInactiveInterval();用于返回session对象的生存时间,单位为秒。
7.setAttribute(String name,java.lang.Object value);用于设定指定名子的属性值。并把其存储在session对象中。
8.setMaxInactiveInterval(int interval):用于设置session的有效时间。
9。removeAttribute(String name):用于删除指定的属性(包含属性名,属性值)。
如果在有效时间内,用户做出了新的请求,那么服务器就会将其看作一个新的用户,此时,服务器将创建一个新的session,旧的会丢失
10。isNew():用于判断目前session是否为新的session,若是返回true,否则返回false.
session的创建时间<%=session.getCreationTime() %></br>
session的Id号<%=session.getId() %></br>
客户最近一次访问时间是<%=session.getLastAccessedTime() %></br>
session:<%=session.isNew()? "是":"否" %></br>