jee第三周

1.P132例子

long before = System.currentTimeMillis();

保存filter类作用开始时间,用来显示filter类作用范围

long after = System.currentTimeMillis();

保存filter类作用结束时间,用来显示filter类作用范围

ServletContext context = this.config.getServletContext();

获取ServletContext对象,用于记录日志

HttpServletRequest hrequest = (HttpServletRequest)request;

将ServletRequest请求强制转换成HttpServletRequest请求

System.out.println("Filter已经截获到用户的请求的地址: " +hrequest.getServletPath());

通过.getServletPath()方法返回一个URL对象,得到用户请求的地址,fliler类只是在用户发送请求后将用户请求的地址显示出来

filter用户授权例子

LoginFilter.java

public class LoginFilter implements Filter { 

    private String permitUrls[] = null; 

    private String gotoUrl = null; 

    public void destroy() { 

        // TODO Auto-generated method stub 

        permitUrls = null; 

        gotoUrl = null; 

    } 

    public void doFilter(ServletRequest request, ServletResponse response, 

            FilterChain chain) throws IOException, ServletException { 

        // TODO Auto-generated method stub 

        HttpServletRequest res=(HttpServletRequest) request; 

        HttpServletResponse resp=(HttpServletResponse)response; 

        if(!isPermitUrl(request)){ 

            if(filterCurrUrl(request)){ 

                System.out.println("--->请登录"); 

                resp.sendRedirect(res.getContextPath()+gotoUrl); 

                return; 

            } 

        } 

        System.out.println("--->允许访问"); 

        chain.doFilter(request, response); 

    } 

    public boolean filterCurrUrl(ServletRequest request){ 

        boolean filter=false; 

        HttpServletRequest res=(HttpServletRequest) request; 

        User user =(User) res.getSession().getAttribute("user"); 

        if(null==user) 

            filter=true; 

        return filter;  

    }       

    public boolean isPermitUrl(ServletRequest request) { 

        boolean isPermit = false; 

        String currentUrl = currentUrl(request); 

        if (permitUrls != null && permitUrls.length > 0) { 

            for (int i = 0; i < permitUrls.length; i++) { 

                if (permitUrls[i].equals(currentUrl)) { 

                    isPermit = true; 

                    break; 

                } 

            } 

        } 

        return isPermit; 

    }        

    //请求地址 

    public String currentUrl(ServletRequest request) {   

        HttpServletRequest res = (HttpServletRequest) request; 

        String task = request.getParameter("task"); 

        String path = res.getContextPath(); 

        String uri = res.getRequestURI(); 

        if (task != null) {// uri格式 xx/ser 

            uri = uri.substring(path.length(), uri.length()) + "?" + "task="

                    + task; 

        } else { 

            uri = uri.substring(path.length(), uri.length()); 

        } 

        System.out.println("当前请求地址:" + uri); 

        return uri; 

    } 

    public void init(FilterConfig filterConfig) throws ServletException { 

        // TODO Auto-generated method stub 

        String permitUrls = filterConfig.getInitParameter("permitUrls"); 

        String gotoUrl = filterConfig.getInitParameter("gotoUrl"); 

  

        this.gotoUrl = gotoUrl; 

  

        if (permitUrls != null && permitUrls.length() > 0) { 

            this.permitUrls = permitUrls.split(","); 

        } 

    } 

Web.xml

<filter> 

    <filter-name>loginFilter</filter-name> 

    <filter-class>filter.LoginFilter</filter-class> 

  

    <init-param> 

        <param-name>ignore</param-name> 

        <param-value>false</param-value> 

    </init-param> 

    <init-param> 

        <param-name>permitUrls</param-name> 

        <param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value> 

    </init-param> 

    <init-param> 

        <param-name>gotoUrl</param-name> 

        <param-value>/login.jsp</param-value> 

    </init-param> 

</filter> 

<filter-mapping> 

    <filter-name>loginFilter</filter-name> 

    <url-pattern>/*</url-pattern> 

</filter-mapping>

引用地址:http://www.jb51.net/article/38730.htm

2.session

定义:具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到关闭浏览器所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。

用途:Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

session in JEE:

Java Servlet API引入session 机制来跟踪客户的状态,session指的是在一段时间内,单个客户和web服务器之间一连串的交互过程,在一个session中,一个客户可能会多次请求同一个网页,也可能请求多个不同服务器资源,例如:在一个邮件系统应用中,从一个客户登录到邮件系统,到写信,收信和发信等,到最后退出邮件系统,整个过程为一个session;再例如:大家在网上购物的时候,从购物到最后的付款,整个过程也是一个session 。

 session对像是jsp中的内置对象,可以直接使用;在Servlet中使用session时,必须先创建出该对象,Servlet中创建session的方法:

HttpSession session=request.getSession();或   HttpSession session=request.getSession(boolean value);

 在服务器上,通过session ID来区分每一个请求服务器的用户,用户只要一连接到服务器,服务器就会为之分配一个唯一的不会重复的session ID,session ID由服务器统一管理,人为不能控制

 session中的主要方法:

         session.getId();//获取session ID,长度为32位

session.isNew();//判断是否是新建立的session 

session.getCreationTime();//获取session创建的时间   
        session.getLastAccessedTime();//获取用户最后操作时间

sesson.setAttribute(String key,Object value);//将对象存到session中    
        session.getAttribute(String key);//获取session中存的Object对象   

session.removeAttribute(String key);//将键值为key的对象从session中删除
        session的销毁

         web容器关闭或重启,session会死亡
        调用session.invalidate();方法,强制session死亡
        前后两次请求超过了session指定的生命周期时间,默认为30分钟,我们可以通过在web.xml文件中进行如下配置:
Xml代码 
<session-config>  
      <session-timeout>5</session-timeout>  
</session-config>  

 也可以调用session.setMaxInactiveInterval(int intelval);方法来设置,单位为秒

转载地址: https://blog.csdn.net/u013510614/article/details/50480993

session与cookie的区别:1.Session将信息保存在服务器上,而Cookie保存在客户端上。2.Session比Cookie更安全,Session比Cookie更占资源。3.session使用cookie的机制,如果cookie被禁用,那么session也无法使用,因为session ID是以cookie的形式保存在客户端的内存当中

3.JEETT 

异步例子区别:

1.注释时asyncSupported=true,显式指定开启异步调用

2.request.startAsync()导致请求被异步处理; 在服务方法结束时,响应不会发送到客户端。

3.acontext.start(new Runnable() {…​}) 从容器中获取新线程。

4.run()内部类的方法内的代码在新线程中执行。内部类可以访问异步上下文以从请求读取参数并写入响应。调用complete()异步上下文的 方法将提交响应并将其发送给客户端。

运行效果不同之处:使用异步处理后的例子在大负载的情况下响应速度变快,服务器吞吐量变大

原文地址:https://www.cnblogs.com/liyu-sky/p/8647681.html