一、JSP的快速入门
- 问题:servlet和html在web开发中的优缺点?
html:很方便书写网页 所写的内容都是静态的
servlet:可以动态的生成网页 缺点是书写网页内容很麻烦 - 真正在企业开发中流程是怎样的?
美工去写一个静态html页面-------->程序员------->将页面动态化(将html中的每一句使用response.getWriter().write()
由于这种方式非常的麻烦所有再借鉴PHP和ASP的技术之后就有了JSP技术
jsp:就像是html 能在html标签中嵌套java代码 - jsp内部原理:
jsp源码-------->翻译成响应的servlet------>编译(会在第一次访问该页面时编译)------->运行 - jsp嵌入脚本的语法:
- 脚本片段:<% java代码 %> ------->被翻译成servlet中service方法中(通常指在下面这个方法的方法体中)
- 全局脚本:<%! java代码 %> ------->被翻译成全局的属性或方法
- 输出脚本:<%=变量/表达式%> ------>被翻译成servlet中的out.print(变量);
- jsp的注释:
- java注释:// /**/ /***/ :被翻译后的servlet可见
- html注释:<!-- -->:html源码可见
- jsp注释:<%-- --%> 可见范围:jsp源码中
二、jsp的指令
jsp的指令有三个:page include taglib
语法:<%@ 指令 属性="属性值" ...%>
- page指令
作用:是设置整个jsp的属性
属性: - language:jsp脚本使用哪种语言 默认就是java
- import:就是在翻译后的servlet中到导入
- pageEncoding:jsp页面存储的编码方式
- contentType:指导浏览器编码方式 设置response的编码方式
注意:pageEncoding设置之后 不仅可以知道jsp本身存储的编码 还能实现contentType的功能 - extends:翻译成的servlet继承的类
- info:jsp的页面显示信息 没有实质的作用 是给程序员阅读方便
- errorPage:jsp页面上如果出现错误 自动跳转的页面 只能配置500的错误
- isErrorPage:告知我这个页面是一个错误友好提示页面
注意:如果404友好提示页面怎么配 在web.xml中配置
如果500的错误 jsp页面配置了errorPage 同时web.xml也配置错误页面 那么errorPage的优先级高 - session:jsp页面脚本中是否可以直接使用session
- isELIgnored:jsp页面中是允许使用el表达式 false是允许使用 true就是不允许使用
- autoFlush:out缓冲区的自动刷出
- buffer:out缓冲区的大小
- include指令
- 语法:<%@ include file=""%>
<body>
<%@ include file="/include/1.jsp" %>
这是内容部分
<%@ include file="/include/3.jsp" %>
</body>
这种方式是静态包含,是2个页面先进行拼接在转到Servlet处理输出
- taglib指令:作用引入标签
语法:<%@ taglib uri="" prefix=""%>
uri:引入哪个标签库
prefix:标签命令的前缀<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>//
引入java标准标签库
- Jsp的内置对象(九大内置对象):
request response session application config page pageContext out exception - request:HttpServletRequest
- response:HttpServletResponse
- session:HttpSession
- application:ServletContext
- config:ServletConfig
- page:Servlet
- pageContext:PageContext,域对象 page域
- page域的作用范围:就在本jsp页面
- page域<--request域<----session域<-----application域
- 域对象统一的方法:setAttribute(name,value) getAttribute(name) removeAttribute(name)
- page域特殊的方法
pageContext.setAttribute(name,value,(scope是常量));
pageContext.getAttribute(name,scope);
pageContext.findAttribute();
作用:从四个域中寻找数据 按照从小到大的顺序寻找 page<request<session<application
scope的常量有:
pageContext.REQUEST_SCOPE:request域
pageContext.PAGE_SCOPE:page域
pageContext.SESSION_SCOPE:session域
pageContext.APPLICATION_SCOPE:application域<%pageContext.setAttribute("name", "zhangsan", pageContext.APPLICATION_SCOPE); %>
<%=pageContext.getAttribute("name", pageContext.APPLICATION_SCOPE)%>
- pageContext可以获取其他八大内置对象
pageContext.getRequest()
pageContext.getSession()
作用:可以用作传输传递,如果一个方法要传递多个内置对象,就可以直接传递pageContext这一个参数就可以了。
- out:JspWriter
作用:向页面输出内容 - JspWriter out:这个是OUT对象的类
- PrintWriter writer 通过response.getWriter获取的
都是Writer的子类 但是JspWriter的内部实现其实就是PrintWriter - out和response.getWriter().write()的区别?
他们的区别是out本身带有一个缓存区,默认的大小为8kb,在Jsp页面直接用Out写数据是写在缓存区当中的,存满之后才会用response写出,而使用response.getWriter().write()写数据就是直接写出,没有缓存区 - exception:Throwable
- jsp的6个标签(动作)
- jsp包含:<jsp:include page="/include2.jsp"></jsp:include>
jsp包含(动态包含) -----就相当与 request.getRequestDispatcher().include()
内部原理:将各个jsp翻译成servlet 然后在运行的时候在动态包含进去 - jsp转发:<jsp:forward page=""> -------就相当于request.getRequestDispatcher().forward()
- jsp参数:<jsp:param>
转发页面:<jsp:forward page="/Test1.jsp">
<jsp:param value="[email protected]" name="e-mail"/>
</jsp:forward>
接收页面:
<%=request.getParameter("e-mail") %>
时间: 2024-10-15 23:49:02