jsp总结

什么是jsp?
jsp是一个简化的servlet的设计,jsp是一种动态网页技术的标准也是javaee的标准。jsp是在服务端运行的
在page中,pageEncoding原始是jsp文件本身的编码
contentType的charset是指服务器发给客户端时候的内容编码
contentType更为常用
sp表达式
<%=表达式%>
用于向客户端输出显示的内容
jsp的内置对象

什么是内置对象?
是web容器创建的一组对象,不适用new关键字就可以使用的内置对象
内置对象 常用的
out
是jspWriter类的一个实例,是向客户端输出内容常用的对象
其中 setCharacterEncoding() 设置请求的字符编码格式 ,适用于post采用form的形式的请求,对于直接url上进行传参的get方式,若传递中文的时候,依旧是乱码的是,是无法更正的。若需要更正,需要配置tomcat中conf目录下的server.xml文件
<!% %> :定义类、定义变量、定义方法(不常用)
<%= %> :输出语句(输出到页面,不能拥有分号)
<% %> :定义变量、语句
page指令:用来定义JSP文件的全局属性 语法:<%@ page … %>”

注意:在JSP页面中,只有import可以出现多次,其它属性都只能出现一次

下面是page指令标记表格,可以设置page指令标记中的属性:
JSP 内置对象:
主要讲下pagecontext对象,其他对象可以参考前面的博客;

pageContext对象:是一个域对象

功能:

1.向自己域中存取值(3种主要的方法)

Object getAttribute(String name)

void removeAttribute(String name)

void setAttribute(String name, Object value

2.向其他域中存取值:

*public abstract void setAttribute (String name,Object value,int scope) 向某个域中存值

public abstract Object getAttribute(String name,int scope) 向某个域中取值

public abstract Object findAttribute(String name) 按顺序在页面、请求、会话(如果有效)和应用程序范围中搜 索指定属性,并返回关联的值或 null。也就是从最小的域中开 始查找
3.可以获取其他8个对象

getException方法返回exception隐式对象
getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象
JSP标签:
定义:JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

jsp常用标签:

jsp:useBean 使用一个ID和一个给定作用范围和同一ID的JavaBean相关联

jsp:setProperty 设置JavaBean的属性值

jsp:getProperty 取得JavaBean的属性值

jsp:include 文件包含(服务器端路径,没有项目名称)

<jsp:forward page=“转发路径”> 在JSP的页面中完成转发(服务器端路径,没有项目名称),将请求传递给另一个JSP页面(转发)。

jsp:param用来传递参数,可以写在jsp:forward中间 可以使用request.getParameter();来接收参数
总结
Jsp和Servlet的本质是一样的,Jsp最终被编译成Servle才能运行,或者说jsp只是生成Servlet的草稿文件。

Jsp特点就是在HTML中嵌入java代码,或者使用各种Jsp标签,包括自定义标签,动态的提供页面内容,现在发展为表现层技术。
(其他表现层的技术:FreeMarker,Velocity,Tapestry等,其中Jsp应用最为广泛)

Jsp的本质是Servlet。Jsp页面由两部分组成:
静态部分:标准的HTMl标签,静态的页面内容,与HTML页面相同
动态部分:受Java代码控制的内容,这些内容由java脚本动态生成

Jsp变异之后会变成Servletjava代码,比如原本一个叫zpoor.jsp,编译之后就变成了zpoor_jsp.java和zpoor_jsp.class文件,Tomcat的work下的localhost文件夹中编译之后的代码。

Jsp工作原理结论:
Jsp文件必须在jsp服务器内运行。
每个Jsp文件都必须生成Servlet才能执行
每个Jsp页面的第一个访问者速度很慢,因为必须等待Jsp编译成Servlet
Jsp页面的访问者无需安装任何客户端,不需要安装可以运行java的环境,因为Jsp页面输出的标准的HTMl页面

Jsp注释:(源代码看不到)
<%-- 注释内容 --%>

HTML注释:(源代码可以看到)

Jsp声明:(声明变量和方法:当然他自然会装换成Servlet的成员变量和成员方法,Jsp声明依然符合java语法)
<%! 声明部分 %>

注意:jsp声明定义的方法和变量可以使用private 、public修饰符也可以使用static,将其变成类属性或者类方法,但是不能使用
     abstract修饰部分的方法,因为抽象方法会导致Jsp对应Servlet变成抽象类,倒置无法实例化。
     (Jsp中声明中独立存在的方法,知识一种假象)

Jsp输出表达式:
<%= 表达式 %>
输出表达式语法后面不能有分号

Jsp的3个编译指令:
page:该指令是针对当前页面的指令
include:用于指定包含另一个页面
taglib:用于定义和访问自定义标签(Jsp新特性)

语法:
        <%@ 编译指令名  属性名="属性值"%>

page指令(一般位于Jsp页面的顶端,一个Jsp可以包含多个page指令):
language:声明脚本语言类型,一般是java,只能是java
extends:指定jsp页面编译之后所产生的java类所继承的父类或者接口
import:用来导入包
session:jsp页面是否需要HttpSession
buffer:指定jsp页面的缓冲区的大小,默认值为8kb
autoFlush:缓冲区溢出时,是否强制输出缓冲区的内容
info:设置该jsp程序的信息
errorPage:指定错误处理界面
isErrorPage:设置本jsp程序是否为错误处理程序
pageEncoding:设置生成网页的字符集编码

include指令:
把一个外部文件嵌入当前的jsp页面中,同时解析这个页面的Jsp语句,这是静态include语句,他会把目标页面的其他编译指令也包含进来如果两个页面的编译指令冲突,页面就会出错,但是动态的include则不会。

       语法<%@ include file="文件路径/文件名"%>        

Jsp的7个动作指令:
编译指令是通知Servlet引擎处理消息
动作指令知识运行时的动作

    jsp:forward:执行页面转向,将请求的处理转发到下一个页面
    jsp:param:传递参数,必须和其他支持参数的标签一起使用
    jsp:include:动态的引入一个jsp页面
    jsp:plugin:下载javaBean和Applet到客户端执行
    jsp:useBean:创建一个useBean的实例
    jsp:setProperty:设置javaBean实例的属性值
    jsp:getProperty:输出javaBean实例的属性值

forward指令:
    将页面的请求转发到一个新的页面,可以是静态的HTML页面,也可以是动态的jsp页面,或者转发到容器中的Servlet
    语法:
        对于jsp1.0:
            <jsp:forward page="URL">
        对于jsp1.1:(用于转发时增加额外的请求参数)
            <jsp: forward page="URL">
                <jsp:param.../>
            </jsp:forward>

    注意:
        执行forward指令转发请求时,客户端的请求参数不会丢失。表面上他是将用户请求转发到另一个新的页面,实际上知识采用了新的界面来对用户生成相应,所以说,请求还是一次请求,作用请求参数和请求属性都不会改变。

include指令:
    他是一种动态的include指令,用于包含某个页面,他不会导入被include页面的编译指令,只导入页面的body内容插入本页面。
        语法(常用):
            <jsp:include page="URL" flush="true|false">
                <jsp:param.../>
            </jsp:include>

            其中flush属性:指定输出缓存是否转移到被导入的文件中,如果为true,则包含在被导入的文件中,如果为false,则包含在原文件中。

静态导入和动态导入的三个区别:
1、静态导入是将被导入页面的代码完全融合,两个页面融合成一个整体的Servlet;动态导入则在Servlet中使用include方法来引入被导入的页
面的内容。

2、静态导入时,被导入的页面的编译指令会产生作用;动态导入时被导入的编译指令则会失去作用,只是插入被导入页面的body内容

3、动态导入还可以增加额外的参数

forward动作指令和include动作指令的区别:
执行forward时,被forward的页面将完全代替原有页面,执行include时,被include的页面知识插入原有的页面
一句话:forward拿目标页面代替原有页面,include则拿目标页面插入原有的页面。

useBean、setProperty、getProperty指令:
三个指令都是与javaBean相关的指令

    useBean语法:
        <jsp:useBean id="name" class="classname" scope="page|request|session|application"/>
        id属性就是Javabean的实例名,class属性确定了JavaBean的实现类
    
    scope属性指定javaBean市里的作用范围:
        page:该javaBean实例只在该页面有效
        request:在本次请求内有效
        session:在本次session内有效
        application:在本应用内一直有效

    (下面的两个标签的底层实现还是基于getter和setter方法实现)
    setProperty(语法):
        <jsp:setProperty name="BeanName" property="propertyName" value="value"/>
        name属性确定了javaBean的实例名;property属性确定需要设置的属性名;value属性则确定需要设置的属性值

    getPeoperty(语法)  :
        <jsp:getProperty name="BeanName" property="propertyName"/>
        name属性确定了需要输出的javaBean的实例名;property属性确定需要输出的属性名。

把JavaBean放在指定的scope中:
//放在page范围中
pageContext.setAttribute(“p1”, p1);
//放在request范围中
request.setAttribute(“p1”, p1);
//放在session范围中
session.setAttribute(“p1”, p1);
//放在application范围中
application.setAttribute(“p1”, p1);

plugin指令:
主要用于下载服务端的javaBean或者Applet到客户端执行,客户端必须装虚拟鸡(嘿嘿嘿)。
当然这玩意用的很少,现在HTML对Applet的支持很好,基本上用不到这个动作指令。

param指令:
用于设置参数值,本身不能单独使用,没有什么意义。
一般都结合下面的三个指令使用:
1、jsp:include
param指令把参数传入被导入的页面
2、jsp:forward
param指令把参数传向被转入的页面
3、jsp:plugin
param指令把参数传入页面中的javabean或者Applet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值