JSP:
全称:Java Servlet Pages
JSP和Servlet分工:
JSP:作为请求发起页面、请求结束页面。
Servlet:作为请求中处理数据的环节。
JSP = html + java脚本 + jsp标签(指令)
JSP中无需创建即可使用的对象一共有九个,被称为九大内置对象。
九大内置对象:
out:JspWriter,等同于response.getWriter(),用来向客户端发送文本数据。
config:ServletConfig
page:当前JSP页面的this,即当前对象。
pageContext:PageContext,页面上下文对象。
exception:Throwable,只有在错误页面中可以使用这个对象。
request:HttpServletRequest
response:HttpServletResponse
application:ServletContext
session:HttpSession 。若JSP页面中有<%@page session="false" %>,则该页面不能使用session
三种Java脚本:
<% ... %>:Java代码。
<%=... %>:Java表达式,用于输出(常量、变量、表达式)的结果
<%!... %>:声明。创建类的成员变量和成员方法。
原理:
JSP其实就是一个特殊的Servlet。
当JSP页面第一次被访问时,服务器会把JSP编译成Java文件,这个Java文件其实就是一个Servlet类。然后把Java编译成.class。然后创建该类对象,最后调用它的service()方法。第二次请求同一JSP时,直接调用service()方法。
在tomcat的work目录下可以找到JSP对应的.java源文件。
JSP注释:
<%-- --%>:当服务器把JSP编译成Java文件时已经忽略了注释部分。
指令:
一个JSP页面可以有0~N个指令的定义。
JSP的三大指令:page、include(静态包含)、taglib(导入标签库)
page:
格式:
<%@page 属性名称="属性值" %>
pageEncoding和contentType的作用:
pageEncoding:指定当前页面的编码,在服务器要把JSP编译成.java时需要使用pageEncoding
contentType:标志添加一个响应头Content-Type。等同于response.setContentType("text/html;charset=utf-8");
若俩个属性只提供一个,那么另一个默认值为设置的那一个。若俩个属性都没有提供,那么默认为iso
import:导包,可以出现多次。
errorPage和isErrorPage的作用:
errorPage:当前页面如果抛出异常,那么要转发到那个页面由errorPage来指定。
isErrorPage:指定当前页面是否为处理错误的页面。当属性为true时,这个页面会设置状态为500,而且这个页面可以使用9大内置对象的exception
web.xml也可以指定错误页面,使用<error-page>,而<error-page>有俩种使用方式:
<error-page> <error-code></error-code> <location></location> </error-page> <error-page> <exception-type></exception-type> <location></location> </error-page>
error-code:指定响应码。404、500等。
location:指定转发页面。
exception-type:指定抛出的异常类型。
autoFlush和buffer:
autoFlush:指定JSP的输出流缓冲区满时,是否自动刷新,默认为true。若为false,那么缓冲区满时会抛出异常。
buffer:指定缓冲区大小,默认为8kb,通常不需要修改。
isElIgnored:是否忽略EL表达式,默认为false,不忽略,即支持。
pageContext:Servlet中有三大域;而JSP中有四大域,pageContext就是最后一个域对象。
四大域:
ServletContext:作用于整个应用程序。
session:作用于整个会话,一个会话中只有一个用户。
request:作用于一个请求链。
pageContext:作用于一个JSP页面。
该域是在当前JSP页面和当前JSP页面中使用的标签之间共享数据。
功能:
1、域对象;
2、代理其他域:pageContext.setAttribute("xxx","XXX",PageContext.SESSION_SCOPE);
3、全程查找:pageContext.findAttribute("xxx");依次在page、request、session、application四个域范围内查找名称为xxx的数据。page优先级最高。
4、获取8个内置对象:
JSPWriter getOut();//获取out内置对象 ServletConfig getServletConfig();//获取config内置对象 Object getPage();//获取page内置对象 ServletRequest getRequest();//获取request内置对象 ServletResponse getResponse();//获取response内置对象 HttpSession getSession();//获取session内置对象 ServletContext getServletContext();//获取application内置对象 Exception getException();//获取exception内置对象
include:
静态包含。与requestDispatcher的include()方法功能相似。
<%@include%>:它是在JSP编译成Java文件时完成的。他们共同生成一个Java文件(就是一个Servlet),然后再生成一个class。
requestDispatcher的include()时一个方法,包含和被包含的时俩个Servlet,即俩个class;他们只是把响应的内容再运行时合并了。
作用:
把页面分页了,使用包含的方式组合再一起,这样一个页面中不变的部分,就是一个独立的JSP,而我们只需要处理变化的页面。
taglib:导入标签库
俩个属性:prefix、uri
prefix:指定标签库在本页面的前缀,由我们自定义前缀名。
uri:指定标签库的位置。<%@taglib prefix="pre" uri="/xxx-tags"%>
前缀的用法实例:<pre:text>
JSP动作标签:
JSP的动作标签与html提供的标签由本质的区别。动作标签是由tomcat来解释执行。html由浏览器来执行。
<jsp:forward>:转发;与requestDispatcher的forward()是一样的,一个是在Servlet中使用,一个是在JSP中使用。
<jsp:include>:包含;与requestDispatcher的include()是一样的,一个是在Servlet中使用,一个是在JSP中使用。
<jsp:param>:用来作用forward和include的子标签,用来给转发或包含的页面传递参数。
自动重新加载设置:
tomcat>>conf>>context.xml中元素Context的reloadable属性设置为true
<Context reloadable="true">
reloadable:重新加载。
JavaBean:
规范:
必须要为成员提供get/set方法。两者只提供一个也是可以的。
必须有默认构造器(无参的)
一般对应具有get/set方法的成员变量称之为属性。
其实就算一个属性没有对象的成员变量,只有get/set方法也是可以的。其实属性名称就是get/set方法去除get/set后,再把首字母小写。
内省:
内省类>>bean信息>>属性描述符>>属性的get/set对象的Method>>反射
commons-beanutils 它依赖内省完成。内省依赖反射
工具包:commons-beanutils.jar、commons-logging.jar
BeanUtils.setProperty(bean,name,value);//设置属性值 String BeanUtils.getProperty(bean,name);//获取属性值 BeanUtils.populate(Map,Object); CommonUtils.toBean(map,Object);//封装数据 //例:封装表单数据到自定义对象中 ClassName cn=CommonUtils.toBean(request.getParameterMap(),ClassName.class);
实例:将一个Map封装到一个bean中
Map<String,String> map=new HashMap<String,String>(); map.put("uname","zhangsan"); map.put("pwd","123456"); User us=new User(); BeanUtils.populate(us,map); //或 User us=toBeans(map,User.class); public static <T> T toBeans(map,Class<T> clazz){ try{ T bean=clazz.newInstance();//创建指定类型的javabean对象 beanUtils.populate(bean,map);//把数据封装到javabean中 return bean; }catch(Exception ex){ throw new RuntimeException(ex); } }
JSP中与javaBean相关的标签:
<jsp:userBean>:创建或查询bean 。
<jsp:userBean id="user" class="包名" scope="session">
在session域中查找名为user的bean,若不存在,创建之。
<jsp:setproperty>:设置
<jsp:setproperty property="uname" name="user" value="admin">
设置名为user的这个javaBean的uname属性值为admin 。
<jsp:getProperty>:获取
<jsp:getProperty property="uname" name="user">
获取名为user的javaBean的名为uname属性值