JSP

JSP技术原理

利用MySQL、Oracle等海量数据库系统作为数据仓库,利用Servlet的高性能服务器端小程序作为后台总控程序,Servlet接受用户输入并分别调用不同的jsp程序向Client反馈信息,JSP/Servlet通过Http协议连接C/S来传递数据,Jsp/Servlet通过传递参数给JavaBean或EJB组件访问操作数据库,这样系统内部数据得到有效的封装保护,很容易实现分布式网络计算

3大JSP指令

page指令 --用来声明当前JSP页面的基本属性

基础语法:

<%@ page 属性名称="值" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  • language 指定JSP页面使用的脚本语言,默认值为java
  • contentType 用来指定JSP页面的响应内容类型和所采用的编码方式, 默认值为“text/html,ISO-8859-1”

MIME多用途互联网邮件扩展协议,解决了通过文件后缀判定文件内容类型的缺陷

  • text/html
  • image/jpeg
  • import 通过该属性来引用脚本语言中使用到的类文件,导入多个类或包用逗号分隔。JSP引擎自动导入java.lang.*;javax.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*
<%@ page import="java.util.Date" %>  允许在一个页面中出现多次

<%@ page import="java.util.*,java.io.*" %>
  • pageEncoding 指定当前JSP页面的编码方式, 默认值为“ISO-8859-1”

从实现上来说,和conentType可以相互替代

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

<%@ page pageEncoding="UTF-8" %>
  • session,用来说明是否创建session对象,默认为true
  • buffer,用来指定out对象是否创建buffer缓冲区,并指定缓冲区大小。默认为8kb,none表示不创建缓冲区
  • autoFlush,缓冲区是否自动刷新,默认为true,如果为false,缓冲区满后不手动刷新会包异常
  • info,定义一个字符串常量,使用getServletInfo方法可以打印
  • errorPage,指定异常处理页

可以在web.xml中使用<error-page>元素为整个WEB应用程序设置处理页面,其中的<exception-type>子元素指定异常类的完全限定名,<location>元素指定以"/"开头的错误处理页面的路径。如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中这是的错误处理将不对该页面起作用。

  • isErrorPage用于设定当前页面就是异常处理页,只有在异常处理页中才能直接使用exception对象捕捉异常信息

isThreadSafe=“true”

isThreadSafe="true"用于设置当前页面执行的线程问题,true表示采用多线程的方式执行,如果false则采用单线程的方式运行。如果在Servlet中,Servlet默认采用的是多线程的运行方式,如果定义Servlet实现SingleThreadModel接口则Servlet采用单线程的运行方式

Servlet默认采用单实例多线程的方式对外提供服务,

public class HelloServlet extends HttpServlet implements SingleThreadModel

如果Servlet实现了SingleThreadModel则Servlet采用多实例单线程的方式提供服务,该接口不建议使用


include 指令

include指令用于引入其他JSP页面,如果使用include指令引入了其他JSP页面, 那么JSP引擎将把这两个JSP翻译成一个Servlet ,所以include指令引入通常也成为静态引入

格式: <%@ include file = "head.jsp"%>

注意: 先包含后编译执行----静态包含


taglib指令

<%@taglib %>用于实现引入所需要的标签库,使用标签库定义显得自定义标签,在JSP页面中启用定制行为。

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

<table>
	<c:forEach var="k" begin="1" end="9">
    	<tr>
        	<c:forEach var="i" begin="1" end="${k}">
            	<td>${k}*${i}=${i*k}</td>
        	</c:forEach>
    	</tr>
	</c:forEach>
</table>

JSTL: java标准标签库

##6大页面动作

jsp中实际上定义了21个页面动作,其中大部分是用于控制xml标签的,所以不做介绍

JSP动作元素(action elements): 动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。

JSP标签也称之为JSP Action(JSP动作)元素,它用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

JSP动作元素包含五大类:

  • 与存储JavaBean有关的:<jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>
  • JSP1.2规范就有的6个基本动作元素:<jsp:include>,<jsp:forward>, <jsp:param>, <jsp:plugn>, <jsp:params>, <jsp:fallback>
  • JSP2.0新增加主要与JSP Document有关的6个动作元素:<jsp:root>, <jsp:declaration>, <jsp:scriptlet>,<jsp:exception>, <jsp:text>, <jsp:output>
  • JSP2.0新增加,主要用于动态生成XML元素标签的值,包括3个动作:<jsp:attribute>, <jsp:body>, <jsp:element>
  • JSP2.0新增加,只要用在Tag File中:<jsp:invoke>, <jsp:dobody>

动态包含

<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容中,这种在JSP页面执行时的引入方式称之为动态引入。
<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />。flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。

<jsp:include/>用于实现动态包含[静态] 【重点】

  • 各自独立执行,包含执行结果

<jsp:include page="bb.jsp"/>将bb.jsp页面包含到当前页面中,其中被包含的页面名称page属性可以使用变量,也可以添加额外参数

<jsp:include page="bb.jsp">
			<jsp:param value="123" name="age"/> 
</jsp:include>

<jsp:include><%@include %>指令比较

<jsp:include>标签是动态引入, <jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。 而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
不管是<jsp:include>标签,还是include指令,它们都会把两个JSP页面内容合并输出,所以这两个页面不要出现重复的HTML全局架构标签,否则输出给客户端的内容将会是一个格式混乱的HTML文档。但include指令要比<jsp:include>标签效率高些。

  • 不能包含其它应用中的内容
  • 动态包含中允许使用变量,静态包含中不允许使用变量
  • 动态包含可以额外添加parameter参数,但是静态包含不允许
动态包含和静态包含之间的区别

<%@include file="bb.jsp" %>静态包含是先包含目标页的代码,然后在编译执行
<jsp:include page="bb.jsp"/>各自独立执行,然后将目标页面的执行结果包含进来
注意:被包含页面一般是当前页面的一部分,所以不应该是完整页

Servlet编程
RequestDispatcher rd=request.getRequestDispatcher("bbb.jsp");
rd.include(request,response);

###请求转发

<jsp:forward/>用于实现请求转发

语法:

<jsp:forward page="bb.jsp">
		<jsp:param value="123" name="age"/>  人为添加parameter参数值,不是attribute
</jsp:forward>
  • 目标页和转发页共享request和response
  • 允许转发时添加parameter参数
  • 不能转发其它应用
Servlet编程
RequestDispatcher rd=request.getRequestDispatcher("bbb.jsp");
rd.forward(request,response);

###页面中构建对象

基本用法:

<jsp:useBean id="now" class="java.util.Date" scope="request"/>
<%=request.getAttribute("now")%>

<jsp:useBean id="dd" class="java.util.Date"/>用于在页面上构建Date对象,相当于Date dd=new Date();

  • id命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例
  • class指定Bean的完整包名
  • scope指定Bean在哪种上下文内可用,可以取下面的四个值之一:page,request,session和application。默认值是page,表示该Bean只在当前页面内可用(保存在当前页面的PageContext内)。request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。session表示该Bean对当前HttpSession内的所有页面都有效。最后,如果取值application,则表示该Bean对所有具有相同ServletContext的页面都有效。
    因为jsp:useBean只有在不存在具有相同id和scope的对象时才会实例化新的对象;如果已有id和scope都相同的对象则直接使用已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略
  • type 指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的
  • beanName指定Bean的名字。如果提供了type属性和beanName属性,允许省略class属性。

<jsp:useBean id="dd" class="java.util.Date" scope="request"/>首先在request中查找名称为dd的日期类型变量,就是request.getAttribute(“dd”),如果获取不到,则新建Date变量,并存放在request中,名称就是id的值

用法1
<jsp:useBean id="now" class="java.util.Date" scope="request">
    <jsp:setProperty name="now" property="date" value="20"/>  给名称为now的对象设置属性date,值为20.相当于调用now.setDate(20),要求now对象中必须有对应的setDate方法
</jsp:useBean>
<%=request.getAttribute("now")%>
用法2

请求方式为http://localhost:8080/index.jsp?day=1200,这里在请求参数中有个参数名为day

<jsp:useBean id="now" class="java.util.Date" scope="request">
    <jsp:setProperty name="now" property="date" param="day"/>接收parameter中名称day的值,并且赋值到now对象上的date属性   now.setDate(Integer.parseInt(request.getParameter("day")))
</jsp:useBean>
<%=request.getAttribute("now")%>
用法3

请求为http://localhost:8080/index.jsp?year=1000&month=9&date=23,按照名称对应进行赋值属性

<jsp:useBean id="now" class="java.util.Date" scope="request">
    <jsp:setProperty name="now" property="*"/>
</jsp:useBean>
<%=request.getAttribute("now")%>
用法4
<%@ page import="java.util.*,java.text.*" %>
<%@ page contentType="text/html;charset=UTF-8" %>

<jsp:useBean id="now" class="java.util.Date" scope="request"/>
<jsp:getProperty name="now" property="year"/>年<jsp:getProperty property="month" name="now"/>月<jsp:getProperty property="date" name="now"/>日<jsp:getProperty property="day" name="now"/>
<%
Date now1=new Date();
    DateFormat df=new SimpleDateFormat("yyyy-MM-ddE");
    out.println(df.format(now1));
%>

<jsp:plugin>动作元素用来在JSP中嵌入Java插件,比如Applet。<jsp:plugin>将会根据浏览器的版本替换成<object>标签或者<embed>标签。

<jsp:plugin>
    type="bean | applet"
    name="Applet名称"
    code="java类名"
    codebase="Java类所在目录"
    align="对齐方式"
    height="高度"
    width="宽度"
    hspace="水平间距"
    vspace="垂直间距"
    archive="预先加载的类列表"
    jreversion="JRE版本"
    iepluginurl="URL"
    nspluginurl="URL"
>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值