欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Servlet映射、Servlet中的两个init()方法、Servlet中的config对象介绍

程序员文章站 2022-10-31 08:42:04
1.Servlet映射 Servlet的映射路径: xxxServlet /XXXServlet...

1.Servlet映射

Servlet的映射路径:
        
            xxxServlet
            /XXXServlet


映射路径分为两种:
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配置里面去配置一些参数
        FirstServlet
        org.westos_01.FirstServlet
        初始化参数
        
            初始化的参数名称参数值


Servlet程序中获取ServletConfig对象:  -一个serlvet对应一个ServletConfig对象
    ServletConfig config  = this.getServletConfig() ;
    获取参数的方法:
String value =  config.getInitParam(“参数名称”) ; //通过参数名称获取参数值
    getInitParamNames() :获取当前所有的参数名称-返回的是一个Enumation

4.Servlet中的context对象

ServletContext对象---web工程--网站-只有一个全局的上下文对象:ServletContext
        作用:
1)  配置全局参数-
如何获取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对象过期时间

        
        1

第二种方法:
手动设置JSESSIONID的有效时间(将JSESSIONID作为cookie名称使用服务器发送)
//创建一个Cookie对象
Cookie c = new Cookie("JSESSIONID", session.getId()) ;

//cookie的细节:设置它的有效时间
c.setMaxAge(1*30*24*60*60);

//服务器发送cookie数据到浏览器端
response.addCookie(c);