request.getSession(boolean param)
Param默认为true : 从request中得到session,如果没有就自己创建一个
为false:不会自己创建
常用的方法:
.setMaxInactiveInterval();
.getId();
.isNew();
.setAttribute( key ,value);
Cookie cookie = new Cookie( key, value);//这里new一个Cookie就要对应相应的键值对
....
Response.addCookie(cookie);
常用的方法:
.setMaxAge(age);
.
<a href="${ pageContext.request.contextPtath }/文件名">以后一般用这种链接</a>
requet.getContextPath()//是得到哦工程名,但是在EL表达式中要request.contextpath
<input type=hidden >
|--实现servlet
javax.servlet.Servlet 接口
javax.servlet.GenericServlet 抽象类(跨协议)
java.servlet.http.HttpServlet 抽象类(专门协议)
|--servlet的生命周期
实例化(构造方法)---> 初始化(init)--> 服务。。。--> 销毁
|--
javax.servlet.ServletRquest 接口(跨协议,父)
javax.servlet.ServletResponse 接口 (跨协议,父)
javax.servlet.HttpServletRequesst接口
javax.servlet.HttpServletResponse接口
javax.servlet.ServletConfig (接口) ------getServletContext()
pageContext |
javax.servlet.jsp |
pageContext |
抽象类 |
request |
javax.servlet.http.HttpServletRequest |
HttpServletRequest |
接口 |
response |
javax.servlet.http.HttpServletReponse; |
HttpServletResponse |
接口 |
session |
javax.servlet.http.HttpSession |
HttpSession |
接口 |
application |
javax.servlet |
ServletContext |
接口 |
config |
javax.servlet |
ServletConfig |
接口 |
out |
javax.servlet.jsp |
jspWriter |
抽象类 |
page |
java.lang.Object |
类 |
|
exception |
java.lang.Throwable |
接口 |
主要记住pageContext,request,response,session,application
|-- pageContext (这里是隐式对象,不要跟四大范围中的page混淆了)
setAttribute( param1 , param2 , param3 )param3可以指定是在四大范围中的哪个范围类:如; pageContext.setAttribute("name",name,PageContexxt.REQUEST_SCOPE);
|--response
response设置头信息
:response.setHeader("refresh","10;url");
response 添加头信息:
:response.addHeader("pragma","no-cache");
response.addHeader("cache-control","no-cache");
response.addHeader("expires","0");
让session 失效 ,注销
void |
invalidate() |
|-- application
getServletContext() 方法就是得到application对象,这个对象只允许存在一个
重要的方法:getRealPath();------在上传文件和流的读写的时候很有用,牢记;
getServletConfig()
|-- javax.servlet.http.Cookie
javax.servlet.ServletContext (上下文)
pageContext (javax.servlet.jsp)
request (javax.servlet.http.HttpServlet)
session (javax.servlet.http.session)
application (javax.servlet.ServletContext)
转发:request.getRequestDispatcher("/....j").forward(request , response);
重定向:response.sendRedirect(".....");
区别:1,转发是一次请求,重定向是二次请求
2,转发中带request和response都是同一个,而重定向不是的
3,转发的地址栏不变,重定向的地址栏改变
4,转发只能在同一个服务器中,而重定向可以到不同的服务器中去
想用重定向:
1,想改变地址栏 2,想跨服务器
六,jsp的生命周期
转译 编译
.jsp ---------- > servlet(.java) -------------> . class ------>实例化.初始化.服务....--.销毁
在jsp页面中:
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="on-cache">
<meta http-equiv="expires" content="0">
在servlet类中:
response.addHeader("pragma","no-cache");
response.addHeader("cache-control","no-cache");
response.addHeader("expires","0");
静态包含:<%@include file=" "%>
动态包含:<jsp:include page = " ">
区别:
静态包含在转译的时候就被包含,而且会把被包含的文件的代码全部写到包含的文件中
,有多少个页面包含了那个文件,那个文件就会被转译多少次,所以在work目录下会看到每个静态包含的页面都会生成两个.java文件和两个.jsp文件,因为是在转译的时候被包含
动态包含是在编译的时候被包含,相当于调用被包含的文件,被包含的文件只会被转译一次,不会在work目录下生成多个.java文件