Javaweb-05之session+MVC

session:

概念:服务器会话端技术,在一次会话的多次请求间共享数据,将数据保存在服务器的对象中,httpsession

快速入门:

获取session对象

HttpSession session = request.getSession();

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/sessiondemo1")
public class Sessiondemo1 extends HttpServlet {
   
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用session来共享数据
       
//1获取session
       
HttpSession session = request.getSession();
       
//2存储数据
       
session.setAttribute("msg","hello zhangxiansheng");


    }

   
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
    }
}

package com.zhang.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/sessiondemo2")
public class Sessiondemo2 extends HttpServlet {
   
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用session来共享数据
       
//1获取session
       
HttpSession session = request.getSession();
       
//2获取数据
       
Object msg=session.getAttribute("msg");
       
System.out.println(msg);
       

    }

   
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
    }

session的原理:

session的实现是依赖于cookie的

session的细节:

  1. 当客户端关闭后,服务器不关闭,两次获取session是否是同一个?

默认情况下,不是,

如果需要相同,则可以创建cookie,键为jsession,设置最大存活时间,让cookie持久化保存,

setMaxAge(60*60)时间为一小时

response。addcookie(c);

  1. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

不是同一个,但是要确保数据不丢失,tomcat自动完成一下工作

session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上

session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。

  1. session什么时候销毁?
  1. 服务器关闭
  2. session对象调用invalidate
  3. session默认失效时间30分钟,这个时间可以更改,

session的特点:

  1. session存储数据在服务器端,cookie在客户端
  2. session没有数据大小限制,cookie有
  3. session数据安全,cookie相对于不安全
  4. --------------------------------------------------------------------------------------------

MVC:

今日内容,

  1. Filter:过滤器
  2. Listener:监听器(加上servlet是web的三大组件)

#Filter;过滤器

有两种方式配置:

第一种:

 web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦下来,完成一些特殊的工能。

过滤器的作用:一般用于完成通用的操作,如:登录验证,统一编码处理,敏感字符过滤。。。

快速入门:

        定义一个类,实现接口Filter

        复写方法

        配置拦截路径:

web.xml和servlet

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
   
System.out.println("filterdemo1被执行了");
   
//放行
   
filterChain.doFilter(servletRequest,servletResponse);
}

过滤器细节:

  1. web.xml配置,可以在这里配置一些要拦截的一些信息。也可以直接在注解中配置。

<filter>
    <
filter-name>demo1</filter-name>
    <
filter-class>cn.itcast.filter.Filterdemo2</filter-class>
</
filter>
    <
filter-mapping>
        <
filter-name>demo1</filter-name>
        <
url-pattern>/*</url-pattern>
    </
filter-mapping>
</
web-app>

  1. 过滤器执行流程

执行过滤器

执行放行后的资源

回来执行过滤器放行代码下边的代码

第二种;注解配置

@WebFilter("/*")
public class Filterdemo4 implements Filter {

//每一次请求被拦截资源时,会执行
   
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
       
//request对象请求消息增强
       
System.out.println("dofiter...");
       
//放行,交给下一个过滤器,或者servlet处理
       
chain.doFilter(req,resp);

    }

//在服务器启动后,会创建filter对象,然后调用init方法
   
public void init(FilterConfig config) throws ServletException {
       
System.out.println("init....");
    }
   
//在服务器关闭后被销毁,如果正常关闭会执行destory方法
   
public void destroy() {
       
System.out.println("destory...");
    }

----------------------------------------------

监听器:

listener监听器

监听器是servlet规范中定义的一种特殊类,用于监听ServletContext(application)、HttpSession(session)和ServletRequest(request)等域对象的创建与销毁事件,以及监听这些与对象属性发生修改的事件。可以在事件发生之前,之后做一些处理。

        事件监听机制:

        事件:一件事情

        事件源:事情发生的地方

        监听器:一个对象

        祖册监听:将事件,事件源,监听器绑定到一起,当事件源上发生某个事件之后,执行监听器代码

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class firstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("listener init.........");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("listener destory..........");
    }
}

注册监听器:

<listener>
	<listener-class>firstListener</listener-class>
</listener>

定义一个类,继承接口,

实现方法

配置监听器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值