JSP基础知识

发布时间:2013-01-28 05:28:13

 

一、  基本原理

1、   Tomcat自动将jsp文件转化成servlet。

2、   <!% %>中申明的变量和方法自动被转化为相应的servlet的成员变量和成员方法。而在<%%>中申明的变量被转化成_jspService方法中的局部变量。

3、   一个奇怪的现象,在<%! %>中第一一个成员变量,输出变量+1到前台,每次访问次数按理应该加1,但是代码被修改后再次访问时,加到一定的数字重归1。原因可能是Tomca内部的同步问题造成的。因为servlet是被同步访问的,所以尽量不要设置servlet的成员变量。

二、  常用jsp指令

1、   page的errorPage属性

在jsp页面中定义errorPage属性

<%@ page errorPage=”errorPage.jsp”%>

在errorPage.jsp中定义isErrorPage属性

<%@ page isErrorPage=”true”%>,可以使用内置对象exception,如果<%=exception.getMessage()%>

2、   include

(1)  静态包含<%@ include fiile=”titleBar.jsp”%>

在编译成servlet文件之前,将文件包含进来,被编译成一个servlet。包含文件和被包含文件访问的是同一个request对象。包含文件的时候不能传递参数,如<%@ include fiile=”TitleBar.jsp?user=123”%>是非法的。

(2)  动态包含<jsp:include fiile=”include.jsp”/>

包含文件和被包含文件分别编译成两个servlet;包含文件和被包含文件中的request内置对象是不同的,但是被包含文件的request可以访问包含文件所能访问的所有参数。包含文件的时候可以传递参数。

向包含页面传递参数:

<jsp:include page=”divide.jps” flush=”true”>

         <jsp:param name=”v1” value=”%=value1%”/>

<jsp:param name=”v1” value=”%=value2%”/>

</jsp:include>

(3)  <%@ include %>和<jsp:include>的区别

<%@ include file="date.jsp" %>

<jsp:include page="date.jsp"

flush="true"/>

include指令是在JSP程序编译前将file属性所指定的程序内容嵌入,再编译成一个servlet的字节码文件;

包含文件和被包含文件都被编译成相应的servlet字节码文件,在客户端请求时运行时载入包含文件的执行结果

include的file中不能带参数

<jsp:include>可以

包含页面和别包含页面使用同一个request对象

包含页面和被包含页面使用不同的request对象,被包含页面可以取得包含页面的参数,并可以在包含页面添加自己的参数(可以通过url或者通过指定jsp:param)

常用

不常用

 

 

 

 

 

三、  response.sendForward()和<jsp:forward>的区别

Sendredirect

Forward

页面和转向页面使用不同的request,转向页面不能取得上一页面的参数

使用不同的request对象,但转向页面可以取到上一个页面的参数

send后的语句会继续执行,除非return

forward后的语句不会继续发送给客户端

访问的原理是,客户端向服务端发送请求,服务器端浏览器发送转向指令,客户端再向服务器端发送请求(转向页面),服务器端把请求结果返回给客户端。需要客户端和服务器端的往返,所以速度慢

转向在服务器内部转化,所以速度比较快

可以转到任何页面

服务器内部转换,所以不能转向非项目内的页面

地址栏有变化

地址栏没有变化

可以传参数,直接写在url后面

可以传参数,即可写在url后面,也可以用指令<jsp:param>

/代表的是http://127.0.0.1/

<%response.sendRedirect("/test/ServletToJSP");%>

<form action="/test/ServletToJSP">

<a href="/test/ServletToJSP">test</a>

/代表的是http://127.0.0.1/test

this.getServletContext().getRequestDispatcher ("/servlet_jsp/ServletUseJsp.jsp")

.forward(req, resp);

并且只能以/开头

常用

常用

四、  userBean

1、   创建bean对象

<jsp:useBean id=”cb” class=”bean.CounterBean”/>

相当于<%CounterBean cb=new CounterBean()%>

2、   设置属性值

<jsp:setProoerty name=”cb” property=”count” value=“12” />

其中的param=”name”,相当于request.getParameter(“name”);

相当于<%cb.setCount(23)%>

property=”*”时,相当于将表单中的同名属性复制给成员变量。

3、   获取属性值

<jsp:getProperty name=”cb” property=”count”/>

相当于<%=cb.getCount()%>

4、   scope参数有四个取值,分别为page(默认),request,session,application

如果scope=”request”,则相当于下面的代码

                   <%

                            bean.CounterBean counterBean=(bean.CounterBean)request.getAttribute(“counterBean”);

                            if(counterBean==null){

                                     counterBean=new bean.CounterBean();

                                     request.setAttribute(“counterBean”,counterBean);

}

%>

session和applicationt同理。

5、    

五、  从servlet转到jsp

1、   使用forward方式

this.getServletContext().getRequestDispatcher(“”).forward(req,resp);

或者thisgetServletConfig().getServletContext().getRequestDispatcher(“”).forward(req,resp);

其中路径必须以/开头。

2、   使用sendRedirect方式

resp.sendRedirect(req.getContextPath()+””);

其中req.getContextPath()获得工程名/my