jsp技术

Jsp技术是将Java代码嵌入到HTML网页代码中,再由Jsp引擎将这些代码转换成Servlet代码,从而解决了Servlet输出网页需要大量的println代码的不足。

3.1 JSP概念

qJava 服务器页面(Java Server PageJSP) 以扩展名.jsp保存
q有效地控制动态内容生成
qJava Server Page里面使用Java编程语言和类库
qHTML 用于表示页面,而Java代码用于访问动态内容
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
	<head>
		<title>JSP测试页</title>
	</head>
	<body>
		<% 
  			java.util.Date now = new java.util.Date();
 			out.println("当前时间是:"+now);
		%>
		<h1>你好,这就是一个JSP页面</h1>
	</body>
</html>
3.2 JSP执行过程


q转换和编译

3.3JSP优点

q将内容与表示分离

4. JSP页面元素





<%@ page contentType="text/html;charset=UTF-8" %>
<HTML>
  <BODY>
  <%
  for ( int i=0; i<2; i++ ) 
  {
  %>
  你好<br>
  <%  
  }
  %>
  </BODY>
</HTML>
<%@ page contentType="text/html;charset=UTF-8" %>
<HTML>
  <BODY>
  <%
   for ( int i=0; i<2; i++ ) 
   {
       out.print("你好<br>");
   }
  %>
  </BODY>
</HTML>


4.1JSP脚本元素

JSP脚本元素包括:

4.1.1声明<%! %>

q变量的声明
q方法的声明

    <%!  %>中声明的变量、方法、类,在整个jsp文件内都有效,是全局的

qJSP语法格式如下:

<%!inti = 0; %>

<%!inta, b, c; %>

<%!Date date;%>

计数器程序:

<%@ page contentType="text/html;charset=GBK" %>
<HTML>
	<BODY >
 		<%! int i=0; %>   
  		<% i++; %>
		<P>您是第 <%=i%>个访问本站的客户。
	</BODY>
</HTML> 

注意观察与前面计数器程序的异同

<%@ page contentType="text/html;charset=UTF-8" %>
<HTML>
	<BODY >
 		<% int i=0; %>     
  		<% i++; %>
		<P>您是第 <%=i%>个访问本站的客户。
	</BODY>
</HTML> 


<%@ page contentType="text/html;charset=UTF-8" %>
<HTML>
	<BODY>
  	<%!
	         long continueSum(int n)
          	        {   int sum=0;
            	 for(int i=1;i<=n;i++)
             	      sum=sum+i;
           	            return sum;
          	        }
   	%>
	<P>1到100的连续和:<BR>
  	<%  long sum;
         	        sum=continueSum(100);
     	        out.print(sum);
  	%>
	</BODY>
</HTML>

4.1.2JAVA表达式

q用于在页面上输出信息,语法格式如下

<%=expression %> <%=表达式%>

q例如

  <%  a=12;

            b=a;

            c=a+b;   %>

  a=<%=a %><br>

  b=<%=b %><br>

  c=<%=c %><br>

<%@page contentType="text/html;charset=UTF-8"%>

<HTML>

  <BODY>

         <p> Sin(0.9)除以3等于

                           <%=Math.sin(0.90)/3%>

         <p>3的平方是:<%=Math.pow(3,2)%>

         <p>12345679乘72等于

                           <%=12345679*72%>

          <p> 5的平方根等于<%=Math.sqrt(5)%>

            <p>99大于100吗?回答:<%=99>100%>

  </BODY>

</HTML>

4.2JSP指令

qJSP 指令包括:

4.2.1page指令

page指令用于设置JSP页面的属性

<%@ page language = "java" import ="java.util.*" 
 buffer = "8kb" errorPage="error.jsp" isErrorPage="false"%>

<html>
    <head>
        <title> 测试 page 指令</title>
    </head>
    <body>
        <h1> 这是一个测试页面</h1>
    </body>
</html>

4.2.2include指

include指令用于在运行时将HTML文件或JSP页面嵌入到另一个JSP页面
include指令语法

   <%@include file = "文件名"%>

<%@ page contentType="text/html;charset=UTF-8" %>
<%@include file="head.jsp"%>
<html>
<head>
<title>include 指令</title>
</head>
<body>
<h4 align="center">你好,欢迎您!</h4>
</body>
</html>
4.2.3taglib指令

taglib指令可以让Jsp页面使用标签
taglib指令的作用是在Jsp页面中,将标签库描述符文件引入到该页面中,并设置前缀,利用标签的前缀去使用标签库表述文件中的标签
语法

    <%@ taglib uri = "标签库表述符文件"prefix = "前缀名"%>

<html>
    <body>

     <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%> 

    </body>
</html>

JSP 页面在根目录中搜索mytaglib签库描述符文件,

mytags前缀将mytaglib中的标签嵌入JSP页面

<c:outvalue="${param.name}" default="!"/>

<c:setvar="username"value="jack" scope="session"/>

<c:iftest="${stu.age<18}"var="young">对不起</c:if>

<c:choose>

  <c:whentest="${c.coloreq'red'}">颜色:<c:outvalue="${c.color}"/></c:when>

  <c:otherwise>颜色:<c:out value="${c.color}"/></c:otherwise>

</c:choose>

<c:forEachvar="user"items="${users}">

    <c:out value="${user.name}"/>

    <c:out value="${user.pwd}"/>

</c:forEach>

<c:redirecturl="${test}"/>

<c:forTokens……>

……..

JSP动作

1 JavaBean

JavaBean 是可重用组件

1.1 JavaBean的构成

gettersetter方法用于访问JavaBean的属性

package a;

public class Person 
{	
private String name; 	
public String getName() 
{
	return name;
}
public void setName(String myname) 
{
	name = myname;
}
}

1.2 JSP使用JavaBean 

Scriptlet调用JavaBean(举例)

动作调用JavaBean
JavaBean嵌入JSP页面
设置和获取JavaBean的属性
标准动作中的属性区分大小写
JSP中的标准动作使用<jsp>作为前缀

2.1 useBean动作

...
<head>
<jsp:useBean id="p" class="Person" scope="page"/>
</head>
...

创建引用并嵌入现有的 Bean

id 属性创建对class属性中所述类的引用

2.2 setProperty/getProperty动作

2.3 useBean动作范围

范围指定JavaBean JSP 页面中的可用性。各种范围选项如下:

2.4 forward动作


2.5 include动作


使用 include动作和 param元素方法

隐式对象

JSP隐式对象是 Web容器加载的一组类
无需用"new"去获取实例,而是可以直接在JSP页面使用的对象
隐式对象的名称是JSP的保留字
JSP使用 Java定义的隐式对象来访问网页的动态内容

内置对象

代表内容

范围

request

客户端的请求信息被封装在该对象中

request

response

对请求的应答

page

pageContext

JSP页面内所有的对象及名字空间的访问,可以取输出流、sessionrequestresponse、属性、页面跳转、包含文件

page

session

客户端与服务器的一次会话,从客户连到服务器的一个Web Application开始,

直到客户端与服务器断开连接为止

session

application

实现了用户间数据的共享,可存放全局变量.它开始于服务器的启动,直到服务器的关闭

application

out

向输出流写入内容的对象

page

config

JSP ServletConfig

page

page

实现处理本页当前请求的类的实例

page

2输入/输出对象

控制页面的输入和输出
访问与所有请求和响应有关的数据
输入和输出对象包括requestresponseout
2.1 request 对象
表示客户端对网页的请求
实现 javax.servlet.http.HttpServletRequest接口
使用HTTP 协议处理客户端的请求

request对象常用方法
StringgetParameter(String name)

   根据页面表单组件名称获取请求页面提交数据(如文本框、密码框、单选框、下拉框等)

String[]getParameterValues (String name)

   获取页面请求中一个表单组件对应多个值时的用户的请求数据(如复选框)

voidsetAttribute(String name, Object value)
ObjectgetAttribute(String name)
使用request对象进行JSP编程

使用request对象要注意避免使用空对象,否则出现NullPointerException异常

<%!
   public String formatStr(String str){
     return str==null?"":str;
   }
%>
<%
String name = formatStr(request.getParameter("name"));
String pwd = formatStr(request.getParameter("pwd"));
String confirm_pwd 
= formatStr(request.getParameter("confirm_pwd"));
String gender = formatStr(request.getParameter("gender"));
String xueli = formatStr(request.getParameter("xueli"));
String[] channels = request.getParameterValues("channel");
%>
前台发送数据时,在form中指定发送方式有两种

发送方式

显示中文接收方法

get

<%@page contentType="text/html; charset=UTF-8"%>

<%

//不用转换编码

String name = request.getParameter("userName");

out.println("name="+name);

%>

post

<%@page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

String name = request.getParameter("userName");

out.println("name="+name);

%>

2.2 response 对象
处理  JSP生成的响应
将响应发送给客户端
实现javax.servlet.http.HttpServletResponse接口
使用 HTTP 协议将响应发送给客户端

response对象常用方法
voidsetContentType(String name)

   设置作为响应生成的内容的类型和字符编码

voidsendRedirect(String name)

  发送一个响应给浏览器,指示其应请求另一个URL

使用response对象进行JSP编程
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>response对象</title>
</head>
<body>
<%
response.setContentType("text/html;charset=utf-8");
response.sendRedirect("response2.jsp");
%>
</body>
</html>

2.3out 对象

表示输出流
javax.servlet.jsp.JspWriter类的实例
使用 write()print()println()方法

使用out对象进行JSP编程
<html>
<body>
<% 
out.print("欢迎来到 JSP:隐式对象") ;
out.write("欢迎来到 JSP:隐式对象") ;
%>
…
</body>
</html>
3作用域通信对象
隐式对象的作用域包括

   pagerequestsession和  application

作用域通信对象包括

   sessionapplication和 pageContext

3.1session 对象

Web 服务器为单个用户发送的多个请求创建会话
存储有关用户会话的所有信息
javax.servlet.http.HttpSession 接口的实例
session 对象最常用的方法有:
void setAttribute(Stringname,Object value)

以键/值的方式,将一个对象的值存放到session

Object getAttribute(String name)

根据名称去获取session中存放对象的值

<% 
session.setAttribute("name", "admin");
%> 
<% 
if(session.getAttribute("name")!=null)
{
   String name = (String)session.setAttribute("name");
}
%>
3.2application 对象

表示 JSP 页面所属的应用程序
应用程序的JSP 页面组合起来形成一个应用程序
javax.servlet.ServletContext接口实例
application对象最常用的方法有:
void setAttribute(Stringname,Object value)

   以键/值的方式,将一个对象的值存放到application

void getAttribute(String name)

    根据名称去获取application中存放对象的值

<% 
application.setAttribute("ChartRecord", "hihi");
%> 
<% 
if(application.getAttribute("ChartRecord")!=null)
{
   String chartRecord = 
(String) application.getAttribute("ChartRecord");
}
%>
3.3pageContext对象

页面上下文,用于访问jsp之间的共享数据
可访问page,request,session,application范围变量
javax.servlet.jsp.PageContext类的实例
pageContext对象最常用的方法有:
void setAttribute(Stringname,Objectvalue)

以键/值的方式,将一个对象的值存放到pageContext

void setAttribute(Stringname,Objectvalue,intscope)

scope为作用域范围,取值如下:

PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
ObjectgetAttribute(Stringname)

根据名称去获取pageContext中存放对象的值

ObjectgetAttribute(Stringname,intscope)

scope为作用域范围,取值如上

<%@ page pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("page","page");
//pageContext.setAttribute("page","page",PageContext.PAGE_SCOPE); //同上步
pageContext.setAttribute("request","request",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("session","session",PageContext.SESSION_SCOPE);
pageContext.setAttribute("application","application",PageContext.APPLICATION_SCOPE);

//本页接收
out.println(pageContext.getAttribute("page"));
out.println(pageContext.getAttribute("request"));
out.println(pageContext.getAttribute("request",PageContext.REQUEST_SCOPE));
out.println(pageContext.getAttribute("session"));
out.println(pageContext.getAttribute("session",PageContext.SESSION_SCOPE));
out.println(pageContext.getAttribute("application"));
out.println(pageContext.getAttribute("application",PageContext.APPLICATION_SCOPE));
//其他页能否接收?
%>

4 Servlet 对象

JSP引擎为每个 JSP生成一个Servlet
Servlet对象提供了访问 Servlet信息的方法和变量
Servlet对象包括
page
config
4.1 page 对象

使用 page 对象可以访问Servlet类的所有变量和方法
java.lang.Object类的一个实例
<% @ page info="我的信息" 
              contentType="text/html;charset=UTF-8"%>
<html>
<body>
<%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>
</body>
</html>
4.2 config对象
存储在编译JSP 页面的过程中创建的Servlet的信息
javax.servlet.ServletConfig接口的实例
提供了检索Servlet 初始化参数的方法
String propertyFile
=(String)config.getInitParameter("PropertyFile");
config对象
获取初始化参数

5 exception 对象

exception对象用于处理 JSP页面中的错误
exception对象用于访问执行JSP的过程中引发的异常
exception对象是 java.lang.Throwable类的实例
设置将IE,取消“显示友好http错误信息”
<%@ page isErrorPage="true" %>
<html>
    <head><title> 处理错误 </title></head>
    <body>
        <% if ( exception != null ) 
               {
                     out.write("\n 发生错误。\n");
               }
              else
               {
                     out.write("\n 您已访问此页面,
                                    但是没有可用的错误信息\n");
               } 
        %>
    </body>
</html>
6 错误页定义
web.xml:
<error-page>
	<error-code>500</error-code>
	<location>/error.jsp</location>
</error-page>
<error-page>
	<error-code>404</error-code>
	<location>/error.jsp</location>
</error-page>

Jsp页面:
<%@ page isErrorPage="true" %>
<%@ page errorPage="error.jsp" isErrorPage="false" %>
7 页面跳转的区别

request对象的转发

request.getRequestDispatcher("new.jsp").forward(request,response)

动作的转发

<jsp:forwardpage="new.jsp"></jsp:forward>

response的重定向

response.sendRedirect("new.jsp")

javascript的跳转

<script>

window.location="new.jsp";

//window.navigate("new.jsp");

</script>

总结:

JavaBean是可在多个应用程序中重复使用的组件
JSP标准动作用于插入文件、Bean组件以及将用户转至其他网页
forward动作用于将用户的请求转发给其他页面
include动作用于将一个页面嵌入当前JSP页面
JSP隐式对象一般分为输入/输出对象、作用域通信对象 、Servlet对象 和错误对象四类
JSP 中的隐式对象包括pageconfigrequestresponseoutsessionapplicationpageContextexception
JSP定义的作用域包括pagerequestsessionapplication












































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值