JSP入门

一.JSP语法

         JSP实际上就是Servlet

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

         1.1模板元素:指JSP中的html

         1.2表达式:

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

                   语法:<%=表达式%>

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

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

                   出现在JSP中的java代码。

                   作用:组织逻辑

                   语法:<%语句1;

                                    语句2;%>

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

         1.4JSP声明:

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

                   语法:<%!

                                    语句;

                              %>

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

         1.5JSP注释

                   作用:注释

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

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

二.JSP的指令

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

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

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

         2.1page

                   属性:

                            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”/”开头表示绝对路径。静态包含的原理是指:将另一urlfile文件内容全部编译到本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.jsp2.jsp都会编译出来分别编译成_1_jsp.java_2_jsp.java并生成_1_jsp.class_2_jsp.class

        

四.Jsp的动作元素

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

五.JSP9大隐示对象

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

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

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

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

六.JavaBean的概念:

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

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

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

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

Jsp:userBean

         PageContext.getAttribute("s", PageContext.PAGE_SCOPE);即是从pagascop中找此对象引用名(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)MModel模型、VView表现层、CController控制器

JSP入门_第1张图片

你可能感兴趣的:(java,jsp,session,servlet,application,include)