1.Servlet映射
Servlet的映射路径:
<servlet-mapping>
<servlet-name>xxxServlet</servet-name>
<url-pattern>/XXXServlet</url-pattern>
</servlet-mapping>
映射路径分为两种:
1) 精确匹配:以斜杠开头 /hello /hello/westos..
优先级要高于模糊匹配.
2) 模糊匹配:
具体分为两种:
a:/* /任意路径
b:*.(action .do .html) :以*号开头 ,任意路径后面必须有指定的后缀结尾
/* 它的优先级要高于带指定的后缀的优先级
缺省路径:
在tomcat server.xml文件中有一个DefaultServlet这个名词它对应的url-pattern :/
2.Servlet中的两个init()方法
init(ServletConfig config) :带参数init是我们Serlvet生命周期中重要的初始化方法,serlvettomcat-init带参数的方法一定会被tomcat执行
不带参数init()方式才是开发者真正需要自己去完成的逻辑代码!
3.Servlet中的config对象
ServletConfig对象:配置对象-在某个Servlet配置里面去配置一些参数
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org.westos_01.FirstServlet</servlet-class>
初始化参数
<init-paran>
<param-name>初始化的参数名称</param-name>
<param-value>参数值</param-value>
</init-param>
Servlet程序中获取ServletConfig对象: -一个serlvet对应一个ServletConfig对象
ServletConfig config = this.getServletConfig() ;
获取参数的方法:
String value = config.getInitParam(“参数名称”) ; //通过参数名称获取参数值
getInitParamNames() :获取当前所有的参数名称-返回的是一个Enumation
4.Servlet中的context对象
ServletContext对象---web工程--网站-只有一个全局的上下文对象:ServletContext
作用:
1) 配置全局参数-<config-param></config-param>
如何获取ServletContext对象
在GenericSerlvet-public SerlvetContextgetServletContext(){
context = this.getServletConfig().getServletcontext() ;
return context ;
}
简写方式:
ServletContext context = this.getServletContext();
2) 作用2:获取上下文路径
在重定向中应用最广
response.sendRedirect(“/web工程名称/adv.html”) ; //硬路径
String path = context.getContextPath() ; //当前web工程的项目名称:/web工程名称
response.sendRedirect(request.getContextPath+“/adv.html”)
3) 作为域对象:
a) HttpServletRequest:请求对象
b) ServletContext:上下文对象
c) HttpSession:session对象
setAttribute(“参数名称”,参数值(Object obj)’);将参数保存在域对象中
getAttribute(“name”):从域对象获取参数,通过参数名称获取参数值
5.请求转发和重定向
1) 重定向:
a:重定向(浏览器行为)跳转页面的时候,地址栏发生变化
b:一次重定向有2个请求对象
c:重定向是可以跳转到外部工程的资源文件中
d:request域对象可以获取到参数数据
/*
response.sendRedirect(request.getContextPath()+"/项目下的其他资源");
*/
2) 请求转发:
a:请求转发(服务器行为)跳转页面的时候,地址栏不发生变化
b:请求转发,只有1次请求
c:
使用请求转发,它只能转发到当前项目下的资源文件中,不能转发到外部工程里面
d:使用rquest域对象获取不到参数数据
请求转发的简写方式:
/** 请求转发的简化方式
*/
request.getRequestDispatcher("/hello.html").forward(request, response);
6.cookie技术
Cookie技术:
数据保存浏览器端的
使用cookie技术获取参数数据:
1) 创建Cookie对象,
public Cookie(java.lang.String name, java.lang.String value)
参数1:表示cookie名称
参数2:表示cookie名称对应的内容
2) 发送cookie数据(服务器发送cookie数据到浏览器中)
set-cookie:请求头: 携带内容(最基本的方式)
简写方式:服务器发送Cookie
void addCookie(Cookie cookie)
3) 服务器会携带cookie到浏览器(自发:浏览器自发的将cookie保存起来),方便下一次服务器传递数据
4) 服务器获取cookie数据
原理:获取的请求头:cookie名称获取内容(最基本的)
简写方式:
Cookie[] getCookies()
cookie技术的一些细节
1) 细节1:当前浏览器中发现中文cookie 数据,获取cooike名称对应的内容,需要进行解密(同时,对中文进行加密)
使用的是两个工具类:URLEncorder类和URLDecorder类
2) 细节2:设置cookie的有效时间
public void setMaxAge(int expiry) :
参数分为三种情况:
1) 如果参数为正整数,表示多少秒之后,cookie数据失效了(不存在了)
2) 如果参数是一个负整数,一般情况指定-1,关闭浏览器,cookie就不存在了
3) 如果参数是一个0,那么指定同名的cookie的名称,然后该cookie数据会被删除掉!
4) 细节3:cookie的有效路径
public void setPath(java.lang.String uri):当前cookie的数据是在有效路径下才会起作用,否则,获取不到cookie数据
一般情况:一个站点可以存储多少个cookie数据,不超过300个,可能用到20个作用
7.session技术
本身在HttpServletRequest对象中就存储在一个方法:HttpSession getSession():创建或者获取session对象
Session原理
1)服务器解析doGet(),创建了Session对象,会给session分配一个唯一的JESSIONID(地址值)
2)服务器会将JESEESIONID发送到浏览器端,
3)在浏览器端会将JESEESIONID作为cookie存储
4)服务器端通request.getSession()对象,获取的是JESSIONID这个session的内存地址(唯一标识的ID)
session对象始终是在服务器端存储,当我们服务器挂掉了或者启动失败了(500),session对象就会从服务器内存资源中消失掉!
可以作为域对象,
保存数据:setAttribute(“数据名称”,”数据的内容”)
获取数据:getAttribute(“数据名称”) ;
session对象的一些操作
创建Session对象
request.getSession(ture);
获取Session对象
request.getSession(false);
设置Session对象的值
request.setAttribute("name","value");
获取Session对象的值
String value=(String)request.getAttribute("name");
Session对象的销毁
void invalidate():直接将sesison对象删除掉
session数据的有效时间
第一种修改方法:
在web.xml文件中配置
默认情况下:session的有效时间30分钟
设置session对象过期时间
<session-config>
<!-- 该参数值指的是分钟 -->
<session-timeout>1</session-timeout>
</session-config>
第二种方法:
手动设置JSESSIONID的有效时间(将JSESSIONID作为cookie名称使用服务器发送)
//创建一个Cookie对象
Cookie c = new Cookie("JSESSIONID", session.getId()) ;
//cookie的细节:设置它的有效时间
c.setMaxAge(1*30*24*60*60);
//服务器发送cookie数据到浏览器端
response.addCookie(c);