【JSP技术】
JSP的概述:
JSP:JavaServer Pages.
使用JSP:
* JSP的脚本:
* JSP的注释:
* JSP的内置对象:
* JSP的指令:
* JSP的标签:
JSP的脚本:
一种:<%! %> :翻译成Servlet内部的内容
二种:<% %> :翻译成Servlet的service方法内部东西.
三种:<%= %> :翻译成out.print();
JSP的执行原理:
JSP也会被翻译成Servlet.被编译成class.
JSP的注释:
JSP支持三种注释:HTML的注释 Java代码注释 JSP的注释:
HTML的注释:
<!-- HTML的注释:可以存在JSP源码中,翻译成的Servlet中的注释也存在,在HTML的代码中也会存在. -->
Java代码的注释:
<%
// 单行注释 可以存在于JSP源码中 在翻译成Servlet的时候,Java代码的注释也是会存在的.但是生成HTML的页面之后,注释就会消失了.
/*
多行注释
*/
/**
* 文档注释
*/
%>
JSP的注释:
<%-- JSP的注释:只会存在于JSP的源代码中,当代表翻译成Servlet了 JSP的注释就消失了. --%>
JSP的指令:
JSP的指令:JSP中的三大指令。
语法:<%@ 指令的名称 属性名=”属性值” 属性名=”属性值”%>
* page指令:
*language :JSP的语言的属性.现在只能是java.
* contentType :设置浏览器默认的打开的时候的编码.
* pageEncoding :设置JSP文件保存到硬盘,以及翻译成Servlet保存到硬盘的编码格式.
* import :设置JSP中引入其他的类.import属性可以出现多次的.
*extends :设置JSP被翻译成Servlet后继承的类:默认值:org.apache.jasper.runtime.HttpJspBase.修改这个值得话一定要使这个类是一个Servlet才可以.
* autoFlush :设置自动刷出缓存
* buffer :JSP的缓冲区的大小。默认8kb
* session :默认值是true.设置JSP的页面中是否可以直接使用session对象.
* isELIgnored :设置JSP是否忽略EL表达式.默认值false 不忽略.可以在JSP中写EL表达式.
* isErrorPage :设置JSP页面中出现错误信息应该如何处理的.
*errorPage :设置JSP页面中出现错误信息应该如何处理的.
* 设置全局错误页面:
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
* include指令:用于引入其他的页面
* file属性:属性中不能使用变量,不能传递参数
<%@include file="logo.jsp" %>
<%@include file="menu.jsp" %>
<h1>Body</h1>
<%@include file="footer.jsp" %>
* taglib指令:用于在JSP中引入标签库
<%@taglib uri="" prefix="" %>
JSP的内置对象:
内置对象:JSP中可以直接使用的对象.
JSP的内置对象有哪些?常用的方法?真实对象是谁?
JSP中有9个内置对象:
* request HttpServletRequest getParameter(),setAttribute(),getAttribute();
* response HttpServletResponse setStatus(),sendRedirect(),getOutputStream();
* session HttpSession setAttribute(),getAttribute(),removeAttribute();
* application ServletContext setAttribute(),getAttribute(),removeAttribute();
* page Object toString(),wait(),
* JSP翻译成Servlet的引用.
* pageContext PageContext setAttribute(),getAttribute(),removeAttribute();
* out JspWriter write(),print(),
* config ServletConfig getInitParamter(),getInitParameterNames(),
* exception Throwable getMessage(),getCause()
* out对象:先将自身缓存区中的内容输出到response的缓冲区中,由response向页面作出响应.
* out:JspWriter
* response.getWriter() :PrintWriter
* pageContext:
* 一类:用pageContext对象获得其他的8个内置对象.用来编写一个通用性高的或者框架的时候.
* 二类:用来存取数据.向四个域中存取数据.
JSP的四个域对象:
* pageContext pageScope 页面范围
* request requestScope 请求范围
* session sessionScope 会话范围
* application applicationScope 应用范围
JSP的动作标签:
语法:<jsp:动作标签 属性=””/>
为什么使用标签:简化代码的编写,尽量要少在JSP中使用<%%>
<jsp:forward />
* 转发:<jsp:forwardpage="/demo1/demo5.jsp"></jsp:forward>
<jsp:include />
* 包含:<jsp:includepage="/demo1/include2/logo.jsp"></jsp:include>
***** 静态包含 和 动态包含的区别?
* 静态包含相对于代码的copy,最终被翻译成一个Servlet解释执行的.动态包含,包含其他页面的运行的结果.最终翻译成多个Servlet解释执行的.
【EL表达式】
EL:
EL:Expression Language.表达式语言.
语法:${ EL表达式 }
JSP中尽量少使用<%%>代码块.使用EL和JSTL替换页面中<%%>
使用EL表达式:
用途:
1.获取数据.
2.EL执行运算
3.获得常用WEB开发的对象.
4.调用Java中的函数.
EL用来获取数据:(获取是四个域范围中的值)
* 获得普通的值:
* 获得数组的数据:
* 获得List集合的数据:
* 获得Map集合的数据:
[]和. 有什么区别?
[]获得带有下标的(数组,List) .获得一个对象的属性,如果属性名中包含了特殊字符.必须使用[]不能使用.
<h1>EL获取数据</h1>
<%
pageContext.setAttribute("pname","王守义");
request.setAttribute("rname","王凤儿");
session.setAttribute("sname","王如花");
application.setAttribute("aname","王芙蓉");
%>
<h3>传统方式</h3>
<%=pageContext.getAttribute("pname")%>
<%= request.getAttribute("rname")%>
<%= session.getAttribute("sname")%>
<%=application.getAttribute("aname")%>
<h3>EL的方式</h3>
${ pageScope.pname }
${ requestScope.rname }
${ sessionScope.sname }
${ applicationScope.aname }
<%
//pageContext.setAttribute("name","王守义");
//request.setAttribute("name","王凤儿");
session.setAttribute("name","王如花");
application.setAttribute("name","王芙蓉");
%>
${ name }
<h3>EL获得数组的数据</h3>
<%
String[]arrs = {"王守义","王如花","王凤儿"};
pageContext.setAttribute("arrs",arrs);
%>
${ arrs[1] }
<h3>EL获得List集合的数据</h3>
<%
List<String>list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
pageContext.setAttribute("list",list);
%>
${ list[1] }
<h3>获得Map集合的数据</h3>
<%
Map<String,String>map = new HashMap<String,String>();
map.put("aaa","111");
map.put("bbb","222");
map.put("ccc.ddd","333");
pageContext.setAttribute("map",map);
%>
${ map["ccc.ddd"] }
<h3>EL获得JavaBean中的数据</h3>
<%
Personperson = new Person();
person.setId(1);
person.setName("王美丽");
pageContext.setAttribute("person",person);
%>
${ person.name }
EL执行运算:
执行算数运算:
+ - * / %
执行逻辑运算:
> < >= <= != ==
执行关系运算:
&& || !
<h1>EL执行运算</h1>
<h3>EL执行算数运算</h3>
<%
pageContext.setAttribute("n1","10");
pageContext.setAttribute("n2","20");
pageContext.setAttribute("n3","40");
pageContext.setAttribute("n4","60");
%>
${ n1+n2+n3 }
<h3>EL执行逻辑运算</h3>
${ n1 < n2 }
${ n1 > n2 }
<h3>EL执行关系运算</h3>
${ n1<n2 && n3<n4 }
${ n1<n2 || n3<n4 }
<%
Personperson = new Person();
pageContext.setAttribute("person",person);
%>
${ empty person }
${ not empty person }
EL获得WEB开发的常用的对象:(EL的内置对象)
EL常用的对象:11个.
${pageScope}
${requestScope}
${sessionScope}
${applicationScope}
${ param } :相当于request.getParameter();
${ paramValues } :相当于request.getParameterValues();
${ header } :获得请求头 一个key对应一个value
${ headerValues } :获得请求头 一个key对应多个value
${ initParam } :获得初始化参数
${ cookie } :获得Cookie的信息
${pageContext} :相当于pageContext对象.
【JSTL标签库】
JSTL的标签库概述:
JSTL(JSPStandard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。
作用:结合EL替换页面中的<% %>
使用JSTL的标签库:
JSTL的五大标签库:core、fmt、xml、sql、fn
JSTL的版本:JSTL1.0 JSTL1.1 JSTL1.2
* JSTL1.0是EL还没有被纳入规范的时候使用标签.
* JSTL1.1和1.2的版本中 EL已经被纳入到规范中.JSTL可以支持EL表达式了.
步骤一:引入标签库.
<%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c" %>
常用的标签:
c:set
c:if
c:forEach
c:choose
* c:when
*c:otherwise
JSTL的函数库(EL的函数库)
<%@ tagliburi="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
${ fn:length("HelloWorld") }
${ fn:toLowerCase("ABCDEFG") }
${ fn:toUpperCase("abcdefg") }
${ fn:contains("www.baidu.com","baidu")}
【JSP的模式】
Model1:JSP+JavaBean 比较适合开发一些小应用.
Model2:JSP+Servlet+JavaBean 可以开发任何一个应用. MVC设计模式:
【MVC设计模式】
MVC是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
【EE开发中的三层结构】
JavaEE开发中通常将一个应用分成:WEB层,业务层,持久层
【JavaBean】
JavaBean:JavaBean就是一个满足的特定格式要求的Java类.
* 有一个无参数的构造:
* 属性私有
* 私有属性提供public的get或set方法.