• Servlet


    引言:目前html+tomcat,在网络中访问浏览器页面

      问题:html+tomcat导致用户浏览页面内容不变

    解决问题:servlet

    什么是servlet概念:servlet是一段java代码,用户可以通过网络请求访问到这段java代码,每访问一次这段java代码执行一次

      可以根据用户访问时间的不同,来让java代码执行的结果变得不同

    语法:javaEE(企业版)servlet(Servlet-api.jar)

    1.servlet接口

    interface Servlet{
      //当一个实现Servlet接口的类创建对象时被调用
      protected void init();
      //对象被销毁时调用
      protected  void destory();
      //对象被网络访问的时候调用
      protected void service();                
    }

    2.javaEE已经实现的Servlet接口,HttpServlet

    3.我们自定义servlet时继承了HttpServlet,重写service()方法即可

    class MyServlet extends HttpServlet{
      service(){
        //自定义service的方法和内容
      }  
       //不需要再重新写init和destory方法
    }

    第一个servlet

    1.创建项目,导入servlet-api.jar

    2.编写自定义servlet

    需求每次用户访问,给用户当前时间

    3.问题将servlet部署到tomcat

    答案:servlet.java servlet.class

    问题:保存在哪?

    4.web.xml

      作用:给自定义servlet取网络协议名(url-pattern)

      在web.xml中注册servlet

    tomcat中的存放位置:WEB-INF下

    servlet的执行流程

    执行流程含义:当浏览器发送了一个请求,中间发生了什么,最终导致servlet被执行

    乱码问题

    web项目目录结构

    练习

    查询person‘表,并且将表中的内容以表格的形式展示

    编码步骤:

    1.建表

    2.建项目, JDBCUtil.java ,JDBCUtil.properties, jar包(ojdbc6.jar,servlet-api.jar)

    3.建实体类 com.baizhi.entity

    4.建Dao接口 com.baizhi.dao

    5.建Dao的实现类 com.baizhi.dao.impl

    6.测试dao com.baizhi.test

    7.建service接口 com.baizhi.service

    8.建service的实现类 com.baizhi.service.impl

    9.测试service

    10.建servlet com.baizhi.servlet

    11.配置web.xml

    servlet的接收请求参数

    含义:浏览器(前台)在向后台发送请求时,通常会携带用户输入的某些内容,在后台需要通过某些手段接收到

    前台怎么传

    1.直接在浏览器地址框内拼接参数(程序猿|媛在测试时使用的)

    2.通过a标签(超链接)传递参数

    3.通过form表单传递参数

    1.form->action属性要写明传递的路径

    2.每个input标签要加name属性,name属性的值,会作为参数传递的键去使用

    3.得有提交按钮

    后台怎么收

    String  value =   req.getParameter("key")

    登录功能(假)

    请求参数的乱码问题

    1.使用超链接,浏览器地址框直接输入,form提交为method=get

    作用:设置tomcat传送参数时的编码集

    设置servlet接收参数时的编码集

    注意:设置接收编码集代码要在接受参数之前

    2.使用form提交menthod=post

    注解开发servlet

    servlet各司其职

    1.负责逻辑判断和跳转的serlvet(XXXServlet,XXXAction)

    2.负责动态页面展示的servlet(XXXJsp,XXXView)

    多个servlet或者页面如何协同工作

    转发

    语法

    req.getRequestDispatcher("/资源名").forward(req, res);

    特点:

    1.转发的时候浏览器地址框路径不变(不是错,就是转发的特点)

    2.tomcat内部的跳转,浏览器其实并不知情

    3.通过转发,不管连接了多少个servlet或者html,这些serlvet或者html都在一次请求过程中

    添加方法的实现

    删除方法的实现

    修改

    修改前的展示

    真正的修改

    重定向

    作用:在servlet中如果使用了重定向,那么servlet就会指导浏览器从新发送一次请求,请求地址可以再重定向的代码中自定义

    语法: res.sendRedirect("/项目名/资源名");

     

    特点:

    1.重定向的最终请求与地址栏所写请求相同

    2.重定向是服务器外部的跳转

    3.重定向时,浏览器是知道的

    4.用重定向相连接的servlet或html不在同一个请求当中

    应用场景:

    添加完的展示所有(insertSerlvet---->ShowAllServlet)

    删除完的展示所有(deleteByIdServlet----->ShowAllServlet)

    修改完的展示所有(UpdateSerlvet----->ShowAllSerlvet)

    做完指定的增删改功能后要重定向到展示所有的页面

    网络会话技术

    cookie

    定义:是服务创建的,被保存在浏览器中的,一个字符串类型的,键值对

    语法:

    创建: Cookie cookie = new Cookie("key","value")

    将cookie放入浏览器: res.addCookie(cookie)

    如何获取浏览器中的cookie:     Cookie[] cookies =  req.getCookies();

    获取cookie的键  cookie.getName();
    获取cookie的值  cookie.getValue();

     

    特点:

    1.服务器创建出来,存放在每个用户的浏览器中的一个字符串键值对

    1.不安全,把信息存放在了客户端(缺点)

    2.节省服务的内存空间(优点)

    2.只能存放英文,不能存放中文或特殊字符

    3.使用cookie的相关方法

    创建cookie:    Cookie cookie = new Cookie("key","value")
    将cookie放入浏览器:    res.addCookie(cookie)
    从浏览器中去cookie:    Cookie[] cookies = req.getCookies()
    提取cookie的键:   cookie.getName()
    提取cookie的值:   cookie.getValue();

    4.cookie有效时长(cookie的存活时间,cookie的存放内容可以保持的时间)

    默认:关闭浏览器,cookie失效

    手动设置:
    cookie.setMaxAge(60) ----->有效时长为60秒
    cookie.setMaxAge(0) ----->当场去世
    cookie.setMaxAge(-1) ------>浏览器关闭



    session

    特点:

    1.服务器创建

    2.保存在服务器

    3.session与浏览器一一对应,不同的浏览器拥有不同的session

    4.浏览器第一次访问服务器时,会创建session

    5.浏览器第二次访问时,服务器会将第一次访问时创建的session拿来使用

    用法

    获得session:    HttpSession session =  req.getSession()

    存:       session.setAttribute("key",value)

    取:       Object value = session.getAttribute("key")

    移除:     session.removeAttribute("key")

     

    应用场景

    强制登录

    页面长期展示用户名

    cookie对比session

    cookie

    1.保存在浏览器

    2.一个浏览器可以拥有多个cookie

    3.cookie的有效时长

    默认: 关闭浏览器,cookie失效
    手动设置:
    cookie.setMaxAge(60) --->有效时长60秒
                      0 ---->当场死亡
                    -1 ---->关闭浏览器(默认)

    4.方法

    获得:    Cookie cookie = new Cookie("key","value");
    将cookie放入浏览器中:       res.addCookie(cookie);
    获取浏览器中的cookie:       Cookie[] cookies = req.getCookies();

    获得键:  cookie.getName();
    获得值:  cookie.getValue();

    session

    1.保存在服务器中

    2.一个浏览器有一个session

    3.session的有效时长

    默认: 1.关闭浏览器,session失效
    2.30分钟内,没有对该程序进行新的请求


    手动设置:web.xml
     <session-config>
         <session-timeout>60</session-timeout>   ----设置session在没有新的请求下.60分钟后失效
     </session-config>

    4.方法

    获得session:   HttpSession session = req.getSession();

    取值:          Object value = session.getAttribute("key");

    存值:         session.setAttribute("key",value);

    移除值:        session.removeAttribute("key");

    复习

    session和cookie 1WX3ED47UJM8Is

    cookie:浏览器(由用户保存)

    session:服务器(由程序员保存)

    2.存什么

    cookie: 只能存字符串,只能是英文

    session:任意内容(对象,集合,数组)

    3.相关方法

    cookie:

    获得:   Cookie cookie = new Cookie("key","value");

    把cookie放入浏览器:  res.addCookie(cookie);

    从浏览器中取cookie:  Cookie[] cookies =  req.getCookies();

    取键    cookie.getName();

    取值    cookie.getValue();

    session

    获得:   HttpSession session = req.getSession();

    取值:   Object o = session.getAttribute("key")

    存值;  session.setAttribute("key",value);    

    移除值:  session.removeAttribute("key");

    使用时机

    1.重不重要(能不能被别人知道)

    不是很重要:cookie

    重要:session

    2.什么类型

    是英文字符串:cookie

    是其他类型:session

    session的工作原理

    概念:当一个用户第一次获得session时,服务器会创建一个新的session给用户使用,当服务器第二次获得session时,服务器会将已经创建好的session再次给用户使用

    session有效时长

    1.30分钟没有新的操作session失效

    2.关闭浏览器session失效

    原因:关闭浏览器,cookie失效了,那么保存着session唯一标志的cookie就没了,导致,没有办法找到之前使用的session

    过滤器

    作用:当用户要访问servlet时,会拦截访问,先执行自己内部的代码,执行完毕后,可以选择是否让请求再去执行servlet里的代码

    编码:

    import javax.servlet.Filter
    class MyFilter implements Filter{
    init(){}//当filter创建时被执行
    detory(){}//当filter销毁时被执行
    doFilter(){
        //先写执行servlet之前要执行的代码(设置编码)
        
        //放行
       chain.doFilter(req,res)//如果不想让请求执行原本的servlet,就不写这行代码
    
       //servlet执行完之后要执行的代码
    }//过滤器要干的事儿
    }
    web.xml
    
    <filter>
        <filter-name>随意写</filter-name>
        <filter-class>filter的全类名</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>随意写</filter-name>
        <url-pattern>想要过滤的servlet的url-pattern</url-pattern>
    </filter-mapping>

    filter过滤多个servlet

    1./*  会过滤该项目中所有的servlet.html.图片.jsp
    
    2./namespace/*
    给要过滤的servlet加namespace(命名空间)
    @WebServlet("/namespace/资源名")
    请路径:http://localhost:8989/项目名/namespace/资源名
    注意;1.添加了namespace之后,所有页面的跳转,路径都要写成/项目名/要跳转的页面
    2.在页面上所展示的图片,css样式....在页面上的路径改成  /项目名/存放图片的文件夹名/图片名(css文件) 
    

     相对路径与绝对路径

    相对路径:

    概念:以一个参照物为基准,计算另一个文件的位置

    举个栗子:

    问:办公室在哪儿?

    答:13A13教室后门出去左拐再右拐

    代码的写法

    images/add.png

    绝对路径

    概念:以地球参照物,计算另一个文件的位置

    举个栗子:

    问:办公室在哪儿?

    答:中国 河南 郑州 金水区 文化路 硅谷大厦A座 14楼 前台东边

    代码

    /项目名/addPerson.html

    补充

    三个作用域

    作用域:在程序运行过程当中可以保存数据的地方

    request

    存什么:存任意数据

    保存多长时间:一次请求过程

    怎么获得:service方法的参数传递过来

    怎么存:request.setAttribute("key",value);

    怎么取:Object o = request.getAttribute("key");

    session

    存什么:存任意数据

    保存多长时间:可以跨越多个请求,只要session不失效就能一直保存,针对用户保存

    怎么获得:req.getSession();

    怎么存:session.setAttribute("key",value);

    怎么取:Object o = session.getAttribute("key");

    servletcontext

    存什么:存任意数据

    保存多长时间:整个服务(tomcat开启服务开始,tomcat关闭服务结束),所有用户公用

    怎么获得:req.getServletContext();

    怎么存:servletContext.setAttribute("key",value);

    怎么取:Object o = servletContext.getAttribute("key");
    以粮为纲全面发展
  • 相关阅读:
    《算法竞赛入门经典》《算法竞赛入门经典——训练之南》:勘误、讨论及代码
    codeforces 340B Maximal Area Quadrilateral(叉积)
    codeforces 340C Tourist Problem(简单数学题)
    codeforces 340A The Wall(简单数学题)
    UVALive 4043 Ants(二分图完美匹配)
    UVA 11865 Stream My Contest(最小树形图)
    UVA 11354 Bond(最小瓶颈路+倍增)
    UVALive 5713 Qin Shi Huang's National Road System(次小生成树)
    UVALive 3661 Animal Run(最短路解最小割)
    卡尔曼滤波器
  • 原文地址:https://www.cnblogs.com/alexliuf/p/13793204.html
Copyright © 2020-2023  润新知