1.什么是jsp? 在传统网页中加入java程序片断和jsp标记就构成了jsp网页。
2.在MVC模式中,jsp、javabean和servlet之间有何关系? 我发现很多人在提这个问题时,都喜欢说jsp、javabean和servlet之间有何关系,如果没有在MVC模式中这个条件的话,这个问题还真不好回答,但是在MVC模式中,servlet扮演了一个控制者的角色,并负责响应客户请求;javabean进行业务逻辑处理;jsp只负责输出HTML网页显示的部份.
3.jsp文件的编写 一个复杂一点的jsp页面可能会包括如下一些常用的jsp指令: <%@ page contentType=”text/html;charset=gbk”%> <!–定义程序所要输出的字符集–> <%@page import=”java.sql.*”%> <!–<%@ page %>是JSP语法的指令,import是<%@ page %>的属性,和java中import关键字意思一样,没有区别。–> <%@ taglib uri=”http://struts-menu.sf.net/tag-el” prefix=”menu” %> <!–<%@ taglib %>是JSP语法的指令,taglib指令说明需要在jsp页面中引入标签库,uri是指标签库所在的位置,prefix是指在jsp中引用标签库时指定的前缀–> <jsp:useBean id=”userBean” class=”com.userBean” scope=”request”/> <!–实例化一个JavaBean,取名为userBean–> <html> <head><title>A Comment Test</title></head> <body> <!–正文内容略–> </body> </html>
4.javabean在jsp中的声明和使用 <jsp:usebean>指令表示用来在JSP页面中创建一个BEAN实例。在<jsp:usebean>指令中定义了几个属性: id:定义了生成的bean组件的名字 scope:定义了bena的活动范围,取值如下:page(表示当前页有效) | request(表示这次请求有效) | session(表示这次会话有效) | application(表示在应用程序的生命周期有效). class:说明了bean的类文件的名称
5.标签库的配置 上面提到的标签库的uri为什么看上去像网址呢.当你自己不在WEB应用项目中定义特殊的命名空间的时候,uri位置来自可下载taglib的位置。如果你在web.xml里面定义了自己的命名空间名称,而且也在JSP中使用了,那么容器使用你的名称空间去定位相应的TAG定义.以Struts标签库为例: 1)若Web工程没有使用Struts的标签库,可以不在web.xml中使用Struts的标签库信息。 <%@ taglib uri=”http://jakarta.apache.org/struts/tags-bean” prefix=”bean” %> <%@ taglib uri=”http://jakarta.apache.org/struts/struts-htm” prefix=”html”%> <%@ taglib uri=”http://jakarta.apache.org/struts/struts-logic” prefix=”logic”%> <%@ taglib uri=”http://jakarta.apache.org/struts/struts-nested” prefix=”nested”%> 2)在web工程中定义了Struts的标签库,而且标签库放到了web工程中的WEB-INF目录下 <%@ taglib uri=”/WEB-INF/struts-bean.tld” prefix=”bean”%> <%@ taglib uri=”/WEB-INF/struts-html.tld” prefix=”html”%> <%@ taglib uri=”/WEB-INF/struts-logic.tld” prefix=”logic”%> <%@ taglib uri=”/WEB-INF/struts-nested.tld” prefix=”nested”%> 在web工程中进行配置的的好处是因为可以在Struts中配置为tld文件配置一个简要的名称或者更加易懂的名称,例如在web.xml文件中
增加如下配置: <taglib> <taglib-uri>/tags/struts-bean</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-html</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-logic</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-nested</taglib-uri> <taglib-location>/WEB-INF/struts-nested.tld</taglib-location> </taglib>
6.jsp脚本元素 脚本元素包含三部分:声明(Declarations)、Scriptlets、表达式(Expressions) 1)声明(Declarations) 功能:在JSP程序中声明变量、实例和类。声明是以<%! 为起始;%> 为结尾。 语法:<%! code %> 2)Scriptlets 功能:Scriptlet 中可以包含有效的程序片段,只要是合乎Java本身的标准语法即可。Scriptlet 是以 <% 为起始;%> 为结尾。 语法:<% code fragment %> 3)表达式(Expressions) 功能:JSP提供了一种简单方法访问可用的Java变量或Java表达式,并生成页面HTML字符串。Expressions标签是以 <%= 为起始;%> 为结尾,
其中间内容包含一段合法的Java的表达式。 语法:<%= expression %>
7.jsp中”预定义变量”的使用 为了简化JSP表达式和scriptlets中的代码,要求对4种预定义变量熟练掌握,它们是:request,response,out,session,
1)request 与request相联系的是HttpServletRequest类,使您可以得到request的参数(通过getParameter方法),request 的类型(GET,POST,HEAD,等等),和引入的HTTP头(cookies,Referer,等等)。严格来说,request是类ServletRequest的一个子类而不是HttpServletRequest类的,事实上,如果request的协议不是HTTP,那麽它几乎不会工作。 2)response 对客户端的response与HttpServletResponse 相连。请注意,因为输出流是放入缓冲的,所以可以设置HTTP状态码和response头,尽管在标准的servlets中不允许将之发送到客户端。 3)out 这里使用PrintWriter类来发送输出到客户端。然而,为了使response对象有效,可使用一个PrintWrite类的使用缓冲的版本JspWriter。使用session的属性page directive,您可以自己定义缓冲的大小,甚至可以在使用了buffer属性后关闭缓冲。也请注意,out仅用于scriptlets之中,因为JSP表达式自动的放入输出流,所以极少需要明确的声明out。 4)session 应用与request相联系的HttpSession类。因为session是自动创建的,即使没有一个引入的session,这种变量仍可绑定。有一个例外是,如果您用page directive关闭session,再试图使用session时将导致错误(在JSP页面向servlet转换时)。