JSP(java server pages):Java服务器页面,动态网页技术,JavaEE核心规范之一;其根本是一个简化的servlet设计;Serlvt:不擅长于页面展示,【接受前端请求,响应客户端数据】
内容:HTML+java html是静态的;判断静态与动态是看是否可以获取后台动态数据
脚本:辅助程序 JS:辅助浏览器运行【富客户端技术】;shell:辅助linux运行;
1、脚本元素:辅助servlet运行
声明:<%! 成员声明 %>
代码块:<% Java Expression %>
表达式:<%= Java codes in service method %>
JSP1.0版本:功能最强大、最基础、开发最麻烦的版本!
2、JSP指令:不直接产生任何可视化输出,但是会指导JSP如何运行(类似于html中head部分,不做展示,但是指导页面如何展示)
<%@directiveName attribueList%>
页面指令:page
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Date" %
包含指令:include
<%@include file="index.jsp"%>
导入标签库指令:taglib
3、JSP动作(内置标签):动作的语法格式与HTML标签基本一致,
是JSP1.2版本中的产物,对JSP定位发生了变化,认为JSP是一个页面程序,所以出现了很多内置标签取代<%%>的方式。但是由于JSP1.2版本比较仓促,提供的功能有限,多以通常认为是一个过度版本,现在很少使用。【1.0版本可以编程;1.2版本只有标签,没办法展开】
常用标签:setProperty、include、forward
4、内置标签:在jsp页面可以直接使用 9种
前三种范围最广,应用最多
名称 | 类型 |
request | javax.servlet.http.HttpServletRequest:与 Servlet中 request对象没有任何区别,是同一个对象: |
sessio | javax.servlet.http.HttpSession:与 Servlet中 session对象没有任何区别 |
application | javax.servlet.ServletContext:表示的一个页面的范围,在 Servlet中没有与之对应的对象 |
pageContext | javax.servlet.jsp.PageContext:表示的一个页面的范围(相当于一个对象),在 Servlet中没有与之对应的对象;更多用在编程代码上 |
page | javax.servlet.jsp.HttpJspPage:表示页面范围(只是页面),名词性概念;更多用在标签设置上 |
response | javax.servlet.http.HttpServletResponse:与 Servlet中response对象没有任何区别 |
exception | java.lang.Throwable:只在错误处理页面种使用 表示异常对象 |
out | javax.servlet.jsp.JspWriter:输出流对象 |
config | javax.servlet.ServletConfig:表示ServletConfig对象 |
5、JSP2.0版本中,引入EL表达式+JSTL标签
EL表达式:只能从servlet中获取数据;是一种表达式语言;能够很方便的读取并展示JSP视图页面需要的数据,优势是提取数据而不是操作数据;是JSP2.0规范,是JavaEE核心规范之一,
早期专门服务与JSTL,后来因为EL非常简单、实用,在JSP2.0中,纳入JavaEE核心规范
语法:${.....}
类型:和java中的类型相对应
运算符:和其他语言运算符一样
内置对象:
PageScope:能够仅能够从配置范围获取数据,和PageContext不一样,PageContext可以设置数据; |
requestScope:仅能够从request范围获取数据,和request对象不一样; |
sessionScope:仅能够从session范围获取数据,和session对象不一样; |
applicationScope:仅能够从application范围获取数据,和application对象不一样; |
Param:request.getParamter(name); |
paramValues:request.getParamterValues(name); |
initParam:ServletContext.getInitparameter(String name) |
${pageScope.stu}<br>:从page范围获取stu数据
${requestScope.stu}<br>:从request范围获取stu数据
${sessionScope.stu}<br>:从session范围获取stu数据
${applicationScope.stu}<br>:从application范围获取stu数据
${stu}:从page范围开始获取stu数据,如果没有获取到,从request范围获取stu数据.......
${param.name}<!--地址栏输入?name=zxs&&hobby=sing&&hobby=sport,可以获取name.bobby数据-->
${paramValues.hobby[0]}
${paramValues.hobby[1]}
JSTL标签库:
表达式标签:现在基本不使用
条件标签:
<c:if >: 使用5% ;if标签没有elseif一说,需要重新定义if标签
<c:choose> <c:when> <c:otherwise> 复合条件标签,<c:choose>标签体内可以包含至少一个<c:when>标签和最多一个<c:otherwise>标签,
<c:when>: 使用5%
<c:otherwise>: 可以解决没有else if的问题
迭代标签:
<c:forEach>:使用90%,应用场景多;原理为java中的for each循环,遍历集合对象
6、MVC架构:是一种软件开发模式,它是由控制器、视图、模型组成;它只是一种开发模式,并不是规范也不是标准,可以遵循,也可以不遵循;设计模式:23种,不是技术,只是编程技巧;
一般web开发都是遵循MVC三层架构,使程序的层次感更明显。
控制器:controller接收请求 处理数据 响应数据 servlet
视图:view 展现数据 html js css jsp
模型:model 表示数据
Dao:dao层,操作数据库数据
Service:业务层,处理业务模型数据
Model:模型层,存放数据,Pojo、vo、po、bo.....
采用MVC架构开发,目的是便于程序开发;若不满足需求,不要拘泥于MVC架构,大胆的进行扩充或删减。原则是基于MVC架构开发,可以进行动态调整
6、项目开发流程:(应用版本)
基于MVC架构的项目开发,员工管理系统,下次整理发布。
7、SerVlet过滤器Filter:过滤器或者拦截器,部署在web应用中的软件,属于JavaEE的技术体系之一;Filter可以控制被客户端访问的资源的执行;
生命周期:服务器启动,创建对象(单例)并且调用init方法 --- 服务器关闭,调用destory方法,释放内存空间;严格来讲,比servlet生命周期要长。
过滤链FilterChain:由多个过滤器组成的一条执行的链,【过滤器谁在的servlet-mapping在前,谁就在过滤链的前边】
//释放请求:释放请求到下一个过滤器,如果是最后一个过滤器,释放请求到达目标资源
chain.doFilter(req,resp);
应用场景:
1、字符集编码统一;req.setCharacterEncoding("UTF-8");
2、登录身份验证;
8、监听器:主要用于监听共享域对象的创建与销毁时间,以及这些共享域对象中属性变更的事件
事件驱动模型机制:
三要素:事件源、时间、时间处理程序
监听对象:ServletContext:整个应用只存在一个
HttpSession:针对每一个对话
ServletRequest:针对每一个客户请求
监听内容(事件):创建、销毁、属性改变事件
监听作用:可以在事件发生前、发生后进行一些处理
应用场景:一般可以用来统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息等;一般用的比较少,主要是因为监听器是服务于服务端,与用户没有直接关系!
9、Servlet 3.0:与之前servlet 2.4 2.5版本本质相同,只是换了编程方式(注解编程)
注解编程:spring框架2.0版本引入了注解编程,广受欢迎,后来很多技术和框架都逐渐增加了注解编程。
一般web.xml、注解都很常用,使用注解编程的方式时web.xml已经不需要书写了。