首页 > 代码库 > JSP学习初体验
JSP学习初体验
JSP简介:
1)JSP--Java Server Pages
2)拥有servlet的特性与优点(本身就是一个servlet)
3)直接在HEML中内嵌JSP代码
4)JSP程序由JSP Engine先将它转换成servlet代码,接着将它编译成类文件载入执行
5)只有当客户端第一次请求执行JSP时,才需要将其转换、编译
JSP的优点:
1)优良的性能
优于CGI、PHP、ASP
2)平台无关性
操作系统无关,web服务器无关
3)可扩展性
tag的扩展机制,简化页面开发
JSP编程--基本语法:
JSP传统语法:
1)Declaration:
基本语法:<%! %>说明:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行。此部分声明的变量会转化为SERVLET的成员变量,函数只能在此处声明。例:<%!int i;public void setName(){… …}%>
【注意】:<% %>这种形式声明的变量和方法是局部的,例如<% int count1=0 %>
<%= xxx %>:原样输出xxx的内容
2)Scriptlet:
基本语法:<%程序代码区%>可以放入任何的Java程序代码,此部分声明的变量为局部变量,在service()方法里例:<%for (int i=0;i<10,i++){ … …}%>
3)注释格式:
1)<%--... ...--%>2)<%//... ...%>3)<%/*... ...*/%>
4)表达式:
基本语法:<%=… …%>=后面必须是字符串变量或者可以被转换成字符串的表达式不需要以;结束,只有一行例:<%=“hello world”%><%=i+1%><%=request.getParameter(“name”)%>
【注意】:形如http://localhost:8888/test/Expressions.jsp?testParam=abc%20de,问号?后面的testParam=abc%20de是传递给jsp的参数,如果参数内包含空格,则会用%20来进行替换;
5)Directive:编译期指令
Directive(编译指令)相当于在编译期间的命令格式:<%@Directive 属性=“属性值”%>常见的Directive:pageincludetaglib
详细了解三种常见的Directive:
5.1 Directive-page:
指明与JSP Container 的沟通方式基本格式:%@page language=“script language”| extends=“className”| import=“importList”| buffer=“none|kb size”| --none:不缓冲,默认8k session=“true|false”| --是否可以使用session,默认true autoFlush=“true|false” --缓冲器是否自动清除,默认true isThreadSafe=“true|false”| --默认false(永远不要设成true) info=“infoText”| --任何字符 errorPage=“errorPageUrl”| isErrorPage=“true|false”| contentType=“contentTyepInfo”| pageEncoding=“gb2312”%
【注意】比较重要的几个属性:import、errorPage、isErroPage、contentType
下面分别举例说明
import和contentType
<%@Page import="java.util.*"%><%@page contentType="text/html;charset=gb2312"%><%= new Date() %><%
out.println("你好");
%>
ErrPage和isErrorPage:友好的出错界面,当出现错误的时候提供给用户ErrPage的页面
<%-- *******ErrPage.jsp******* --%><%@ page contentType="text/html;charset=gb2312" %><%@ page is ErrorPage="true" %><HTML><BODY TEXT="red">错误信息:<%= exception.getMessage() %></BODY></HTML>
5.2 Directive-include:用于包含非动态的代码,不能向fileURL中传递参数,即不能出现形如abc.jsp?user=aaa的形式
将指定的JSP程序或者HTML文件包含进来格式:<%@include file=“fileURL%>JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生成一个java和class)限制:不能向fileURL中传递参数不能abc.jsp?user=aaa
6)Action:运行期间的指令
Action(动作指令)在运行期间的命令常见的:jsp:useBeanjsp:setPropertyjsp:getPropertyjsp:includejsp:forwardjsp:paramjsp:plugin嵌入applet
6.1 jsp:inlcude/jsp:param
用于动态包含JSP程序或HTML文件等除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。格式:<jsp:include page=“URLSpec” flush=“true”/><jsp:include page=“URLSpec” flush=“true”> <jsp:param name=“ParamName” value=http://www.mamicode.com/“paramValue”/>"color: #000000;">jsp:param用来设定include文件时的参数和对应的值和编译指令include的区别:include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入Include不能带参数, 而<jsp:include>可以。动态包含的文件和被包含文件用的是同一个request对象。产生两个class文件
6.2 jsp:forward/jsp:param
用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)格式:<jsp:forward page=“urlSpec” flush=“true”/><jsp:forward page=“urlSpec”> <jsp:param name=“paramName” value=http://www.mamicode.com/“paramValue”/>"color: #000000;">用于指定参数和其对应的值Forward的页面和forward到的页面用的是同一个request与此相对应的是response.sendRedirect
6.3 <jsp:forward>与response.sendRedirect的区别
用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)格式:<jsp:forward page=“urlSpec” flush=“true”/><jsp:forward page=“urlSpec”> <jsp:param name=“paramName” value=http://www.mamicode.com/“paramValue”/>"color: #000000;">用于指定参数和其对应的值Forward的页面和forward到的页面用的是同一个request与此相对应的是response.sendRedirect
两者的区别可以用下面的图示描述:
用蓝色标注的是forward方式请求页面(前后是同一个request),用绿色标注的是sendRedirect方式(不同的request)
6.4 jsp:usebean(不要使用裸体类,将bean放到包中,如com.itcast.useBean)
通过jsp:useBean,可以在JSP中使用定义好的BeanBean的基本要素:必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写基本用法:test.jsp/CounterBean.java 不要使用裸体类(规范要求)jsp:useBean各项参数含义:id:对象实例名称scope:Bean作用的范围,默认为page,对整个jsp页面有效class:Bean类名称(全名)type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类Scope各项参数的意义:page:仅涵盖使用JavaBean的页面request:有效范围仅限于使用JavaBean的请求session:有效范围在用户整个连接过程中(整个会话阶段均有效)application:有效范围涵盖整个应用程序。也就是对整个网站均有效jsp:setProperty的格式:<jsp:setProperty name=“beanName” property=“propertyName” |property=“*”value=“property value” |param=“paramName”/>相当于beanName.setPropertyName(value)方法调用(setXxx()方法)jsp:getProperty的格式:<jsp:getProperty name=“beanName” property=“propertyName”/>相当于beanName.getPropertyName()方法调用(getXxx()方法)建立表单参数和Bean属性之间的关联通过param指定表单元素的名称,通过perperty指定对应的Bean属性名称,由此建立这两个变量的关联通过*来设置所有属性和输入参数之间的关联在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据
JSP学习初体验