JavaWeb之Servlet day02

映射细节

  • 1:一个Servlet可以有多个
  • 2:可以使用(*)通配符来给Servlet配置资源名称

    方式一:/*使用任何字符都可以访问当前的Servlet
    方式二:使用拓展名配置
            *.abc 只要Servlet的的资源名后缀为abc就可访问
    
  • 3:Servlet的生命周期方法执行顺序

    构造器>init>service>destory
    
    如果初始化操作非常复杂,那么就应该改变初始化的时机
    
    在web.xml文件中添加配置,数字代表执行初始化的优先级,0表示最先执行
    
    <load-on-startup>0</load-on-startup>
    
  • 4:Servlet的名称不能为default,default专门用于访问项目下的静态文件

Servlet3.0的注解配置

  • 问题: 如果有多个Servlet 那么就需要在web.xml文件有大量的配置,造成文件过于臃肿

    • 解决方法:使用注解代替xml文件中的部分配置
    • 注解的使用方式

      第一步:WebServlet("/注解元素")
      第二步:metadata-complete(false)默认为true,删除为false
      
    • WebServlet常用的元素

      String name() default""; 指定Servlet的名称
      String[] value default{};和urlPatterns一样的工功能<url-pattern>
      int loadOnStartup() default 0;设置Servlet的初始化时机
      WebIitParam[] initParams() default{}设置Servlet的初始化参数
      
    • 在Servlet中使用注解的优缺点

      优点:简单直观,便于维护;
      缺点:有以硬编码的形式写入到Servletd代码中
      

Servlet线程的安全问题

  • 线程不按安全的原因:多线程并发的访问同一份资源
  • 解决方法

     1:Servlet实现SingleThreadModel,只允许一个对象进入
     2:不使用成员变量,改为当前对象的局部变量,
    

Http无协议带来的问题

  • http是无协议状态,也就是没有记忆力,每个请求之间无法共享数据

  • 解决方式

    1:参数传递机制,解决请求之间不能共享数据的问题 
    问题:不安全,信息暴露 
    2:Cookie:将用户的信息保留在浏览器中
    3:Session 将数据保留在服务端,给浏览器一个内存地址,根据地址从内存中过去数据
    

Cookie小甜点:是一个客户端技术,将数据放到浏览器中,(请求头中)

  • Cookie的基本使用:

    1:创建cookie的对象
        Cookie(String name,String vlaue)
        Cookie c=new Cookie("username","neld")
    2:强Cookie中的共享数据交给浏览器
        response对象.addCookie(c);
    3:获取Cookie的中共享数据
        Cookie[]cookies=request对象.getCookie()
        for(Cookie c : cookies){
            if(“username”.equals(c.getName())){
                username = c.getValue();
            break;
            }
        }
    4:Cookie中的name和value不支持中文
        URLEncoder.encode(String name,String enc)编码,加密
        URLDecoder.decode(String name,String enc)解码,解密
    5:修改Cookie中的共享数据,
        根据Cookie对象调用setValue(String name)即可设置参数值
        创建一个新的Cookie对象,name和被修改的Cookie的一样
    6:Cookie的生命周期Cookie对象.setMaxAge(int expiry)
        expiry=0删除当前的Cookie对象
        expiry>0的值表示Cookie存活时间的秒数
        expiry<0默认值,浏览器关闭的时候Cookie失效
    7:Cookie的路径和域范围
        Cookie对象.setPath("/");设置为根路径Cookie对象.setDomain(".baidu.com")
    

Cookie的缺陷

    1: 不支持中文;
    2: 共享的数据保存在浏览器,不安全
    3: 数据大小限制最大4kb
    4: 一次只可以保存一个字符串

Session

Session:会话,实现会话跟踪的技术,实际上底层依然使用Cookie来实现,
是服务端的技术,给浏览器一个内存地址,根据地址从内存中获取数据

    1:获取Session
            request对象.getSession()
    2:设置参数
            session对象.setAttribute(String name,Object value);
    3:获取参数
            session对象.getAttribute(String name);
    3:更改参数
            session对象.setAttribute(String name,Object vlaue)
    4:删除参数
            session对象.removeAttribute(参数)
    5:销毁session对象
            session对象.invalidate();
    6:超时管理
            session对象.setMaxInactiveInterval(秒数);
    7:URL重写,在浏览器关闭Cookie的时候使用
            String url = resp.encodeUrl("/session/list");
            在跳转页面改为url;

你可能感兴趣的:(java,Web,servlet)