名称
类型
描述
out
javax.servlet.jsp.JspWriter
用于页面输出
request
javax.servlet.http.HttpServletRequest
得到用户请求信息,
response
javax.servlet.http.HttpServletResponse
服务器向客户端的回应信息
config
javax.servlet.ServletConfig
服务器配置,可以取得初始化参数
session
javax.servlet.http.HttpSession
用来保存用户的信息
application
javax.servlet.ServletContext
所有用户的共享信息
page
java.lang.Object
指当前页面转换后的Servlet类的实例(在普通类中的this)
pageContext
javax.servlet.jsp.PageContext
JSP的页面容器
exception
java.lang.Throwable
表示JSP页面所发生的异常,在错误页中才起作用
(1)out对象
out的类型:JspWriter
out作用就是想客户输出内容-----out.write()
out缓冲区默认8Kb 可以设置为0,代表关闭out缓冲区,内容会被直接写到response缓冲区中。
上述代码的执行过程:当执行out.write();服务器会将里面的aaa、bbb、ddd存入out缓冲区中,执行response.getWriter().writer()时服务器会将里面的asd存入response缓冲区中,最后将out缓冲区中的内容刷到response缓冲区中,由于asd先进入缓冲区,所以最终结果为:asd、aaa、bbb、ddd
如果将buffer设置为0Kb,则关闭out缓冲区,out.write()里面的数据找不out到缓冲区,会默认存到response缓冲区中。最后的结果应为:aaa、bbb、asd、ddd
(2)pageContext对象----是一个域对象
jsp页面的上下文对象,page对象是设置页面属性的,例如导包、设置语言、数据编码格式等,与pageContext对象不是一回事
pageContext同样拥有域对象的三个方法
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttribute(String name)
pageContext可以向指定的其他域中存取数据
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
pageEncoding="ISO-8859-1"%>
Insert title herepageContext.setAttribute("name", "zhangsan");
%>
pageContext.setAttribute("name", "lisi", pageContext.REQUEST_SCOPE);
%>
pageContext.setAttribute("name", "wangwu", pageContext.SESSION_SCOPE);
%>
pageContext.setAttribute("name", "xiaohong", pageContext.APPLICATION_SCOPE);
%>
String name = (String) pageContext.getAttribute("name");
%>
findAttribute(String name)
依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不再向后寻找
四大作用域的总结:
page域:当前jsp页面范围
request域:一次请求
session域:一次会话
application域:整个web应用
可以获得其他8大隐式对象
例如: pageContext.getRequest()
pageContext.getSession()
jsp标签(动作)
1)页面包含(动态包含):
2)请求转发:
静态包含与动态包含的区别?
静态包含,底层源码只生成一个Java文件
动态包含,有几个jsp,底层源码就会生成几个Java文件
二者执行效果一样。
pageEncoding="ISO-8859-1"%>
Insert title hereinclude1
EL技术
1.EL 表达式
EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写。
2、从域中取出数据(掌握)
例如:jsp脚本:
EL表达式替代:${requestScope.name}
EL技术重要的就是从四大域中取数据,格式:${EL表达式}
获取pageContext域中的数据:${pageScope.key}
获得request域中的数据:${requestScope.key}
获得session域中的数据:${sessionScope.key}
获得application域中的数据:${applicationScope.key}
EL从四个域中获得某个值${key};
---同样是依次从pageContext域,request域,session域,application域中 获取属性,在某个域中获取后将不在向后寻找
pageEncoding="UTF-8"%>
Insert title herepageContext.setAttribute("aaa", "bbb");
request.setAttribute("name", "张三");
User u = new User();
u.setId(1);
u.setName("lisi");
u.setPwd("123");
session.setAttribute("user", u);
List list = new ArrayList();
User u1 = new User();
u1.setId(1);
u1.setName("wangwu");
u1.setPwd("456");
list.add(u1);
User u2 = new User();
u2.setId(1);
u2.setName("wangwu");
u2.setPwd("456");
list.add(u2);
application.setAttribute("List", list);
%>
${requestScope.name }
${sessionScope.user.id }
${sessionScope.user.name }
${applicationScope.List[0].name }
${pageScope.aaa }
EL的11个内置对象
获得JSP域中的数据:pageScope、requestScope、sessionScope、applicationScope
接收参数:param、paramValues 相当于request.getParameter()、request.getParameterValues()
获取请求头信息:header、headerValues 相当于request.getHeader(name)
获取全局初始化参数:initParam 相当于this.getServletContext().getInitParameter(name)
WEB开发中的cookie:cookie 相当于request.getCookies()--cookie.getName()---cookie.getValue()
pageContext- WEB开发中的pageContext.
pageContext获得其他八大对象
${pageContext.request.contextPath} 获得web应用的名称相当于 这句代码不能实现
EL执行表达式
例如:
${1+1}
${empty user}
${user==null?true:false}
pageEncoding="UTF-8"%>
Insert title here${param.name }
${header["User-Agent"] }
${cookie.goods.name }
${cookie.goods.value }
${pageContext.request.contextPath}
${1+1}
${empty user}
${user==null?true:false}
JSTL技术
JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库Core
标签库
标签库的URI
前缀
Core
http://java.sun.com/jsp/jstl/core
c
I18N
http://java.sun.com/jsp/jstl/fmt
fmt
SQL
http://java.sun.com/jsp/jstl/sql
sql
XML
http://java.sun.com/jsp/jstl/xml
x
Functions
http://java.sun.com/jsp/jstl/functions
fn
JSTL下载与导入
从Apache的网站下载JSTL的JAR包。进入 “http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”网址下载 JSTL的安装包,并解压
使用jsp的taglib指令导入核心标签库
JSTL核心库的常用标签
1)标签
其中test是返回boolean的条件
pageEncoding="UTF-8"%>
Insert title herexxxxxx
yyyyy
${user.name }
${user.pwd }
2)标签
使用方式有两种组合形式:
1)遍历List的值
2)遍历List的值
3)遍历Map的值
4)遍历Map的值
5)遍历Map>的值
entry.key-----User
entry.value------List
pageEncoding="UTF-8"%>
Insert title here//List
List l1 = new ArrayList();
l1.add("zhangsan");
l1.add("李四");
request.setAttribute("l1", l1);
//List
List l2 = new ArrayList();
User u1 = new User();
u1.setId(1);
u1.setName("zhang");
u1.setPwd("123");
l2.add(u1);
User u2 = new User();
u2.setId(2);
u2.setName("lisd");
u2.setPwd("123");
l2.add(u2);
session.setAttribute("l2", l2);
//Map
Map m1 = new HashMap();
m1.put("1", "chengyaojin");
m1.put("2", "houyi");
m1.put("3", "diaochan");
m1.put("4", "yase");
session.setAttribute("m1", m1);
//Map
Map m2 = new HashMap();
User u3 = new User();
u3.setId(1);
u3.setName("ahe");
u3.setPwd("123");
m2.put("1", u3);
User u4 = new User();
u4.setId(2);
u4.setName("dd");
u4.setPwd("123");
m2.put("2", u4);
session.setAttribute("m2", m2);
%>
类型 --%>
${str }
类型 --%>
${user.id }:${user.name }:${user.pwd }
类型 --%>
${entry.key }:${entry.value }
类型 --%>
${entry.key }:${entry.value.id }:${entry.value.name }:${entry.value.pwd }
JavaEE的开发模式
model1模式:
技术组成:jsp+javaBean
model1的弊端:随着业务复杂性 导致jsp页面比较混乱
model2模式
技术组成:jsp+servlet+javaBean
model2的优点:开发中 使用各个技术擅长的方面
servlet:擅长处理java业务代码
jsp:擅长页面的实现
JavaEE的三层架构
服务器开发时 分为三层
web层:与客户端交互
service层:复杂业务处理
dao层:与数据库进行交互
开发实践时 三层架构通过包结构体现
MVC:---- web开发的设计模式
M:Model---模型 javaBean:封装数据
V:View-----视图 jsp:单纯进行页面的显示
C:Controller----控制器 Servelt:获取数据--对数据进行封装--传递数据-- 指派显示的jsp页面
JavaEE三层架构+MVC
web层:收集页面数据,封装数据,传递数据,指定响应jsp页面
service层:逻辑业务代码的编写
dao层:数据库的访问代码的编写