您的位置:首页 > Web前端 > JavaScript

JSP入门

2012-09-22 22:41 232 查看
一.JSP语法

JSP实际上就是Servlet。

学习JSP的最好办法:大脑中时刻想着Servlet。

1.1模板元素:指JSP中的html

1.2表达式:

作用:向页面输出运算结果。

语法:<%=表达式%>

实际上就是service中调用out.println(表达式);,因此表示式中绝对不允许有;号

1.3Java脚本片段(实际开发中在JSP中是不允许有java脚本的。自定义标签来代替)

出现在JSP中的java代码。

作用:组织逻辑

语法:<%语句1;

语句2;%>

实际上会原封不动的被翻译到jsp对应serlvet的service方法中。

1.4JSP声明:

作用:定义成员变量或方法

语法:<%!

语句;

%>

注意:声明中不能使用九大隐示对象 out等。因此这些隐士对象都是定义在service方法中的局部变量呢

1.5JSP注释

作用:注释

语法:<%--这是注释--%>

JSP中尽量使用JSP注释,不要使用HTML注释。

二.JSP的指令

作用:为JSP引擎(Tomcat)而设计的

语法:<% @指令名称属性1="value1"....%>

Tip:指令是服务整个JSP的,出现在JSP的位置无关。但是一般把指令放在页面的最前端。

2.1:page

属性:

language:指定JSP中使用的脚本语言。默认是java,目前只支持java

extends:指定JSP对应的Servlet的父类。不要改改属性。

*import:导入JSP中需要的包或类。

可以import="java.util.UUID,java.util.Date"

或者写到多个page指令中

<%@pageimport="java.util.UUID"%>

<%@pageimport="java.util.Date"%>

JSP引擎会自动导入以下包:

javax.servlet.*;

javax.servlet.http.*;

javax.servlet.jsp.*;

*session:指定是否生成HttpSession对象。默认值是true。

buffer:输出流的缓存大小。none|8kb|sizeKb.默认值是8kb。

autoFlush:指定缓存满了是否自动刷新。默认值是true

isThreadSafe:是不是线程安全。true|false。默认值是true。

true:不安全的。

实际上是指定该JSP对应的Servlet是否实现SingelThreadModel接口。

*errorPage:指定当前页面出错后的显示页面。如果以"/"开头,表示绝对路径。

配置全局消息提示页面:

web.xml

<error-page>

<exception-type>java.lang.Exception</exception-type>

<location>/error.jsp</location>

</error-page>

<error-page>

<error-code>404</error-code>

<location>/404.jsp</location>

</error-page>

*contentType:与response.setContentType方法起到的作用是一致的。

*pageEncoding:告知jsp引擎,jsp文件的编码方式及和上面的作用。

作用有两个:1告诉jsp引擎,jsp文件的编码方式。

2.还有response. setContentType方法的作用。

*isELIgnored:是否忽略EL表达式。True|false,默认为false。

2.2tablib指令:用于引入外部的标签库:

属性:有uri指命名空间 与 prefix:前缀。比如:

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

三.包含:两种动态包含与静态包含

3.1 静态包含用<%include file=”url” %>:url以”/”开头表示绝对路径。静态包含的原理是指:将另一url的file文件内容全部编译到本jsp文件中。比如1.jsp用了<%include
file=”2.jsp”%>代表,只生成一个jsp.java文件,就是_1_jsp.java文件,此java文件中主体内容是1.jsp,但是在使用include指令处将2.jsp内容全部编译进_1_jsp.java中。所以,静态包含在效率上会比动态要高点。

3.2 动态包含用<jsp:include page=”url” />动作元素,动态包含的原理是在运行时再将内容包含进去。比如1.jsp中使用<jsp:include
page=”2.jsp”/>那么,1.jsp与2.jsp都会编译出来分别编译成_1_jsp.java与_2_jsp.java并生成_1_jsp.class与_2_jsp.class。



四.Jsp的动作元素

主要有jsp:include、jsp:forward与jsp:param,include与forward与servlet中的RequestDispatcher原理是一致的,只不是jsp中是用封了的对象pageContext的forward方法…。而jsp:param一般用在jsp:include与jsp:forward体中,用与发送一些请求参数(类似username=admin&id=2)给被转发的或被包含的组件中去。

五.JSP的9大隐示对象

request、response、session(由page指令的session=”true”控制,默认是true)、application(servletContext的封装)、config(ServletConfig的封装)、page(页面对象自身this)、exception(page指令的isErrorPage=”true”控制,默认为false)、out(JspWriter)、pageContext。

5.1 out对象:1>是JspWriter类型,内部有缓存,缓存大小为8k(由page的buffer来定)。默认8k后,将会刷到response的缓存中(由page的autoFlush来定)。2>jsp中不合适用字节流(因为response的字节流outputStream与字符流writer有冲突)。

5.2 PageContext 作用:。1>能获取其它8大jsp隐式对象,如pageContext.getRequest…2>本身是一个域对象,但scope是页面有效且提供了操作其它域对象的方法如setAttribute(name,obj,scop)这上scope就是PageContext.REQUEST_SCOPE等常量。另一个重要方法:findAttribute(name),将依次从page、request、session、application域对象中找name的key。3>提供像include与forward的方法。

注意:四大域对象的作用范围:pageCotext是当面页面,request是一次请求中(当然包含forward与incldue)、session一次会话范围、application是整个活着的应用。

六.JavaBean的概念:

在javaweb中,通常将javabean对象作为了个值对象VO传递在各层作为数据传输用。而标准的javabean有以下的特点:

1>类有默认的构造方法2>字段都是私有的 3>提供有公有的setter与getter方法

4>一般情况下都实现了Serializable接口。

七.JSP中使用JavaBean的动作元素:

Jsp:userBean

从PageContext.getAttribute("s", PageContext.PAGE_SCOPE);即是从paga的scop中找此对象引用名(key)s,若没有将创建一个对象并存放在Page_Scope中去。有以下属性:

Id:必须有,引用javabean对象的名称。

Class:javabean的类型。

Scope:域范围。page(默认的)|request|session|application

Jsp:getProperty:获取javabean中某个属性的值到页面中去。有以下的属性:

Name:对象的引用名。

Property:属性的值

<jsp:getProperty property="name"name="s"/>:相当于调用s.getName()

Jsp:setProperty:完成类型的自动转换,仅限基本数据类型。

name:象的引用名。 property:属性名称。使用通配符*,使用前提请求参数名与javabean中的写属性一致。

value:设置的值

<jsp:setPropertyproperty="name" name="s" value="abc"/>:相当于调用s.setName("abc");

param:请求参数名,可以将param请求名的值设置到javabean中去。

八.设计模式:SUN推出了两个设计模式:模型1(JSP+JavaBean)与模型2(MVC)。M为Model模型、V为View表现层、C为Controller控制器

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: