Servlet-复习05

cookie和session区别

有个博主写的非常好

点击跳转

cookie的使用:

1.创建cookie的对象并设置key赋值value,可以通过cookie.setMaxAge();设置存活时间,浏览器关闭也会存活

2.respond.addCookie(cookie),发送给浏览器,request.getCookies(),获取cookie数组,得到cookie的value值。

3.浏览器再次访问服务器,会带着cookie数据

4.cookie数据保存在浏览器中。

5,cookie获取数据时,只能获取到当前目录和其上级目录下发的cookie,下发时也只能从上级目录往下级目录发

session的使用:

1.request.getSession();获取session对象

2.request.setAttribute();绑定数据

3.jsp页面通过el表达式,sessionScope.key,就能找到session的value

4.session对象存活在服务器中,比cookie更安全

过滤器

使用步骤:

1,创建FilterServlet类

2,写web.xml写拦截请求,

<filter>
        <filter-name>a</filter-name>
        <filter-class>com.buka.edu.filter.FilterServlet</filter-class>

    </filter>
    <filter-mapping>
        <filter-name>a</filter-name>
        <url-pattern>/user/*</url-pattern>
    </filter-mapping>

3. <filter-name>'' "</fliter-name>,""中间的字母顺序或者数字顺序,代表拦截器的先后,<url-pattern>/user/*</url-pattern>表示带user/的请求都会被拦截

4.具体执行过程代码如下:

public class FilterServlet implements Filter {
    public void destroy() {//doFilter执行后最后执行
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request=(HttpServletRequest)req;
        HttpServletResponse response=(HttpServletResponse)resp;
               User user= (User) request.getSession().getAttribute("user");//如果获取了user说明已经登陆
            if(user!=null)
            {
                chain.doFilter(req, resp);//放行
            }
            else
            {
               request.setAttribute("me","请登录");
                request.getRequestDispatcher("/index.jsp").forward(request,response);//转发到登录页面
            }

    }

    public void init(FilterConfig config) throws ServletException {//过滤器最先执行
        System.out.println("正在扫描是否登录");

    }

}

 5.应用场景:

当判断一个系统是否登录时,可以使用。

ServletContext()的使用

1,创建对象

ServletConText servletcontext=getServletContext();

2,绑定数据

servletContext.setAttribute(":root",servletContext.getContextPath());//绑定了项目的相对路径

3.如何设置它的优先级

在web.xml中,主要看它在哪个servlet里了,举个例子:

 <servlet>
        <servlet-name>search</servlet-name>
        <servlet-class>com.buka.edu.servlet.SearchOneServlet</servlet-class>
        <load-on-startup>1</load-on-startup>//设置优先级
    </servlet>

Servlet数据共享

1,pagecontext简称page范围,其共享范围仅限一个jsp页面,相当与内部的局部变量
2.request范围:是一次请求过程的范围,如果重定向后绑定的数据会消失
3,session范围:是一个用户会话的过程范围,浏览器不关闭与服务器的多次请求范围
4.application(==servletcontext)范围,是最大的共享范围,一个web应用的全体servlet,jsp共享的范围,适合保存公共静态数据)
使用建议:
1.数据共享范围越小越好,常用的是request
2,与当前用户有关的数据,共享到session,比如用户的登陆状态
3。全局数据,可以共享到application
el表达式,会从小到大的顺序依次拿绑定的数据,拿不到就换下一个。

监听器

作用:本身也是servlet,服务器启动最开始执行的,可以监听多种servlet对象,比如说servletcontext,request,session.

1,配置xml

 <listener>
        <listener-class>具体类</listener-class>
    </listener>

2.servletlisten代码如下

public class ListenDemo implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext=sce.getServletContext();//这个对象也可以获取ServletContext()
        servletContext.setAttribute("root",servletContext.getContextPath());
        System.out.println(servletContext.getAttribute("root"));

    }

    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("我后执行");

    }

 3.应用场景:

当项目最开始要使用servlet上下文时,可以把他放到监听器中创建

如何使用一个servlet实现多个请求

1.代码如下:

 StringBuffer url= request.getRequestURL();//获取链接
            String newurl=url.substring(url.lastIndexOf("/"));//截取最后的请求
            if(newurl.equals("/getAll"))//符合哪个,就走哪个
            {
                
            }
            else if()
            {
                
            }

 2.好处:xml文件只写一个请求就ok

Servlet的注解

@WebServlet("/getAll")
@WebServlet(urlPatterns = {"/getAll","/update"})//拦截多个请求
@WebFilter
@WebServlet("/hello",name="login")
@WebFilter(value = {"/user/*"},servletNames = "login")//过滤名字时login的servlet
@WebListener
好处:不用写麻烦的xml了

 

Servlet 初始化数据

1.xml文件配置如下

全局变量
<context-param>
    <param-name>abc</param-name>
    <param-value>123</param-value>
</context-param>
<servlet>
   <servlet-name>hello</servlet-name>
    <servlet-class>com.buka.edu.servlet.HelloServlet</servlet-class>
    <init-param>//servlet初始化可以得到的数据
        <param-name>asd</param-name>
        <param-value>123456</param-value>
    </init-param>
</servlet>

 2.获取数据代码

在Helloservlet类中创建init方法
public void init()
{
    System.out.println( this.getInitParameter("asd"));//this代表调用的servlet对象
    System.out.println(getServletContext().getInitParameter("abc"));//通过上下文获取全局变量
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值