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    销毁

posted @ 2020-02-25 14:31  我只是一个码农  阅读(262)  评论(0编辑  收藏  举报