JSP 笔记整理
1、JSP必须依附项目(站点) – ⼀一个站点包括WEB-INF目录(必须大写)
– WEB-INF目录中包括web.xml文件
– JSP文件与WEB-INF同级目录
JSP文件必须包括 – <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8“ %>
– WEB-INF目录中包括web.xml文件
– JSP文件与WEB-INF同级目录
JSP文件必须包括 – <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8“ %>
2、JSP 的六种标签
伪指令标签<%@ %> 会对整个页面产生作用
page <%@ page %>
include <%@ include file="" %>
taglib <%@ taglib prefic="c" %> //如JSTL
注释标签<%-- ---%>
动作标签<jsp:action Name/>
jsp:include
<a href="JSP2.jsp?ID=123"> jsp1
在jsp2中写入 <jsp:include page="JSP3.jsp"> jsp2 在jsp3中写入 request.getparameter("ID") 你要理解你的页面的关联的关系,其实jsp3已经被jps2包含进来了,所以其实jsp3在jsp2内,属于jsp2的子页,
那么当你超链接到jsp2的时候同时也加载了jsp3,子页也能够接收到其他链接传递到父页的参数(其实你可以将jsp3看成jsp2的一部分就可以了)
在同一个页面的请求都是可以获取得到的
jsp:forward
<jsp:forward page="">
<jsp:useBean id="pro" class="beans.product.ProductManager" scope="page" />
表达式标签<%= %> 不能使用分号结尾
声明标签<%! %>
脚本标签<% %>
3、jsp 生命周期:
jspInit() -> _jspService() -> jspDestroy()
转换:将JSP源文件转换成对应的Servlet源文件
编译:编译java源文件为类(class)文件
装载:将类文件加载至内存
创建:创建一个Servlet类实例对象
初始化:调用int() 方法,_jspService();
服务:调用_jspServlet()方法,最终调用Servelet类的service()方法,将请求和响应传递对应的doXXX()方法。
销毁:调用 jspDestroy() 方法,最终调用 Servlet 类的destroy() 方法,销毁 Servlet
4、page伪指令属性
import 属性(相当于java中的import)
session属性 <%@page session="true/false" %>
language
extends
contentType 属性指定页面响应的MIME类型和字符编码
pageEncoding属性用于指定JSP页面字符编码格式
<%@ language="java" contentType =“text/html;charset=UTF-8” pageEncoding="UTF-8" %>
5、JSP转换Servlet
声明标签:转换为Servlet类成员
脚本标签:转换为_jspService()中的代码
HTML代码:转换为_jspService()中的out.write()
表达式标签:转换为_jspService()中的out.write()
<%! %> 声明标签 声明变量、方法,可以先使用后声明。 在Servlet中 转换成 成员变量、方法
<% %> 声明变量、方法,必须先声明再使用。 在Servlet中转换成 局部变量、方法。
<jsp:useBean id="" class="类名" />
6、JSP容器在_jspService()方法中声明并初始化9个内置对象
out
application
session
request
reponse
page
pageContext //封装jsp上下文信息,管理jsp作用域中的对象访问。
config
exception
7、jsp页面共有4种作用域范围
Application
Session
Request 会话作用域 forward() include()
Page 当前页面
8、session.setAttribute(“user”,request.getParameter());<jsp:useBean>
9、静态包含在
在jsp源文件转换成对应的Servlet源文件时将当前JSP文件和其中包含的所有其他文件合并成一个Servlet文件
jsp的include伪指令 实现静态包含 <%@include file=" " %> file属性不能是动态表达式,不能向被包含文件传递参数
10、动态包含 包含和被包含文件各自独立编译.执行。
使用jsp的include动作指令和forward动作指令实现动态包含。
include允许当前页面将客户端请求暂时转交给所包含的对象,一旦对象执行完毕依然返回当前JSP页面。
<jsp:include page=" " flush="true">
include伪指令与include动作指令 |
||||||||||||||||||||||||
|
||||||||||||||||||||||||
11、forward动作指令允许将客户请求转发到另 ⼀一个资源文件,即每当遇到此动作指令就 停止执行当前的JSP,转而执行被转发的指 定资源
语法格式:<jsp:forward page=“地址”/>
12、动态指令的参数传递
-
使用<jsp:param name=“” value=“”/>可以 传递⼀一个或多个参数给动态页面接受用<% request.getParameter(""); %><%=sd %>
-
与include动作指令、forward动作指令⼀一起 使用
13、
Servlet中 <jsp:include page=“a.jsp” /> 相当于 request.getRequestDispatcher(“a.jsp").include(request, response)
Servlet中 <jsp:forward page=“/a.jsp” />相当于 request.getRequestDispatcher(“/a.jsp").forward(request, response)
14、<%@include file=" " %> 静态包含
15、Cookie cookie = new Cookie("userID", "aValue");
将Cookie 放到Http响应中 response.addCookie(cookie);
16、从客户端读取Cookie
调用request.getCookies 得到Cookie对象组成的数组
String cookieName="userID";
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0; i<cookies.length; i++){
Cookie cookie = cookies[i];
if(cookieName.equals(cookie.getName())){
}
}
}
17、request.getSession 获取 HttpSession的对象
HttpSession session = request.getSession();
getAttribute();
setAttribute("","");
removeAttribute();
removeAttribute();
invalidate();
18、String username = request.getParamter("usename");
19、表达式限制调用Java方法。
${pageContext.request.getMothod() } 非法
<%= request.getMothod()%> // 很正常
20、EL内置对象
pageContext 用于访问jsp内置对象
pageScope代表page作用域
21、Sendredirect 是不同的request,send后的语句会继续执行,需要到客户端的往返,地址栏有变化,可以传参数。
22、Forword 后的语句不会继续传给客户端。速度块,服务器内部转换。地址栏没有变化。
23、<jsp:useBean id= "相当于Bean的对象名(cb)" class='Bean的地址">
</jsp:usrBean>
等同于<%@ import="" %>
<% CounterBean cb = new Bean(); %>
<jsp:setProperty name = "cb" property="count" value=" 23"/> property="" 指的是Bean中的属性
相当于<% cb.setCount(Interger.parseInt("23"))%>
<jsp:getProperty name="cb" property="count" />