• 14-Java-Servlet知识梳理


    Servlet

       1.大概了解:

          Servlet其实就是运行在Tomcat/服务器上的Java程序。它一般用来处理客户端的请求以及负责客户端的响应,默认情况下是单例模式,

        每次用户访问都是开启一个新的线程,调用services方法处理

      2.使用步骤:

        第一步:引入Servlet-api.jar

        第二步:编写一个java类,继承HttpServlet

        第三步:重写service(request,response)方法

        第四步:在service方法中处理请求,以及进行响应

      3.Servlet配置到web.xml

          为了让Tomcat帮我们创建对象,并映射地址,当地址匹配,由Tomcat调用这个services方法进行处理

     1 <!-- 将Servlet配置到web.xml  并起别名 -->>
     2   <servlet>
     3           <servlet-name>任意标识符</servlet-name>
     4           <servlet-class>类的全称(类名+包名)</servlet-class>
     5   </servlet>
     6   
     7   <!-- 根据别名映射网址 -->
     8   <servlet-mapping>
     9           <servlet-name>与第一步标识保持一致</servlet-name>
    10           <!-- 访问Servlet规则
    11                   http://ip地址:端口号/项目名称/项目地址
    12                   例如:此代码中我通过http://localhost:8080/garage/login便能找到garageLoginServlet
    13                   此处除了 /地址
    14                   还有    /            拦截没有后缀的请求
    15                          /*            拦截所有请求
    16                          *.do        拦截所有以.do结尾的请求
    17            -->
    18           <url-pattern>/地址</url-pattern>
    19   </servlet-mapping>

       4.继承HttpServlet类的java代码(含常用方法解释)

     1 package garagetool;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 import java.util.Map;
     6 
     7 import javax.servlet.ServletException;
     8 import javax.servlet.http.HttpServlet;
     9 import javax.servlet.http.HttpServletRequest;
    10 import javax.servlet.http.HttpServletResponse;
    11 
    12 public class garageLoginservlet extends HttpServlet{
    13     @Override
    14     //两个参数,request负责客户端的请求,response负责客户端的响应
    15     protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    16         //在做登录或者注册的时候都需要获取页面的数据,然后根据数据与数据库进行匹配,如果存在,则登录成功,反之失败
    17         
    18         //请求接收
    19         request.setCharacterEncoding("utf-8");//设置请求信息字符集,当接收请求数据乱码时使用(只对消息体起作用,对url没作用)或是get请求不好使时
    20         String username  = request.getParameter("username");//获取请求参数值22         //Map ....  = request.getParameterMap();//获取请求参数值,封装到map集合中,通过map.get(key)得到
    23         //request.setAttribute("key",value);//将数据设置到request作用域中
    24         //request.getRequestDispatcher("转发页面。例如:login.jsp").forward(request,response);//将请求信息转发到页面
    25         //HttpSession session = request.getSession();//获取session
    26         //request.getServletPath();//获取Servlet请求路径
    27         //例如发送的的请求是http://localhost:8080/garage/login?username="zhangsan"&password="123" 那么获取的则是/login
    28         
    29         //请求响应:
    30         //response.setContentType("text/html;charset=utf-8");//设置响应内容格式31         //response.setCharacterEncoding("utf-8");//设置响应信息字符集
    32         //response.sendRedirect("重定向请求页面");//重定向
    33         /*给客户响应
    34         PrintWriter out = response.getWriter();
    35         out.write("<h1>登录界面</h1>");
    36         out.print("a");*/
    37     }
    38 }

      5.Servlet的生命周期

        Servlet是继承的HttpServlet,程序执行流程是先执行HttpServlet.init(),再执行HttpServlet.service(),最后执行HttpServlet.destroy()。

      6.Session理解

           服务端为了保存用户的状态而创建的一个特殊的对象。当浏览器第一次访问服务器的时候,服务器会创建一个Session对象,每个对象都有个Session的id,

        服务器会将session的id以Cookie的形式发送给浏览器,浏览器再次访问服务器的时候,会将Session的id发送给服务器,服务器便能通过id找到浏览器对象。

        关于session及常用方法

          HttpSession  sess = request.getSession(boolean flg);//获取session

          sess.setAttribute(String name,Object obj);//向Session域中发送信息

          sess.getAttribute(String name);//向Session域中接收信息

          sess.removeAttribute(String name);//移除Session域中的信息

          sess.invalidate();//删除session

          设置session存储持续时间,默认30分钟

              方式一:在web.xml中修改

                  <session-config>

                    <session-timeout>50</session-timeout>

                  </session-config>

              方式二:在Servlet中修改

                  sess.setMaxInactiveInterval(int seconds);

        session验证(比如购物车功能,用户没登录页面也能加入购物车)

          登录成功之后,在session对象上绑定一些数据,例如:

            session.setAttribute("user",user);

          当用户访问需要保护的资源时,进行session验证,例如:

            Object obj = (Object)session.getAttribute("user");

            if(obj == null){//没有登录

              response.sendRedirect("目标页面");

            }

      7.cookie

          访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些操作。更准确的说嘛是:cookie是服务器

        在本地机器上存储的一小段文本并随着每一请求发送至同一服务器,是在客服端保存状态的方案。

        cookie的主要内容包括:名字、值、过期时间、路径、域等

        cookie的生命周期是瞬时的,我们也可以设置他的生命周期

            setMaxage(秒);

        cookie的使用:

            第一步:cookie unname = new cookie(存到cookie对象中的变量名,值)//注意:cookie如果存中文必须给它设置编码,英文cookie不能存中文,否则有中文则报错)

            第二步:URLEncoder.encode(值,编码);//写入cookie时进行编码

                URLDecoder.decode(值,编码);//从cookie读出时进行解码

            第三步:esponse.addCookie(name); //将cookie信息添加到Servlet进行响应

                例如:

                    cookie name = new cookie("name",URLEncoder.encoder(username.getName(),"utf-8"));

                    response.addCookie(name);

            第四步:取浏览器存储的cookie:

                  方式一:可以在jsp页面通过EL内置对象Cookie进行获取。例如${cookie.name.value} 注意:但是直接获取如果cookie中有中文,则获取的则是乱码数据

                  方式二:可以通过JQuery获取

                  方式三:可以通过JSP小脚本遍历cookie找到指定的cookie来处理获取

                  <%

                      Cookie[ ]  cookies = request.cookies();//获取浏览器保留的所有cookie

                      if(cookie.length() > 0){

                        for(Cookie cookie:cookies){

                           if(cookie.getName().equals("name")){

                              Cookie name = URLDecoder.decode(cookie.getValue(),"utf-8");//从cookie读出时进行解码,防止中文乱码

                           }

                        }

                      }

                  %> 

      8.监听器

          监听器,Listener是web的三大组件(Servlet、Filter、Listener)之一,它是Servlet中特殊的类,他能帮助开发者监听web中特殊的事件,例如ServletContext、

        HTTPSession、ServletRequest的创建和销毁、变量的创建、销毁和修改等,可以在某些动作前后增加处理、实现监控。

            例如:统计在线人数   利用HttpSessioListener;  对应request内置对象的创建和销毁,

                                  当访问某个页面的时候,发出一个request请求,执行requestInitialized方法

                                  当页面关闭或容器关闭的时候,执行requestDestoried方法,

             加载初始化信息    利用ServletContextListener; 对应session内置对象的创建和销毁,

                                   当打开一个新的页面的时候,会开启新的session会话,执行sessionCreated方法;

                                   当页面关闭或容器关闭是session过期,执行sessionDestory方法

            统计网站的访问量       利用ServletContext;对应监控application内置对象创建和销毁,

                                当web容器开启的时候,执行contextInitiallized方法;

                                 当web容器关闭或重启的时候执行contextdestroy方法

             监听器使用步骤:

              第一步:创建一个监听器,实现某种接口

              第二步:在web.xml中配置该监听器

              第三步:在JSP中添加访问人数或其他操作...

      9.过滤器

           过滤器,Filter是web的三大组件(Servlet、Filter、Listener)之一,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web的服务器管理的

        web资源:例如jsp、servlet、静态图片、文件、静态html进行拦截。从而实现一些特殊的功能。例如使用url级别的权限访问控制、过滤敏感词汇、压缩响应

        信息等一些高级功能。一般用于用户身份的认证,编码设置,资源权限审核,加密解密访问等等。

             Filter的使用:

              第一步:编写一个类,实现Filter接口

              第二步:在web.xml中配置过滤器

           Filter生命周期:程序启动调用Filter的init()方法,程序终止调用destory方法,doFilter方法每次访问请求如果符合拦截条件都会调用

              init    初始化

              doFilter  过滤

              destory    销毁

  • 相关阅读:
    MicroPython的开发板
    python 安装mysql报错
    30个mysql千万级大数据SQL查询优化技巧详解
    PHP针对数字的加密解密类,可直接使用
    form表单公用
    生成随机邀请码
    Tp5自动验证
    protected和private的区别
    中国俗语大全
    更改Unity项目新建模板
  • 原文地址:https://www.cnblogs.com/qinqin-me/p/12346846.html
Copyright © 2020-2023  润新知