Web阶段–Servlet基础知识点

一、静态页面与动态页面

1.静态页面

概念:在Web模型中,页面中的信息是在html文件中定义好的,数据不会改变,称为“静态页面”,无法根据用户需求实时定制数据

2.动态页面

概念:网页中展示的数据来自于java程序的运行结果,随着业务的发展,网页中的数据会发生改变
工作原理:输入URL,通过互联网与WEB服务器建立网络连接(Request请求)---->WEB服务器接受到请求后调用一段Java程序--->WEB服务器将Java程序的输出结果传输给客户端(Response响应,通常以“网页”)---->浏览器将程序的输出结果显示在网页上

二、Servlet概念

1.什么是Servlet?

Servlet是一种生成动态网页的技术,是JavaEE规范的一部分,一种运行在tomcat服务器上的,用java编写小程序,可以接收浏览器(客户端—client)发出的http请求,并且服务器为client做出响应( 一般以网页的形式体现 --- 动态网页)

2.运行方式

开发好的java程序,需要发布到tomcat服务器上,由服务器在用户请求达到时调用

三、动态B/S结构的开发

1.开发流程

环境搭建--->程序开发--->部署应用--->配置文件--->程序访问

2.环境搭建

1 在Tomcat服务器的webapps目录下新建myweb应用
2 在myeclipse里新建一个javaproject项目
3 将servlet开发所需的servlet-api.jar引入到建好的webproject中备注:servlet-api.jar 存放于 tomcat安装路径/lib目录中

3.程序开发----第一个Servlet程序

1. 实现servlet程序的三种方式implements Servlet是javax.servlet包里的接口,覆盖5个方法(重点是service方法),与协议无关程序extends GenericServlet是javax.servlet包里的抽象类覆盖其中的抽象方法service(),定义与协议无关的程序extends HttpServlet是javax.servlet.http包里的类覆盖其中与http协议相关的service(),必须使用http协议通信
2.具体代码实现案例:public class FirstServlet extends HttpServlet{//向client浏览器打印当前服务器系统时间@Overridepublic void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1. 设置响应内容的类型response.setContentType("text/html;charset=GBK");//2. 获取输出响应的IO流对象PrintWriter out = response.getWriter();//3. 输出数据Date time = new Date();out.println("<h1 style='color:red'>"+time+"</h1>");out.flush();}
}

4.部署(deploy)应用(手动部署)

找到存放Tomcat的文件夹|-- lib    存放tomcat里所有应用都可以使用的jar包|-- conf tomcat的配置文件|-- bin  存放tomcat里所有应用都可以使用的程序|-- work |-- webapps 存放应用程序|-- myweb 项目名或者应用程序名|-- html文件,image图片,css文件|-- WEB-INF|-- classes    存放java程序的字节码文件(注意:带着包结构)|-- lib        如果有,存放当前应用需要使用的私有的jar包|-- web.xml文件  当前应用所需的配置文件

5.配置文件—web.xml

 <servlet><servlet-name> servlet程序的简称(必须保证当前文件中唯一)</servlet-name><servlet-class> servlet程序的全类名(包名.类名)</servlet-class></servlet><servlet-mapping><servlet-name> servlet程序简称,与上面的简称一致(注意区分大小写)</servlet-name><url-pattern> /程序网名 (必须以/开头) </url-pattern></servlet-mapping>

5.程序访问

1 启动tomcat服务器:执行tomcat/bin/startup.bat文件
2 打开浏览器,在浏览器地址输入程序的url访问http://127.0.0.1:端口号/应用名或者项目名/程序网名
注意:任何java源码的修改都需要重新部署.class文件,重新启动服务器访问

四、基于MyEclipse自动部署Web应用

1.配置tomcat服务器

1) window --- show view --- others --- 搜索servers -- 选中
2 ) 在console窗口找到server窗口右键 --- configurer server connector ---Tomcat--tomcat版本选择 --- 选中enable--- 在第一个选择框指定tomcat安装路径

2.新建web project

1.classes目录依然存在,只是不会在MyEclipse中显示,存放MyEclipse工作空间的项目WEB-INF目录下
2.采用自动部署功能,项目名就作为将来的web应用名使用
3.如果要修改项目名字,需要同时修改web应用的部署路径(不同myeclipse版本有所差别)项目右键 --- propertis --- 搜索web --- 改路径

五、请求发送的三种方式

1.地址栏手工输入

这种只适用于用户访问应用首页

2.点击超链接发送请求

<a href="目标资源的地址(如果在同一个服务器上写uri即可)">提示文字</a>

3.点击表单的提交按钮发送请求

 <form action="目标资源的uri" method="post">所提交的内容信息 </form>

六. 关于servlet程序的生命周期

1. 请求响应过程

1.地址栏输入请求地址 --- 通过ip 和端口找到tomcat服务器
2.根据地址的应用名,确定所访问的web应用,同时获取应用的配置文件web.xml
3.读取配置文件,在配置文件中查找 网名对应的servlet程序 “全类名”
4.根据全类名获取程序的对象(第一次被请求则创建对象,不是第一次则直接获取之前创建的对象)Class  a  = Class.forName(" 全类名 ");Object obj  =  a.newInstance();    --- 根据类对象创建 “类的对象 -- 实例 ”
5.使用对象调用service方法
6.service方法运行,将结果(响应)发还给客户端

2. 关于servlet程序的对象创建

1.tomcat默认只会为每个servlet程序创建一个对象(在第一次请求到达时创建) --- 应用层面的单例
2.servlet程序的四个生命阶段①   构造阶段          构造方法     1次      第一次请求到达时执行②   初始化阶段        init方法      1次      构建对象成功后③   服务阶段          service方法   n次    每次请求到达后④   销毁阶段          destroy方法   1次    服务器关闭时
3.人为干预servelt程序对象的创建和初始化时机

3. 关于程序对象的线程安全问题

1) tomcat会为每一个servlet程序创建一个对象,由这个对象为所有请求它的客户端(线程)提供服务,这个对象(临界资源)有可能被多个客户端并发访问 , 需要在代码上保证程序的线程安全。
2)保证安全的策略① 尽量不要为servlet程序定义 “成员变量” ② 如果使用了成员变量,需要为“敏感代码”(所有操作临界资源数据的代码)加锁

七. Servlet 与 Jdbc 整合

项目开发步骤

1.搭建环境 --- 引入项目所需要的各种jar包 + 引入工具所需要的配置文件
2.复用代码 --- JdbcUtil工具类的复用(修改配置文件路径)
3.建表  ,  实体  , dao , service
4.view层程序的开发   :  servlet程序  + html网页

八. 多个servlet配合完成用户需求

1. 配合方式(两种)【重点】

1.请求转发:forwarda.代码  --- 在第一个程序里添加如下代码RequestDispatcher  rd = request.getRequestDispatcher("下一个程序的url-pattern网名");rd.forward( request,response );b.forward工作方式的特点① forward连接的多个servlet程序有明显的先后顺序,形成工作流,在这个流程中,只有最后一个servlet有权向client输出结果内容,前面servlet的输出一律清空② forward连接的多个servlet程序处于一个请求的生命周期③ forward动作发生在服务器内部,浏览器不知晓,最终导致地址栏和网页内容不匹配④ 可以使用request作用域传递数据⑤ forward方式不能在两个应用的程序之间跳转(不能跨应用, 不能跨域)c.关于forward过程中数据的传递问题在forward连接的两个程序间可以使用request对象来传递数据,request本身又是一个存储空间(作用域),可以存放起了名字的值(命名属性)① 存数据:request.setAttribute( "name" --- String , value --- Object );② 取数据:Object  value = request.getAttribute( "name" );
2.请求重定向 redirecta.特点① 重定向redirect连接的两个servlet程序处于两个请求的生命周期② 第二次请求是浏览器根据第一次请求的响应自动发出的, 会导致浏览器地址栏发生改变③ 不能使用request作用域传递数据( 整个过程是两个请求)④ 可以跨域(在两个不同应用的程序之间跳转)b.代码response.sendRedirect( " 下一个程序的uri ");c.数据传递① 一般情况下,不需要数据传递② 可以人为模拟表单的get提交方式,将数据直接拼接到地址后面传递response.sendRedirect( "uri?name=value&name=value");接收: request.getParameter("name")注意: 这种数据传递方式同时适用于超链接数据传递

2.forward和redirect异同点

1.相同: 代码运行后都可以使得程序的流程由AServlet跳转到Bservlet程序运行
2.不同:  forward(一个请求,地址栏不变)  , redirect(两个请求,地址栏变化)
3.使用选择:① 如果当前程序执行结束,功能没有彻底完成 or 有大量数据需要传递,则选择 forward 跳转② 如果当前程序执行结束, 功能已经完成(下一个程序涉及其他功能),选择 redirect 跳转③ 无法确定,优选 redirect

九、用户信息追踪

1. 概念:

在通信过程中,保存记录用户一些重要的业务步骤操作 涉及的数据

2. 方式

1.cookie : 在客户端浏览器中保存用户状态数据a.概念1.服务器写到浏览器上的一小段String,由name和value两部分组成(不支持中文)2.当浏览器访问服务器时,服务器可以读取浏览器上曾经自己写过的cookie3.cookie有存活时间(可以设置)b.操作cookie的API1.创建cookie对象  ---  Cookie  c = new Cookie( name , value );2.写cookie --- response.addCookie(c);3.读cookie ---request.getCookies() --> Cookie[]  如果没有读到,返回值为null4.设置存活时间 ---  cookie.setMaxAge( xxx );① 数字为正数: 表示存活多少秒② 数字为负数: 表示cookie会在浏览器关闭时被销毁5.设置cookie的访问路经  --- cookie.setPath(".....");注意: http协议规定,只有处于同一路径下的程序才能访问该路径下程序写过的cookie(默认不能跨应用)
2.HttpSession:在服务器端保存用户状态数据a.定义:会话:client与服务器端的一次完整的通信过程(涵盖多次请求)b.使用【重点】1.获取 ---   HttpSession session = request.getSession( boolean -- true );2.HttpSession是一个作用域,可以存放“命名属性”① 存数据 --- session.setAttribute("name",value);② 取数据 --- Object  value = session.getAttribute("name");③ 移除数据 --- session.removeAttribute("name");c.session对象的特点1.生命周期比较长begin:当client访问的程序里第一次出现request.getSession(true)代码时(懒汉式创建)end:timeout关闭session(服务器会为session设置一个有效存活时间 --- 默认30分钟 )b.控制session的有效存活时间① 可以在tomcat的配置文件中修改tomcat产生的所有session的存活时间(统一修改)tomcat --- conf --- web.xml:<session-config><session-timeout>30</session-timeout></session-config>② 可以针对某一个应用中使用的session进行修改 ---  程序中通过函数调用修改session.setMaxInactiveInterval( time );       time单位秒③ 主动销毁session对象  --- 完成安全退出session.invalidate();

3.与用户相关(一个用户对应一个session对象) — 浏览器软件

1.问题:在A程序里 sesssion.setAttribute("name","hehe");   client1 访问了A程序问:之后哪些程序可以通过session.getAttribute("name") 获取hehe数据答:只要被client1请求的程序(不论功能),就可以得到hehe数据
2.原理:当client向server申请session对象时,tomcat会首先读取浏览器上的cookie,查找JSESSIONID的cookiea.没找到: tomcat会为client创建新的session,同时将session的id以cookie的形式写入浏览器b.找到:获取cookie里的session id,在内存中查找对应的session对象,返回给client使用
3.安全退出---关闭浏览器退出的区别a.安全退出:直接销毁client对应的session对象,并清除浏览器上的cookieb.关闭浏览器退出: 存储了sessionid的cookie被销毁,再次访问时,无法提供之前session的id,tomcat为client创建了新的session(原有session仍然存活30分钟)注意: 保存sessionid的cookie    JSESSIONID -- 32位16进制数

4.url重写

1.如果浏览器拒绝接收cookie,则程序无法完成功能(一般不要求程序做出处理)
2.如果使用response.encodeURL() 来处理跳转路径,则可以在浏览器不支持cookie的情况下,让前后两个网页使用同一个session对象
3.方法功能: 检测浏览器是否支持cookie,支持(不做任何处理原样返回),不支持(将当前网页里的sessionid拼接到地址后面 url;jsessionid=32位16进制数 )

十、ServletContext

1. 从文件的角度理解ServletContext对象

1.tomcat启动时,会去读取每一个web应用的配置文件web.xml,并将读到的内容封装成ServletContext对象保存在内存中, ServletContext对象就是web.xml文件在内存中的体现
2.一个web应用只有一个web.xml文件,只对应一个ServletContext
3) ServletConfig对象: tomcat在读取配置文件过程中,封装一段关于servlet的描述信息(servlet标签)
4) 使用场景

2. 从作用域的角度理解ServletContext对象

1.ServletContext对象是一个作用域,可以存放命名属性a.获取对象:ServletContext  context = session.getServletContext(); 

 b.存数据:context.setAttribute("name",value);取数据:context.getAttribute("name") --> Object value移除数据:context.removeAttribute("name");
2.servlet里的三大作用域

十一、过滤器 Filter

1. servlet冗余代码种类( 多次出现,通用基础功能与主要业务无关 )

① 设置request和response的编码方式

② 检查登陆标志的代码

 ③ 异常处理的代码try{// 业务处理}catch(Exception e){String str = e.getMessage();String mess = java.net.URLEncoder.encode(str,"GBK");response.sendRedirect("/Telbook/ErroView?mess="+mess);
}

2.冗余代码的解决方案

通过定义“过滤器”程序来解决servlet程序中出现的冗余代码

3. 特点:双向过滤

1.是一个web应用程序,主要对request和response进行预处理
2.过滤器会在请求到达servlet程序前执行代码,也会在response回到client之前运行代码
3.servlet里的冗余代码通常都定义在filter程序中

4.自定义过滤器程序

1.写程序 --- 实现指定的接口 Filter

2.写配置文件web.xml<filter><filter-name>filter程序的简称</filter-name><filter-class>filter程序的全类名</filter-class></filter><filter-mapping><filter-name>filter程序的简称,与上面的定义保持一致</filter-name><url-pattern> 需要被当前程序预处理的servlet的网名 /*所有请求</url-pattern></filter-mapping>
3.部署到tomcat上

5. 过滤器执行先后顺序

当请求需要通过多个过滤器时,会按照配置文件中声明的先后顺序通过

6. 过滤请求的方向

1.filter默认只过滤来自于client端的请求,不考虑tomcat内部forward过来的
2.通过配置可以使得过滤器全方向过滤<filter-mapping><filter-name>定义过滤源文件的名字</filter-name><url-pattern>被过滤的源文件名字</url-pattern><dispatcher> REQUEST(默认值),FORWARD,INCLUDE </dispatcher></filter-mapping>注意:标签里的值必须大写,默认值只在不提供<dispatcher>标签时生效,如果提供了标签,按照定义方向进行过滤,全方向过滤需要通过三个<dispatcher>定义

7. 关于过滤器url-pattern的实战技巧

1.如果需要过滤少量的servlet请求 --- 通过定义多个url-pattern进行网名的罗列
2.如果需要过滤所有的client端请求 --- /* ( servlet  html  jsp  image  css )
3.如果需要过滤多数请求(不是全部)--- 通过为程序的网名添加前缀的方式解决

4.如果需要过滤全部servlet请求(强调 区别请求类型,不包括html和其他请求)--- 为网名添加后缀

十二、监听器Listener

1. 监听事件模型【重点】

1.组成:事件源(source)  事件对象(event)  监听器(listener)
2.关系:当事件源产生特定的事件对象时,会触发监听器代码的运行
3.监听器代码是由事件触发运行,不需要client请求

2. servlet里的监听器

1.生命周期监听器【重点】 ---- 监听三大作用域的创建和销毁ServletContextListener  --- 监听servletContext对象的创建和销毁HttpSessionListener --- 监听session对象创建和销毁ServletRequestListener --- 监听request对象的创建和销毁
2)命名属性监听器  ---- 监听命名属性的添加,移除和修改动作ServletContextAttributeListener  HttpSessionAttributeListener ServletRequestAttributeListener

3. 自定义监听器

1.写程序 --- 实现指定接口所有event都有一个通用方法   getSource()(一般不建议用)ServletContext context = arg0.getServletContext();(建议用)
2.写配置文件<listener><listener-class> 全类名 </listener-class></listener>

Web阶段--Servlet基础知识点相关推荐

  1. web前端工程师基础知识点

    看了一个web培训的大纲,感觉这些确实涵盖了在开发过程当中的一些知识点,特此总结了一下.同时也是第一次尝试了使用markdown这个编辑器,感觉不错. 特此推荐一下 HTMLXHTML Dreamwe ...

  2. 大数据WEB阶段 Servlet配置优先级 , Spring容器设置对静态资源放行

    Servlet配置优先级 , Spring容器设置对静态资源放行 零.目录 servlet优先级 Spring容器对静态资源放行 一.servlet优先级 web.xml时整个web应用的核心配置文件 ...

  3. 关于Web面试的基础知识点--Html+Css(四)

    文章目录 1. 导致回流发生的因素 回流 (Reflow) 2.white-space text-overflow overflow(文本空白问题) 3.如下代码 如何使child内容垂直居中? 4. ...

  4. 关于Web面试的基础知识点--Html+Css(三)

    文章目录 1.CSS中可以继承的属性 2.CSS选择器优先级 4个等级的定义 3.以下哪些CSS表示红色? 4.行内元素和块级元素 5.浮动元素 6.清除浮动并不会造成不稳定情况的方法 7.可以进行跨 ...

  5. 关于Web面试的基础知识点--Javascript(一)

    文章目录 前言 1.著名的"null==undefined" undefined null null == undefined ??? 2.假值 3.Javascript的数据类型 ...

  6. 关于Web面试的基础知识点--Javascript(二)

    Table of Contents 1.如何将集合转化成数组? 2.Event Loop - 1 3.Event Loop - 2 4.不支持冒泡的事件 5. 如何阻止事件冒泡 6.比较Ajax和Fl ...

  7. Web阶段--Oracle数据库基础知识点

    Web阶段–Oracle数据库基础知识点 一.数据库 1.定义 是一个数据存储管理的软件,全称rdbms(关系数据库管理系统),简称数据库(db) 2.为什么需要应用数据库? 1.现有文本文件存放数据 ...

  8. 大数据WEB阶段(九)Servlet+Request

    Servlet与Request 一.概述 Servlet 是sun公司提供的一门用于开发动态web资源的技术 按照这套规范写出来的servlet可以放置在web应用中在servlet容器中运行 . 开 ...

  9. java基础知识点_零基础学习Java语言,各个阶段需要掌握的知识点

    随社会的脚步的不断发展,Java技术在不断的与时俱进,这也是Java一直长盛不衰的原因之一.Java技术的学习,永远没有早晚之分,技不压身,对于21世纪的我们80后,90后,甚至00后,尤其适用! 那 ...

最新文章

  1. Spring3.1新属性管理API:PropertySource、Environment、Profile
  2. linux期末脚本作业,linux – 使用R Markdown将bash脚本作为Cron作业运行
  3. linux libodbc.so.1,CentOS6.0虚拟机上安装nginx启动的错误---缺少libpcre.so.1共享库
  4. 今天收到ORACLE 10G OCA 证书!
  5. android编译非静态内部类,Android 非静态内部类/匿名类引起的内存泄漏
  6. Windows CE的学习路线
  7. 【java】java原生序列化和Kryo序列化性能实例对比分析
  8. 闹钟流程_自考专升本1月份统考粤康码申报流程
  9. 如何在fedora安装Telegram
  10. 将数组转换为IntPtr
  11. php date转换为时间戳,php中date转换时间戳的方法
  12. 字模提取工具-PCtoLCD2002使用说明
  13. 猫哥教你写爬虫 044--模拟浏览器-作业
  14. Dubbo thread pool is exhausted
  15. 802.11a/b/g/n区别
  16. 10G SFP+万兆BIDI单纤光模块使用注意事项
  17. 《算法竞赛入门经典》Chap3
  18. Android平台安全分析
  19. 常见的两种python编译器的安装
  20. Eclipse 安装ADT

热门文章

  1. 今年你们赚到钱了吗?
  2. python如何读取csv文件的某两行_Python 读取csv的某行
  3. 弦振动 matlab,弦振动规律和MATLAB数据处理.doc
  4. 史上最全的FTP网址
  5. 示波器常见的四种探头
  6. 一枚研发狗的自我认知历程
  7. MyBatis01:第一个程序
  8. 谈谈前端角度出发做好SEO需要考虑什么?
  9. (dfs/dp)P2327 [SCOI2005]扫雷
  10. MySQL的多表查询-多表关系与相关练习题