JSP学习记录

mac2022-06-30  22

1.概述 JSP是一种基于文本的程序,其特点是HTML代码与JAVA程序共同存在。执行时JSP会被TOMCAT自动编译,这个过程对开发者是透明的、不需要关注的。编译后的JSP跟HttpServlet一样,都是javax.servlet.Servlet接口的子类,因此JSP是另一种形式的Servlet。 一般意义上,在提到JSP与Servlet时,Servlet一般是指HttpServlet。如果不特别指明,本书中的Servlet一般是指HttpServlet而不是Servlet接口。 它的出现是为了克服Servlet的弱点。 JSP包括很多技术,包括Java Bean,自定义标签(Custom Tags),EL表达式(Expression Language),JSTL标准标签类库(Java Standard Tag Library)等。这些强大成熟的技术使得JSP在视图层(View Tier)有很大的优势。 2.工作原理 JSP是一种Servlet,但是与HttpServlet的工作方式不太一样。JSP是先部署后编译:JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。 TOMCAT能够自动检测到JSP程序的改动。如果检测到改动,下次请求到达TOMCAT会重新编译JSP,而不需要重启TOMCAT。 3.JSP生命周期 JSP也是Servlet,运行时只会有一个实例。跟Servlet一样,JSP实例初始化、销毁时也会调用Servlet的init()与destory()方法。另外,JSP还有自己的初始化方法与销毁方法_jspInit()与_jspDestory(). 4.JSP语法 JSP代码可以包括两部分,模板数据与元素 模板数据:JSP中的HTML代码。 元素:就是JSP中的JAVA部分,包括脚本、JSP指令与JSP标签。 脚本即JAVA代码部分,用<% %>括起来。JSP声明方法或者全局变量时使用 <%! %>,注意声明的方法不要覆盖了已有的方法,否则会引起错误。 JSP输出用out.println() JSP注释除了JAVA,HTML的注释外,还可以用<%-- --%> 可以通过JAVA代码控制HTML代码。如在if块中包含html达到一定条件下展示HTML的效果。或通过循环达到展示表格数据的效果。 因为JSP本质上就是JAVA,所以如果在JSP中有return,则return后面的代码不会被执行。 5.JSP指令 常见的指令有page, taglib, include。 page指令的多个属性可以写在多个page指令中。 page指令的常见属性:language,extends,import,session,autoFlush,buffer,isThreadSafe,idErrorPage,errorPage,contentType,info,trimDirectiveWhitespaces,其它还有isXml,isELEnabled,isScriptingEnabled include指令只有一种形式:<%@include file="relativeURL" %>。可以用来包含页面均有的统一风格的导航栏head.jsp与foot.jsp等。还可以在web.xml文件中通过配置来包含文件。 taglib指令用来指明JSP页面内使用的JSP标签库。如<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 6.JSP行为 JSP行为是一组JSP内置的标签。包括两种,自定义行为与标准JSP行为。标准的JSP行为格式为<jsp:elements {attribute="value"} * /> 6.1 <jsp:include /> 语法为<jsp:include page="relativeURI" flush="true" /> 6.2 Java Bean(POJO),包括一组行为,useBean,setProperty,getProperty行为等。 e.g. <jsp:useBean id="person" class="..." scope="page" /> 属性从request中自动取得,表示所有属性 <jsp:setProperty name="person" property="" /> <jsp:getProperty name="person" property="name" /> 6.3 <jsp:plugin /> plugin行为包括<=<jsp:plugin />, <jsp:params />, <jsp:param />, <jsp:fallback /> e.g. jsp:plugin运行会生成object,embed等 6.4 <jsp:forward /> 即request.getRequestDispatcher("someServlet").forward(request, response)的一个封装。 同Servlet一样,跳转动作发生之前不能有任何输出到达客户端浏览器,否则会抛出IllegalStateException 6.5 <jsp:directive /> 相当于JSP指令,有,<jsp.directive.page /> <jsp.directive.include /> <jsp.directive.taglib /> 7.JSP隐藏对象,总共有9个,out,request,response,config,session,application,page,pageContext,exception 7.1 out 是javax.servlet.jsp.JspWriter类的实例。客户端输出字符内容。 常用方法有 append(CharSequence) 向缓存中扩展字符类输出 clear() 清空要输出的内容 flush() 将缓存内容flush到客户端浏览器 println(String) 向客户端输出内容 isAutoFlush() 返回缓存满时是否自动flush。如果为false,缓存满时会抛出异常 getBufferSize() 返回缓存大小 getRemaining() 返回缓存剩余大小 7.2 request 是javax.servlet.ServletRequest类的实例,代表着客户端的请求。 常用方法有 setAttribute(String,Object) getAttribute(String) getMethod() getParameter(String) Enumeration getParameterNames() String[] getParameterValues(String) Cookie[] getCookies() getContextPath() getRequestURI() setCharacterEncoding(String) getHeader(String) getHeaderNames() getRequestDispatcher() getSession() 7.3 response 是javax.Servlet.ServletResponse类的实例。代表着客户端的响应。 常用方法有 clear() addCookie(Cookie) OutputStream getOutputStream() sendRedirect(String) setContentType(String) PrintWriter getOut(); setHeader(String, String) setStatus(int) 7.4 config 是javax.servlet.ServletConfig类的实例。可以获取web.xml中初始化的JSP的参数 常用方法有 getInitParameter(String) Enumeration getInitParameterNames() ServletContext getServletContext() getServletName() 7.5 session 是javax.servlet.http.HttpSession类的实例。session与cookie是记录客户访问信息的两种机制。session用于在服务器端保存用户信息,cookie用于在客户端保存用户信息。在JSP页面可以配置<%@page session="false" %>来禁止页面使用session。 常用方法有 getId() getAttribute(String) Enumeration getAttributeNames() getCreationTime() getLastAccessedTime() getMaxInactiveInterval() setAttribute(String,Object) setMaxInactiveInterval(long) 7.6 application 是javax.servlet.ServletContext类的实例。封装了JSP所在的WEB应用程序的信息。例如web.xml中配置的全局初始化信息。 getAttribute(String) Enumeration getAttributeNames() setAttribute(String,value) removeAttribute(String) getInitParameterNames() getMimeType(String) 返回文件的文档类型 getRealPath(String) 7.7 page页面对象 是javax.servlet.jsp.HttpJspPage类的实例。代表当前JSP页面。相当于普通的JAVA类中的关键字this。 7.8 pageContext页面上下文对象 是javax.servlet.jsp.PageContext类的实例。通过pageContext能够获取到JSP中的资源。 常用方法有 findAttribute(String) 在JSP页面中查找变量 forward(url) forward到另一个页面 getAttribute(String) getAttribute(String, scope) getOut() getPage() getRequest() getResponse() getSession() 7.9 exception 是java.lang.Exception的实例 封装了JSP中抛出的异常信息。要使用exception隐藏对象,需要设置<%@page isErrorPage="true" %>

一个页面设置<%@page errorPage="error.jsp" %> 另一个error.jsp页面设置<%@page isErrorPage="true" %> 8 JSP配置 8.1 <jsp-config>标签 支持对JSP的批量操作。包括两个标签<taglib>与<jsp-property-group> e.g. 9 EL表达式 EL(Expression Language),用${}括起来的脚本, 9.1 EL表达式 EL表达式提供了获取对象以及属性的的简单方式。 如session中有个bean对象person,那么可以${person},${person.age},${person.sex}, 可以级联,${person.city.province.country} 9.2 隐藏对象 param,paramValues,header,headerValues,cookie,initParam,pageScope,requestScope,sessionScope, applicationScope,pageContext EL还可以不带任何前缀的,如${person.age},会先在request中查找,如果没有,再在session中查找。 9.3 EL表达式运算 算术运算:+,-,*,/(div),%(mod),?: 关系运算:>(gt),<(lt),==(eq),!=(ne),>=(ge),<=(le) 逻辑运算:&&(and),||(or),!(not) empty 判断集合或数组是否为空

转载于:https://www.cnblogs.com/liunianfeiyu/p/7281548.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)