JSP:一种动态网页技术,在html中内嵌java代码,本质是Servlet。
在<%! %>声明|定义变量、方法。
一个jsp对应一个Servlet,Servlet是一个特殊的Java类。在<%! %>中声明|定义的变量是Servlet的成员变量,声明|定义的方法是Servlet的成员方法。
在<%! %>中不能使用jsp的内置对象。
在<% %>中可以声明|定义变量,但不能定义方法。
在<% %>、<%! %>中,依旧使用java本身的注释。
在<% %>、<%! %>外,可以使用<%-- -->、<!-- -->。
<%-- -->是jsp的注释,<!-- -->是html注释,区别是jsp注释在编译成servlet时会被扔掉,浏览器查看源代码时看不到jsp注释。html注释会被保留,查看源代码时仍然看得到html注释。
<%= 常量|变量|表达式 %>
直接写在html中,会输出等号后面部分的执行结果,相当于out.println()。
<%=1 %> <%=a+1 %> <%=sum(2,3) %>表达式后面不能写分号。
编译指令用法: <%@ 编译指令名 属性名1="属性值1" 属性名2="属性值2" %> ,有多个属性时,空格分隔。
page指令通常位于jsp页面的顶部,给当前jsp页面设置页面属性。一个jsp页面可以有多个page指令。
常用属性:
language="java" contentType="text.html" //文档类型。比如text/plain 纯文本,image/jpeg jpg图像,image/gif gif图像。pageEncoding="utf-8" //编码字符集import="" //导入包、类session="true" //是否使用内置的session对象,默认为trueisErrorPage="false" //当前页面是否是错误处理页面,默认为false。为true时,本页面有内置的exception对象。errorPage="/error.html" //指定错误处理页面,如果当前页面发生异常|错误,且本页面中未处理该异常,则会自动跳转到指定的错误处理页面buffer="" //指定输出缓冲区的大小,默认为8KB。输出内容到浏览器时,会先放到服务器的缓冲区中,缓冲区满了才会刷到浏览器。
include用于包含一个文本,可以是静态的html,也可以是动态的jsp。
常用属性:file="/test.jsp" //指定要包含的文件。
include编译指令是一种静态包含,要包含的文件是确定的。编译时先用要包含的文件中的文本替换掉这句代码,再作为一个整体编译成一个Servlet。
被包含的文本可以是一小段代码,不必是一个完整页面。
包含一个文本,page指定要包含的文本,可以使用相对路径,也可以使用java输出表达式。
包含的文件是可变的,属于动态包含。
是把被包含页面的执行结果|效果包含进来。编译时各自编译。
请求转发。将请求转发给另一个页面处理,由另一个页面响应。
服务器内部行为,浏览器总的只发送一次HTTP请求。
说明:以上2个动作元素均可写成双标签,带子元素<jsp:param />,用于向目标页面传递额外参数。
<jsp:param name="" value="" />
可使用多个<jsp:param />。
传递的参数相当于表单参数,在目标页面中使用request.getparameter(String name)取出。
调用空参构造器创建一个JavaBean实例。该JavaBean要有空参的构造器。
id指定创建的实例的name,相当于变量名,class指定JavaBean的类名,scope指定把这个实例放到哪个域中。
JSP|Servlet有4个域:
page 只在当前页面中有效session 只在本次session中有效request 只在本次请求中有效application 在整个web项目中一直有效
3只是调用空参的构造器创建JavaBean的实例,并没有初始化这个实例。
<jsp:property />是给一个JavaBean的实例设置一个属性值。
name指定JavaBean的实例,property指定属性名(成员变量),value指定属性值。
property,单数,只能设置一个属性,要设置多个需使用多个<jsp:property />。
实质是调用JavaBean的setter()方法来设置属性值,所有目标JavaBean需要提供gtesetter()方法。
获取JavaBean实例的属性值。会直接在该位置输出这个属性值。
name指定JavaBean的实例,property指定属性名。
说明:输出表达式<%= %>、编译指令、动作指令均相当于html元素,位置和html元素的位置一样,不是放在<% %>、<%! %>中的。
Servlet中没有内置对象,对象需要通过代码显示创建。
request、response、session、config、application,这几个对象的使用方式和在Sevlet中的使用方式完全相同。
config是当前JSP|Servlet的配置,JSP一般不用配置,这个对象不常用。
域可使用4个常量:
pageContext.PAGE_SCOPEpageContext.REQUEST_SCOPEpageContext.SESSION_SCOPEpageContext.APPLICATION_SCOPE这四个常量可以使用pageContext这个内置对象来引用,也可以使用PageContext这个类来引用,比如 PageContext.PAGE_SCOPE 。
Servlet、JSP中都有这4个域,Servlet、JSP之间传递数据一般是通过这4个域来传递的。
这4个域相当于4个不同Map,可以在不同的域中存储相同的属性。比如可以在page、session中都存储name属性。
pageContext.getAttribute(String name, int scope)是在指定的域中查找属性值。
pageContext.findAttribute(String name)是依次在page、request、session、application中查找属性值,找到一个就返回,不再继续往下找。
要在page指令中把isErrorPage设置为true,才能使用exception内置对象。
page指令默认session="true",有内置的session对象,如果设置为false,则没有内置的session对象。
各种Java工具、框架层出不穷,并不能保证总能正确调用JavaBean的setter()、getter()方法。
BeanUtils是Apache的开源项目,提供了一套简单、易用的API,可以动态调用JavaBean的setter()、getter()方法。
下载BeanUtils,把commons-beanutils.jar添加到项目中。
此外还需要添加commons-logging.jar包。
BeanUtils的核心类是BeanUtils类,BeanUtils类常用的方法:
static void setProperty(Object bean, String name, Object value) //设置属性值。bean指定JavaBean的实例,name指定属性(成员变量),value指定属性值。static void populate(Object bean, Map<String, ? extends Object> properties) //批量设置属性值。Map中的key是属性名,value是属性值。static String getProperty(Object bean, String name) //获取属性值,注意返回值是String。这三个方法均是BeanUtils的静态方法。
转载于:https://www.cnblogs.com/chy18883701161/p/11406294.html
相关资源:全新java7全版本下载