Java相关课程系列笔记之九Servlet学习笔记
- 格式:doc
- 大小:5.11 MB
- 文档页数:62
java servlet知识点总结一、Servlet 的生命周期1. Servlet 的生命周期包括初始化、服务和销毁三个阶段。
2. 初始化阶段:当Servlet 第一次被请求时,容器会调用其 init() 方法来进行初始化操作。
开发者可以在init() 方法中进行一些必要的初始化操作。
3. 服务阶段:当Servlet 接收到客户端请求时,容器会调用其 service() 方法来处理请求。
在service() 方法中,开发者可以根据请求进行相应的处理,并生成响应返回给客户端。
4. 销毁阶段:当Servlet 不再被需要时,容器会调用其 destroy() 方法来进行销毁操作。
在destroy() 方法中,开发者可以进行一些清理工作,释放资源等操作。
二、Servlet 的请求和响应1. 请求对象 HttpServletRequest:HttpServletRequest 对象封装了客户端的请求信息,包括请求方法、请求参数、请求头信息等。
开发者可以通过HttpServletRequest 对象获取客户端的请求信息,并进行相应的处理。
2. 响应对象 HttpServletResponse:HttpServletResponse 对象封装了生成响应的方法,包括设置响应状态码、设置响应头信息、向客户端输出数据等。
开发者可以通过HttpServletResponse 对象来生成相应的响应返回给客户端。
三、会话管理1. 会话管理指的是在客户端与服务器端之间建立会话,并保持会话状态。
在Servlet 中,可以通过会话管理来实现用户登录状态的保持、购物车的管理等功能。
2. 会话对象 HttpSession:HttpSession 对象代表着服务器端的会话,开发者可以通过HttpSession 对象来存储会话所需的数据,如用户信息、购物车内容等。
同时,开发者还可以通过HttpSession 对象来管理会话的生命周期、设置会话超时时间等。
Servlet学习笔记…Java相关课程系列笔记之九笔记内容说明Servlet(程祖红老师主讲,占笔记内容100%);目录一、 Servlet概述 (1)B/S架构(了解) (1)什么是Servlet (1)什么是Tomcat (2)如何写一个Servlet(不使用开发工具) (3)使用MyEclipse开发Servlet (4)Servlet是如何运行的 (5)常见错误及解决方式 (6)案例:根据请求次数显示结果和显示当前时间 (6)二、 HTTP协议 (6)什么是HTTP协议 (6)通讯的过程 (6)数据格式 (6)TCP/IP Monitor的使用 (7)get请求与post请求 (7)如何读取请求参数 (7)访问数据库(MySql) (7)案例:添加员工(访问MySql数据库) (7)异常:IllegalStateException (7)三、编码问题 (7)Java语言在内存当中默认使用的字符集 (7)编码 (7)解码 (7)Servlet如何输出中文 (7)如果表单有中文参数值,也需要注意编码问题 (7)案例:根据请求正确显示中文 (7)将中文数据插入到数据库 (7)四、重定向 (7)什么是重定向 (7)如何重定向 (7)注意两个问题 (7)两个特点 (7)重定向原理图:以案例为例 (7)五、 DAO (7)什么是DAO (7)如何写一个DAO (7)工厂类 (7)六、工厂设计模式 (7)什么是工厂 (7)使用工厂设计模式的好处 (7)如何使用工厂模式 (7)案例:为案例添加新功能,并使用DAO和工厂模式 (7)七、 Servlet容器处理细节 (8)Servlet容器如何处理请求资源路径以及匹配 (8)一个Servlet如何处理多种请求 (8)八、 Servlet的生命周期 (9)Servlet的生命周期的含义 (9)Servlet生命周期的四个阶段 (9)实例化 (9)初始化 (9)就绪 (9)销毁 (10)Servlet生命周期图 (10)Servlet生命周期相关的几个接口与类 (10)九、 JSP(简要介绍,详细内容见JSP笔记) (11)什么是JSP (11)为什么要使用JSP (11)JSP与Servlet的关系 (11)如何写一个JSP文件 (11)JSP是如何运行的 (11)指令 (12)案例:创建页面,将表示逻辑交给JSP处理 (12)十、请求转发 (13)什么是转发 (13)如何转发 (13)编程需要注意的两个问题 (13)转发原理图 (13)转发的特点 (13)转发和重定向的区别 (13)何时用重定向 (13)何时用转发 (13)案例:修改案例中step7中的 (13)十一、异常的处理 (15)用输出流out (15)用转发的方式 (15)让容器处理系统异常 (15)案例:将案例中的step3中的所有catch块修改 (15)十二、路径问题 (15)什么是相对路径 (15)什么是绝对路径 (15)如何写绝对路径 (15)如何防止硬编码 (15)案例:相对、绝对路径对比 (15)四种情况下,正确的绝对路径写法 (16)十三、状态管理 (17)什么是状态管理 (17)cookie (17)如何创建一个cookie (17)查询cookie (17)编码问题 (17)cookie的生存时间 (17)cookie的路径问题 (17)cookie的限制 (18)案例:写一个CookieUtil (18)session(会话) (18)如何创建一个session对象 (18)HttpSession接口中提供的常用方法 (18)session的超时 (18)用户禁止cookie以后,如何继续使用session (18)url重写 (18)session的优点 (18)session的缺点 (18)案例:session验证和访问次数 (18)案例:验证码 (18)案例:购物车 (19)十四、过滤器 (22)什么是过滤器 (22)如何写一个过滤器 (22)案例:敏感字过滤器 (22)过滤器的优先级 (23)初始化参数 (23)优点 (23)十五、监听器 (23)什么是监听器 (23)容器会产生两大类事件 (23)如何写一个监听器 (23)ServletContext(Servlet上下文) (23)如何获得Servlet上下文 (23)Servlet上下文的作用 (23)案例:统计在线人数 (23)十六、上传文件 (25)如何上传文件 (25)案例:上传文件 (25)十七、 Servlet线程安全问题 (27)为何Servlet会有线程安全问题 (27)如何处理线程安全问题 (27)十八、 Servlet小结 (28)Servlet基础 (28)Servlet核心 (28)数据库访问 (28)过滤器和监听器 (28)典型案例和扩展 (28)十九、其他注意事项 (29)连接数据库的工具 (29)知名网站 (29)C/S架构:Client/Server (29)B/S架构:Browser/Server (30)一、Servlet概述B/S架构(了解)1)什么是B/S架构客户端使用浏览器,服务端使用web浏览器,客户端跟服务器之间使用HTTP协议进行通讯。
Servlet学习笔记(一)1.一个Servlet程序就是一个实现了特殊接口的Java类,它由支持servlet(具有servlet引擎)的web服务器调用和启动运行。
一个Servlet程序负责处理它所对应的一个或一组url地址的访问请求,并接收客户端发出的访问请求信息和产生响应内容。
2.所有的servlet(自定义的)都必须实现servlet接口(javax.servlet.Servlet)。
由于Servlet接口中有很多方法不需要实现,因此可以继承GenericServlet类。
GenericServlet实现了servlet接口的基本特征和功能。
javax.servlet.http.HTTPServlet类继承了GenericServlet类,并在其基础上进行了一些对HTTP 协议的扩充。
3.客户端每次访问一个支持HTTP的Servlet程序时,Servlet引擎都将调用Servlet的service 方法来进行处理。
HTTPServletRequest用于封装HTTP请求,HTTPServletResponse用于封装HTTP响应。
HTTPServletResponse对象的getWrite()方法可以获得一个文本输出流对象。
其内容可以作为响应消息的内容。
4.Servlet的注册与运行:(1).Servlet程序必须通过Servlet引擎来启动运行,并且存储目录有特殊要求,通常需要存储在<Web应用程序>/WEB-INF/classes/目录中。
(2).Servlet程序必须在Web应用程序的web.xml文件中进行注册和映射其访问路径,才可以被servlet引擎加载和被外界访问。
(3).<servlet>元素用于注册一个servlet。
<servlet-name>用于设置注册名,<servlet-class>用于设置servlet的完整路径。
一、Servlet基础1、什么是servlet?2、servlet的优点?3、什么是servlet容器?4、怎么写一个servlet?二、Servlet核心1、核心的接口与类ServletGenericServletHttpServletServletRequest,ServletResponseHttpServletRequest,HttpServletResponseServletConfigServletContext2、HttpServletRequest,HttpServletResponse的常用方法request.getParameter();request.getParameterValues();request.getSession(); request.getSession(boolean);request.getRequestURI();request.setAttribute(), getAttribute(),removeAttribute(); request.getRequestDispatcher();request.setCharacterEncoding();request.getCookies();response.getWriter();response.setContentType();response.sendRedirect();response.encodeURL(), encodeRedirectURL();response.addCookie();3、表单处理(1)如何获得表单中数据(2)表单中,有中文,如何处理(3)表单的提交方式4、比较get,post提交方式链接、表单默认提交方式、地址栏直接输入:get方式对于method="post" 是post方式。
此外,还要知道两者之间的不同,查笔记。
5、重定向与转发(1)什么是重定向、重定向的特点(2)编程(3)什么是转发,转发的特点(4)转发的编程(5)比较二者之间的不同。
servlet知识点Servlet是Java中的一种技术,用于开发Web应用程序。
它是JavaEE规范中的一部分,提供了一种处理HTTP请求和响应的标准方式。
以下是一些Servlet的常见知识点:1. Servlet的生命周期:Servlet实例化、初始化、服务请求和销毁。
2. Servlet API:javax.servlet包中提供了一组类和接口,用于编写Servlet应用程序。
3. Servlet容器:包括Tomcat、WebLogic、WebSphere等,负责加载和管理Servlet实例以及处理HTTP请求和响应。
4. HttpServletRequest和HttpServletResponse:这两个类分别代表HTTP请求和响应。
HttpServletRequest提供了访问请求参数、头信息和请求体等的方法,HttpServletResponse则提供了向客户端发送响应的方法。
5. Servlet映射:Servlet容器通过Servlet映射来确定哪个Servlet处理哪个HTTP请求。
Servlet映射可以通过web.xml文件或注解来配置。
6. Servlet过滤器:过滤器用于在Servlet处理请求之前或响应之后执行一些操作,比如验证用户身份、日志记录等。
7. 会话管理:Servlet提供了会话管理的功能,可以用于跟踪用户的状态和数据。
常用的会话管理方式包括Cookie和Session。
8. 异步Servlet:异步Servlet允许Servlet容器在处理请求时不阻塞线程,从而提高服务器的并发性能。
9. Servlet安全性:Servlet应用程序需要考虑安全性,包括防止跨站点脚本攻击、SQL注入等攻击。
以上是一些常见的Servlet知识点,掌握这些知识可以帮助开发人员更好地理解和应用Servlet技术。
1 课程回顾Servlet编程1)Servlet生命周期(重点)构造方法:创建servlet对象。
默认情况下,第一次访问servlet对象时。
只调用1次。
init方法(有参):创建完servlet对象后调用。
只调用1次。
注意:会调用无参的init方法。
(开发者使用有参参的init方法)service方法:servlet提供服务的方法。
每次发出请求调用。
注意:request对象,response对象destroy方法:tomcat服务器停止或web应用重新部署,servlet对象销毁,destroy方法被调用。
2)ServletConfig对象获取servlet的初始化参数:getInitParameter("name ");键值getInitParameterNames();键名3)ServletContext对象得到web应用路径:context.getContextPath();request.getContextPath(); 等价于上面的代码得到web应用参数:context.getInitParameter("name");(值)context.getInitParameterNames();(名)域对象:context.setAttribute("name",Object): 保存数据(set保存数据设置)context.getAttribute("name") 得到数据(得到数据)context.removeAttribue("name") 清除数据(清楚数据)转发context.getRequestDispatcher("路径").forward(request,response);request.getRequestDispacher("路径").forward(request,response); 等价于上面的代码注意:转发与重定向的区别得到web应用中的资源文件context.getRealPath("路径")context.getResourceAsStream("路径");(该部分很重要,容易出错,风险很大)/**. 代表java命令运行目录。
Servlet笔记相关知识点:补充⽹络协议:这些内容⾃Servlet中是可以被操作的;当然在HTML之中也是可以设置的(head)。
在搞验证码的时候,要刷新验证码的时候,需要访问服务器的Servlet,但是我们知道访问是根据HTTP协议的,⽽这种⽅式去请求服务器前,会检查本地有没有这个请求的响应,如果有就从缓存中读取上次的响应的内容,如果这样更新验证码的时候每次都从缓存中取值了,所以⼀般在刷新请求的时候后⾯添加⼀些随机参数,避免重复请求⽽导致从缓存中取到上次的值。
⼀、Servlet概述:1、http的报头很有⽤,servlet接受到被http协议修饰过的请求,请求和http相关的信息都可以被servlet拿到处理,当然也可以对相应中的内容和http处理。
2、servlet可以不要忘了,init⽅法执⾏前,也就是在服务器启动时候,浏览器未访问前预处理些东西。
3、对servlet来说,记住⼀句话:从客户端发出的请求(http+请求),可以被servlet接受和响应,同时请求信息通常是可以在⼀个共享容器(ServletContext)内存储和取出。
4、Servlet接⼝->GenericServlet⼦类->HttpServlet孙⼦类5、Servlet是⼀个在服务器端运⾏的JAVA类,其实是服务器通过反射得到的类,因为利⽤反射才能得到类,所以必须给出类名(在web.xml中配置,服务器在通过解析XML⽂件得到类名,在反射出类,调⽤其⽅法);客户端发出请求,是以http协议发出,因此服务器必须能够解析http和封装的信息,为了更好的⽅便信息的传递,服务器按照servlet协议实现⼀系列的“⼩功能”,ServletContext/包括JSP的内置对象;利⽤这些“⼩功能”,不同的功能处理不同内容,例如:response负责封装详响应内容(包括http相关),客户端传递过来的信息被request封装处理(包括http相关),全局容器ServletContext,代表当前WEB应⽤,所有Servlet共享和request对象都是域对象可以封装数据;它可以获取WEB全局初始化参数、数据共享、访问资源⽂件:因为我们的程序是放在服务器上的,通常我们不关⼼⽂件等资源的路径,但是我们要操作⽂件,没有路径怎么处理,ServletContext就提供两种⽅法:Properties pro= new Properties();//这⾥使⽤getResourceAsStream来读取⽂件pro.load(getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"));//这⾥使⽤的传统输⼊流读取⽂件,⾸先还需要⽤到ServletContext对象获取真实⽂件路径才⾏pro.load(new FileInputStream(getServletContext().getRealPath("/WEB-INF/classes/db.properties")));这些封装的过程都是服务器⾃动按照servlet协议⾃动完成,最后我们只需要拿着这些封装好的内置对象使⽤即可;public class PubServlet extends HttpServlet {@Overridepublic void init() throws ServletException {System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓<ABO初始化:预处理开始>↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");String servletName=getServletConfig().getServletName();System.out.println("ABO:---->servletName:【"+servletName+"】");Enumeration <String > enums=getServletConfig().getInitParameterNames();while(enums.hasMoreElements()){String param=enums.nextElement();String passvalue=getInitParameter(param);System.out.println("ABO:---->ParameterValues:【"+passvalue +"】");}getServletContext().setAttribute("num", 0);System.out.println("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑<ABO初始化:预处理结束>↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓<ServletContext⽰例开始>↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");System.out.println("ServletContext:1.获取WEB全局初始化参数。
1Servlet1.1Servlet概述1.1.1什么是Servlet?由SUN公司提供的一种动态WEB资源开发技术, 本质上就是一段java程序, 只不过这段java 程序无法独立运行, 需要放在Servlet容器中由容器调用才可以执行!1.1.2如何开发servlet(1)写一个类, 实现Servlet接口, 并实现其中的方法(2)将编译后的class文件放在WEB应用中, 并在web.xml文件中配置该Servlet对外访问的虚拟路径.1.1.3案例: 手写一个servlet详细步骤参见: /FristServlet/手写一个servlet.txt1.2使用myeclipse开发servlet使用myeclipse开发Servlet程序时, 可以新建一个Servlet, 默认继承HttpServlet, 在Servlet内部会覆盖doGet和doPost方法, 分别来处理GET和POST请求.1.2.1将tomcat配置到myeclipse中详细步骤见:1.2.2在myeclipse下修改web应用发布到tomcat中web应用目录的名称1.3Servlet的继承结构(!!重要)Servlet接口–提供了一个Servlet应该具有的最基本的功能||-- GenericServlet类, 实现了Servlet接口, 并实现了其中大部分的方法, 但是service方法没有实现, 这个方法需要开发人员自己去实现||-- HttpServlet类, 继承了GenericServlet, 并实现了service方法, 在service方法中是根据不同的请求方式, 调用不同的doXxx方法, 因此我们在开发中, 只需要写一个类, 继承HttpServlet, 并覆盖doGet()和doPost()方法分别来处理Get请求和POST 请求即可!!1.4Servlet调用过程1.4.1Servlet调用过程参照<<servlet调用图解>>1.4.2Servlet生命周期Servlet实例在第一次被访问时创建, 创建之后服务器会立即调用init方法进行初始化的操作, 从此以后该实例会一直驻留在服务器的内存中, 为后续的请求服务, 只要有请求访问servlet, 服务器就会调用service方法来处理这个请求, 直到服务器关闭或者是web应用被移出容器时为止, 随着web应用的销毁, servlet实例也会跟着销毁, 在销毁之前, 服务器就调用destroy方法进行善后的处理.1.5servlet虚拟路径的配置在web.xml中的servlet对外访问的虚拟路径的配置, 可以直接写一个路径, 或者通过 * 号匹配符写一个路径.直接写一个路径: /servlet/SecondServlet通过*号匹配符写一个路径:(1)以 / 开头, 以 /* 结尾, 如: /servlet/* /a/* /*(2)以 *.后缀的形式, 如: *.html *.servlet *.do *.action使用*号匹配符写路径, 路径的配置变得更加灵活, 但是也可能会造成, 一个url会被多个servlet Mapping所匹配http://localhost/day09/servlet/SecondServlet.doTest1: /servlet/*Test2: *.do规则:*.后缀的优先级永远最低!!哪一个更接近哪一个起作用!!示例:Servlet1 映射到 /abc/*Servlet2 映射到 /*Servlet3 映射到 /abcServlet4 映射到 *.do当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应Servlet引擎将调用Servlet1。
Servlet知识点一、什么是Servlet1.1 Servlet的定义•Servlet是Java编写的服务器端程序,用于处理客户端(浏览器)的请求并生成响应的动态网页。
•Servlet可以与浏览器进行交互,可以根据不同的请求作出不同的响应。
1.2 Servlet的优势•跨平台性:由于Servlet是基于Java编写的,所以可以在不同的操作系统上运行,如Windows、Linux、Unix等。
•高性能:Servlet通过复用线程、内存缓存等方式,可以提高服务器的性能。
•可移植性:Servlet可以在不同的服务器(如Tomcat、Jetty、WebLogic等)上部署运行,不受特定服务器绑定。
二、Servlet的生命周期2.1 Servlet的生命周期方法Servlet的生命周期由下面三个方法组成: - init方法:在Servlet第一次被创建时调用,用于进行初始化操作。
- service方法:每次请求时都会调用该方法,用于处理客户端的请求并生成响应。
- destroy方法:在Servlet被销毁时调用,用于释放资源。
2.2 Servlet的初始化参数Servlet可以通过web.xml配置文件或注解的方式设置初始化参数,这些参数在Servlet的init方法中可以被访问到。
2.3 Servlet的线程安全性•单例:Servlet是单例的,即每个Servlet只会创建一个实例,多个请求会并发访问同一个Servlet实例。
•线程安全性:对于非线程安全的操作,可以通过synchronized关键字或其他线程安全的方式进行处理。
三、Servlet的请求和响应3.1 Servlet的请求对象(HttpServletRequest)•请求行:包括请求方法(GET、POST等)、请求路径和HTTP协议版本。
•请求头:包含浏览器信息、Cookie、Session等。
•请求体:主要用于传递表单数据或文件上传。
Servlet笔记整理什么是servlet? 在Web服务器端加载并运⾏的Java应⽤程序具体运⾏在Servlet引擎管理的JVM上。
Servlet容器负责Servlet和⽤户的通信以及调⽤Servlet的⽅法。
Servlet和⽤户的通信采⽤请求/响应模式。
⽤于以动态响应客户机请求形式扩展Web服务器(Web Container)的功能。
Servlet是开发服务器端应⽤程序的⼀个很好选择, Servlet与JSP结合使⽤,能提供更强⼤的服务器端功能。
⼀个servlet就是Java编程语⾔中的⼀个类,它被⽤来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应⽤程序。
()Web服务器什么是Web服务器⽹络应⽤⼀般分为C/S和B/S两种C/S结构是Client/Server(客户机/服务器)的简称 , 桌⾯应⽤程序多采⽤这种结构 ,B/S结构是Browser/Server(浏览器/服务器)的简称 , 特点是客户端⽆需安装特定的软件 , 只需要安装浏览器即可与程序进⾏互动Web服务器是基于B/S结构 , 通过http协议进⾏数据交互(收发)http协议规定了发送数据的格式(报⽂格式)浏览器中发送和读取的格式都是固定的Web服务器需要能够接收和解析发来的符合http协议的请求报⽂ , 并调⽤对应的代码处理 , 再向浏览器发送符合http协议规范的响应报⽂请求报⽂格式 :请求报⽂实例 :GET /mytest HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0.......响应报⽂格式 :响应报⽂实例 :HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8Content-Length: length<? xml version = "1.0" encoding = "utf-8" ?>< soap12:Envelope xmlns:xsi = "/2001/XMLSchema-instance" xmlns:xsd = "/2001/XMLSchema" xmlns:soap12 = "/2003/05/soap-envelope" >< soap12:Body >< CancelOrderResponse xmlns = "https:///webservices2.3" >< CancelOrderResult >< Success >boolean</ Success >< ErrorDescription >string</ ErrorDescription >< ErrorNumber >int</ ErrorNumber >< CustomerOrderReference >long</ CustomerOrderReference >< OrderConfirmation >string</ OrderConfirmation >< CustomerDealRef >string</ CustomerDealRef ></ CancelOrderResult ></ CancelOrderResponse ></ soap12:Body ></ soap12:Envelope >浏览器与服务器的交互过程简单图解 :常见的名词解释Web应⽤ , http服务器 , Web应⽤服务器Web应⽤被称为Web Application , 通过浏览器访问的应⽤程序 , 从⽽为⽤户提供相关的服务 , 例如查询购物等 ; 也包含很多公司内部软件 , 如oa系统 , 医院内使⽤的系统http服务器 : 也称为Web服务器 , 主要功能是提供⽹上信息浏览服务 , 例如Apache Nginx是⽐较常⽤的http服务器 ; 使⽤浏览器访问Web站点或Web应⽤ , 则必须通过http服务器Web应⽤服务器 : Web应⽤服务器能够运⾏服务器上的应⽤程序 , 并将结果返回给客户端浏览器 , 例如tomcat就是⼀种Web应⽤服务器 , 通常情况下 , Web应⽤服务器兼具http服务器的部分功能注意 : Web应⽤需要http服务器及Web应⽤服务器 , 因为不仅需要浏览信息 , 还需要运⾏应⽤程序 ; 但是tomcat以兼具了http服务器的部分功能 , 所以运⾏web应⽤可以直接使⽤tomcat开发Web应⽤的语⾔java .net php等语⾔均可开发Web应⽤ ; Java开发Web应⽤最⼴泛 ; 官⽅在JavaEE中提供了Servlet JSP组件来开发Web应⽤TomcatTomcat介绍Tomcat⽬录结构⽬录⽤途/bin存放windows或linux平台上⽤于启动和停⽌Tomcat的脚本⽂件/conf存放Tomcat服务器的各种配置⽂件 , 其中最重要的就是server.xml/lib存放Tomcat服务器所需的各种JAR⽂件/logs存放Tomcat运⾏中产⽣的各种⽇志/temp存放Tomcat服务器在运⾏中产⽣的临时缓存/webapps存放Tomcat发布的Web应⽤/work Tomcat把由JSP⽣成的Servlet放于此⽬录下启动和停⽌tomcat服务器可通过apach解压⽬录中的startup.bat/shoutdown.bat来启动或停⽌tomcat在浏览器地址栏输⼊ : http://127.0.0.1端⼝号或http://localhost:端⼝号 , 页⾯进⼊到Tomcat启动成功页⾯Tomcat默认端⼝号为-8080可以在conf中的server.xml中修改tomcat端⼝号<Connector port="8080" protocol="HTTP/1.1 "connectionTimeout="20000" redirectPort="8443 "/>Tomcat在idea中的配置1. 在idea的setting中配置tomcat路径2. 创建项⽬或模块时 , 选择java enterprise(也叫javaEE企业应⽤) , 检查Tomcat服务器是否配置成功 , 并勾上webAppliciation⾃动创建web.xml⽂件(web项⽬核⼼⽂件 ,必须创建)写模块名3. 项⽬会⾃动配置完成 , 再设置项⽬跟路径(建议设置)完成以上配置可以直接启动服务器备注 : 由于idea中相关配置为⾃动配置 , 如果服务器启动异常 , 可以检查下图配置1. 读取web⽬录的路径web.xml⽂件路径是否正确2. 项⽬打包策略是否正确 , 便以⽂件路径是否正确(WEB-INF/classes)其他Web服务器Jetty : 更轻量级 , 更灵活 , 被⼀些框架继承 , 免费JBoss : JBoss⽀持JavaEE标准 , 能够作为JavaEE应⽤服务器使⽤ , servlet容器只是其中⼀部分 , 免费Weblogic : 市⾯上最好的J2EE⼯具之⼀ , 功能⼤⽽全 , 收费ServletServlet介绍servlet是JavaEE规范中的开发组建servlet运⾏在服务器端 , 需要servlet容器⽀持 , 例如tomcat(运⾏在tomcat中)可以通过浏览器访问servlet , servlet可以⽣成动态页⾯返回给服务器编写servletpublic class TestServlet extends HttpServlet {//继承httpservlet 重写doGet doPost⽅法protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理代码}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}Web.xml中配置<servlet><servlet-name> TestServlet </servlet-name><servlet-class>com.javasm.servlet. TestServlet </servlet-class></servlet><servlet-mapping><servlet-name> TestServlet </servlet-name><url-pattern>/TestServlet </url-pattern></servlet-mapping>配置中 :servlet-name相同作为同⼀组配置servlet-class配置完整包名类名url-pattern配置开⽅访问路径 , 该路径为虚拟路径配置时也可以使⽤注解进⾏配置@WebServlet("/配置访问路径")注意 : 配置⽂件和⽤注释配置作⽤相同 , 只选⽤⼀种⽅式 , 不建议两种同时使⽤Servlet实现⽅法实现servlet的三种⽅式 : ⼀个实现 , 两个继承1. 实现servlet接⼝2. 继承GenericServlet抽象类 , 重写service()⽅法3. 继承HttpServlet抽象类(Httpservlet继承于GenericServlet) , 重写doGet() doPost()⽅法Servlet⽣命周期Servlet其他配置参数servlet中配置初始化参数 , 可以在servlet中直接读取配置中:<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.javasm.servlet.HelloServlet</servlet-class><init-param><param-name>testParam</param-name><param-value>Hello Servlet</param-value></init-param></servlet>代码中:String initParam = getInitParameter("testParam");配置servlet其中顺序 : load-on-startup<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.javasm.servlet.HelloServlet</servlet-class><load-on-startup>1</load-on-startup></servlet>注意 : 如果配置了loat-on-startup , servlet实例会在项⽬启动时加载 , 并按照load-on-stratup中配置的顺序加载 , 如果不加load-on-startup , 实例会在有请求访问到该servlet时实例化Servlet中处理乱码Servlet运⾏在Web服务器(tomcat)中 , tomcat默认对传递的数据使⽤ios-8859-1进⾏编码 , 传递中⽂⽆法正常显⽰乱码分为两种情况 :请求乱码 :如果数据在传递时是正常中⽂ , 但是在servlet中取出是乱码 , 需要在请求对象中设置编码格式 , 对请求数据进⾏重新编码request.setCharacterEncoding("UTF-8");响应乱码 :如果数据在servlet中是正常中⽂ , 到页⾯中显⽰乱码 , 则需要在响应对象中设置相应头 , 让页⾯指定以何种编码格式解析相应数据response.setContentType("text/html;charset=UTF-8");实例代码:package com.javasm.controller;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//请求乱码 req.setCharacterEncoding("utf-8");//响应乱码 resp.setContentType("text/html;charset=utf-8");req.setCharacterEncoding("utf-8");String uname = req.getParameter("uname");System.out.println(uname);resp.setContentType("text/html;charset=utf-8");PrintWriter pw = resp.getWriter();pw.print("hello! <h1>"+uname+"</h1>");pw.flush();pw.close();}}Servlet跳转页⾯的重定向和转发重定向重定向过程简单解释 :浏览器发送请求给服务器 , 服务器⽆法处理浏览器发送的请求 , 转⽽让浏览器找其他服务器去完成请求 , 此过程⼀直进⾏ , 直到任务完成特点 :1. 重定向是客户端⾏为(浏览器重新请求)2. 重定向是浏览器做了⾄少两次访问请求(有可能重定向多次)3. 重定量使浏览器地址改变4. 重定向两次跳转之间传输的信息会丢失5. 重定向可以指向任何的资源 , 包括当前应⽤程序中的其他资源 , 同⼀个站点上的其他应⽤程序资源 , 其他站点的资源(如⾃⼰⼯程重定向到百度)注意 :传递给HttpServletResponse.sendRedirect⽅法的响应URL以"/"开头 , 它是相对于整个web站点的根⽬录重定向代码实现转发原理 :转发过程简单解释 :浏览器请求服务器 , 服务器⽆法完成浏览器请求 , 将请求直接交给其他服务器⽽不是再响应给浏览器 , 再服务器转发的过程中携带浏览器给服务器的数据特点 :1. 转发是服务器⾏为(不经过浏览器)2. 转发过程中浏览器只做了⼀次响应3. 转发过程中浏览器地址不变4. 转发过程中服务器之间的信息传⼊信息不会丢失 , 可以通过request传递数据5. 转发只能将请求转发给同⼀个Web应⽤的组件注意 : 如果创建RequestDispatcher对象时指定的相对URL以"/"开头 , 它是相对于当前Web应⽤程序的根⽬录(只能是本⼯程下 , 因为是服务器⾏为)转发代码实现总结 :重定向和转发都是⽤来在servlet中跳转页⾯ , 但是有很⼤区别 , 重定向是浏览器的⾏为 , 转发是服务器的⾏为 , 所以重定向加⼤了带宽 , 转发加⼤服务器压⼒ , 对于参数传递也需要注意 , 重定向会使参数消失 , ⽽转发数据仍然存在 , 对于跳转的页⾯ , 重定向可以跳转⾄其他项⽬或⽹站 , 转发只能在⾃⼰⼯程下跳转路径相关注意 :绝对路径⼀般⽤在跳转其他⽹站 , 相对路径尽量避免使⽤ , 根路径则⼤多数情况都试⽤Servlet线程特性当多个客户端同时请求访问⼀个servlet , web服务器如何处理多个请求?多⽤户访问时 , servlet会针对每个请求开启新线程来处理数据收发 , 因为对每个请求的处理是固定的 , ⼀次请求收发就结束第⼀次访问servlet时 , 服务器将创建⼀个该servlet类的对象 , 并调⽤doXXX()⽅法⽣成响应 ; 多个客户端访问同⼀个servlet时 , 不再创建新的对象 , ⽽是共同⽤⼀个servlet对象 ,可以说 , servlet是多线程单实例的注意 : 多线程访问单实例的情况下 , 会不会产⽣线程安全问题 ?每个线程间 , 栈是独⽴的 , 运⾏⽅法时 , 会压⼊栈帧 , 所以运⾏⽅法时线程不会相互影响 , 因为单实例 , 所以如果servlet中有成员变量 , 那么所有县城都会放问道同⼀个实例的成员变量 , 会造成线程安全问题所以使⽤servlet时 , 尽量不要建⽴成员变量Servlet域对象域对象 , 是指服务器交互过程中可以⽤来存储数据的空间 , 相互独⽴ , ⽣效的时机不同 , 都可以⽤来存储信息Servlet三⼤域对象的应⽤request⼀个⽤户可以有多个每次请求都会产⽣⼀个请求结束对象消失建议⽤于页⾯间值传递Seesion⼀个⽤户⼀个每个浏览器都会产⽣⼀个会话过期或者关闭浏览器对象消失建议存放⼀些⽤户信息 , 不要把过多的信息存放在session⾥ServletContext(appliciation)全局只有⼀个是⼀个全局的存储信息空间 , 服务器开始就存在 , 服务器关闭才释放为了节省空间 , 提⾼效率 , 只存放少量重要的信息域对象统⼀⽅法 :返回值类型⽅法名⽅法作⽤void setAttribute(String key , Object value)以key/value的形式保存对象值Object getAttribute(String key)通过key获取对象值Servlet中常⽤类和⽅法ServletContext接⼝⽅法说明public void setAttribute (String name , Object object)绑定⼀个java对象和⼀个属性名 , 并存放到ServletContext中 , 参数name指定属性名 , 参数Object表⽰共享数据public Object getAttribute (String name)根据参数给定的属性名 , 返回⼀个Object类型对象public String getContextPath()返回当前web应⽤的URL⼊⼝public String getIntiParameter(String name)返回Web应⽤范围内匹配的初始化参数值 , 在web.xml中元素中元素表⽰应⽤范围内初始化的参数ServletConfig接⼝⽅法说明public string getInitParameter(String path)获取web.xml中指定Servlet的初始化参数值public ServletContext getServletContext()回去ServletContext实例public String getServletName()回去当前Servlet的名称HttpRequest(很常⽤)⽅法说明public String getParameter(String name)获取页⾯提交制定名称的参数值public string[] getParameterValues(String name)获取页⾯提交相同该名称参数的数组值public void setCharacterEncoding("UTF-8")设置请求字符编码格式public Map getParameterMap()返回⼀个保存了请求的所有参数和值的map对象public Object getAttribute(String name)返回⼀个请求中属性名为name的属性值public void setAttribute(String name , Object obj)向request范围内设置属性 , 参数name为属性名 , obj为属性值public String getContextPath()返回当前Web项⽬的跟路径Request对象中封装了很多跟http路径相关的⽅法request.getContextPath(); 项⽬名(/WebDemo)request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath+"/"结果为 : http://localhost:8080/WebDemo/request.getRemoteAddr() 客户端IP地址request.getServletPath() 请求的servlet的地址/studentrequest.getRealPaht("/") 在tomcat中的路径request.getRequestURL(); 获取请求路径/web_demo/studentHttpResponces⽅法说明public PrintWriter getWriter()获取响应的打印输出流对象public void setContexttype("text/html;charset=UTF-8")设置响应内容的类型和字符编码格式response对象中主要封装跟输出信息相关的⽅法HttpSession⽅法说明setAttribute(String key , Object value)以key/value的形式保存对象值getAttribute(String key)通过key获取对象值setMaxInactiveInterval()设置session的有效⾮活动事件 , 以秒为单位getId()获取session对象的编号invalidate()设置session对象失效session使⽤ :HttpSession session = request.getSession()从request中获取会话(session)对象 , 每个浏览器都会产⽣单独的session对象session作为会话对象 , 经常⽤来保存⽤户相关的登陆信息 , ⽅便服务器调⽤(⽤户本⾝信息 , 权限信息等)案例 :⽤户登录 , 通过session做是否已登录的访问控制登陆时将⽤户对象放在session中 , 访问其他服务时先判断⽤户是否登陆 , 有则进⾏服务 , 没有提⽰未登陆 ,session登陆案例。
一、Servlet1.是什么:servlet是一个小应用程序(处理网络请求,是一个java类)2.作用:处理从客户端发送的请求及服务端的响应。
3.开发步骤:a)写一个类ServletDemo1,继承javax.servlet.GenericServlet类,实现service方法b)打开web.xml文件,做如何配置c)部署到服务器上d)打开浏览器,通过http://localhost:8080/day08_00_servlet/abc访问.4.Servlet的执行调用过程(清楚)5.servlet的生命周期(牢记)public void init(ServletConfig) ; 初始化方法public service(ServletRequest,ServletResponse) ; 服务方法public destroy() ; 销毁方法servlet的创建方法:两种默认情况下,servlet对象在第一次请求的时候调用构造函数创建,创建之后自动调用带参的init方法,然后调用service方法.destroy方法在停止服务器或者停止应用的时候调用。
整个过程中,init方法和destroy方法只会调用一次,而service方法会反复调用。
●可以通过配置web.xml文件来改变创建servlet的时机.配置如下此时在服务器启动的时候就创建对象并进行初始化了.此Servlet对象在服务器停止或者应用停止时才死亡.(<load-on-startup>必须从2开始,因为1的话已经在默认的web.xml中的default中已经引用了)6.url配置(掌握)两种:●(以/开始,/代表的是web程序的根目录,可以是/abc/tt.ff但是/*.后缀名是绝对不允许的,*.abc是可以的,*代表的是任意东东)●配置优先级:精确匹配> 以/开头的匹配> 以*开头的匹配●如果配置成/(仅有有一个/,那就是默认的servlet,就是配置所有找不到的URL的servlet)那么就是一个缺省的servlet,此Servlet处理所有找不到匹配路径的url.一个servlet可以配置多个url-pattern7.servlet的创建问题(掌握)创建一个servlet有3中方式:1)采用实现servlet接口, (不推荐)2)采用继承GenericServlet类( 不推荐)3)采用继承HttpServlet(推荐)(我们通常是继承HttpServlet,分发的概念给doget或者dopost方法,就不用写servlet方法了。
Servlet/JSP学习笔记(1)tomcat和eclipse的安装由于项目需要,最近不得不开始学习JSP和Struts了。
三年前曾经学过JSP,而且还做过一个小程序,不过现在早已经扔到九霄云外去了。
为了不落后于时代,决定开始从今天学习JSP!虽然我很喜欢用vim,但开发Java程序首选环境是eclipse,咱也不能太无知了啊。
所以安装eclipse是第一件事儿。
另外Web服务器Tomcat也是必不可少的。
下面是各个软件的下载链接。
∙Tomcat 5.5.25, Tomcat服务器∙eclipse 3.2.2, eclipse∙tomcatPlugin 3.2.1, eclipse的Tomcat插件eclipse我没有使用最新版本的3.3,而是用了稍老些的3.2.2。
这个旧版本的还真不好找,你如果是从eclipse的主页上进入下载页的话,应当选择右侧的Browse downloads中的By Project,然后选择Eclipse Platform,才能到达上述的下载页面。
至于JDK,大家应该都知道怎么装我就省略了。
不多说了,马上开始安装。
首先是Tomcat 6的安装,没什么特别的,只是默认的安装路径太长 (C:\Program Files\Apache Software Foundation\Tomcat 5.5),我将其改到了 D:\wwwroot\Tomcat 5.5 下,然后设置管理员密码,一路Next就OK了。
安装完毕之后可以直接启动Tomcat 5,也可以打开命令行输入以下命令手动启动Tomcat:net start tomcat5最后打开 http://localhost:8080/ ,能看到Tomcat的猫的形象则安装成功了。
eclipse不用安装,解压缩即可,我将其放到了 D:\eclipse 下。
最后是tomcatPlugin的安装,这个插件可以让你在elipse中重启tomcat,并提供JSP项目的自动发布、调试等功能,做JSP开发的首选插件之一。
1servlet1.1第一个servlet1.普通的java类2.继承javax.servlet.http包中的HttpServelt3.重写doGet()4.按照tomcat的应程程序目录约定组装应用程序WebAppWEB-INFclasseslibweb.xml5.定义servlet与请求url地址的映射<servlet><servlet-name>servlet04</servlet-name><servlet-class>.leadfar.MyServlet</servlet-class> </servlet><servlet-mapping><servlet-name>servlet04</servlet-name><url-pattern>/servlet/lifeCycle</url-pattern></servlet-mapping>5.WEB请求响应过程客户端浏览器服务器TomcatMyServlet4: 输入url 地址(http://localhost:8080/first/servlet1)1: 启动tomcat3: 监听8080端口5: request(get)6: 读取请求信息7: 截取URL 路径8: 取出应用程序名称(first)9: 取出路径(/servlet1)2: 装载应用程序(如first)10: 根据url-pattern 找到对应的servlet-mapping11: 分析出servlet-name(MyServlet)12: 通过名称MyServlet 找到对应的Servlet(class 的全路径)13: 通过反射创建14: 能够获取该请求为Get 请求15: doGet(request,response)16: 设置mime 17: 设置编码18: 输出内容19: response1.2.servlet 生命周期1.servlet 是单例,因此注意实例变量的使用,易造成线程不安全2.init()和init(config)都重写init(config)只会被执行3.init()方法是与servelt 实例产生是同步的,当调用构造器实例化servlet 后马上会执行init()4.默认的servlet 实例产生是在第一次请求时5.应用服务器启动的时候初始化(load-on-startup 参数)负数或不配置,则意味着顺序不固定,一般就是第一次访问的时候初始化 正数或0,表示在部署或应用服务器启动的时候初始化,数字越小,表示会优先加载(按顺序从小到大依次加载和初始化)<servlet ><servlet-name >servlet05</servlet-name ><servlet-class >.leadfar.MyServlet02</servlet-class > <load-on-startup >5</load-on-startup > </servlet >6.在web.xml 中配置servlet 的启动时初始化的一些程序配置参数<servlet><servlet-name>servlet05</servlet-name><servlet-class>.leadfar.MyServlet02</servlet-class><init-param><param-name>schoolName</param-name><param-value>清华大学</param-value></init-param><load-on-startup>5</load-on-startup></servlet>7.访问配置参数public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub//super.init(config);System.out.println(“ ServletConfig init()................”);name=config.getInitParameter(“schoolName”);System.out.println(name);}1.3doGet()和doPost()1.除了form表单设置method=”post”之外全部为post方式提交,post方式将决定执行doPost()2.实际上父类的service方法是servlet的总开关,它将取得http请求中的请求方式,并转向servlet的对应的方法,因为不要随意重写service方法。
Servlet学习笔记Servlet的基础概念1. Servlet是什么?答:1) 模块化的程序,运行在服务器端,增强了请求/响应导向服务;2) 应用示例:a. 访问远端对象;b. 跟踪大量信息;c. 多用户协作2. HTTP和Servlets答:1) Servlet是HTTP协议中作为CGI的一个替代品;2) HttpServlet类用于开发HTTP为基础的Servlet3. HttpServlet答:1) 继承抽象类javax.servlet.GenericServlet,实现接口java.io.Serializable;2) 用以开发Http协议为基础的Servlet4. 服务方法答:1) 每当服务接收到对Servlet的请求时,服务器就会产生一个新线程,并调用Service。
service 方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并相应地调用doGet、doPost、doPut、doDelete 等。
2) doGet/doPost方法接收HttpServletRequest和HttpServletResponse对象。
3) 99%的时间里,只需注意GET和/或POST请求;4) 没有任何doHead方法。
5. 返回响应答:1) PrintWriter out = response.getWriter // 用于返回文本数据给客户端2) ServletOutputStream out = response.getOutputStream // 用于返回二进制数据给客户端6. 支持Servlet的Web服务器答:1) J2EE应用服务器包括:Web Container和EJB Container;2) Web Container的Servlet Engine提供对Servlet的运行支持;用Servlet处理表单数据1. Form元素的属性答:1) ACTION: 用来指定要处理FORM数据的Servlet的URL,也可以指定FORM数据将要发送到的电子邮件;2) METHOD: 指定数据传送给HTTP服务器的方法;3) ENCTYPE: 指定数据在传输之前进行编码的方式, 例multipart/form-data 编码将每个字段作为MIME可兼容的文档的单独部分传输。
Java-Servlet知识总结Servlet概述为什么要学习ServletJava Web的演变过程⼤概可以分为4个阶段:Servlet + jdbc + jspSpring + Struts2+ Hibernate(SSH)Spring + SpringMVC + Mybatis(SSM)微服务阶段前两个阶段基本上可以说是历史了,当今Spring家族⼀统天下。
现在实际开发中很少直接使⽤Servlet了,但是各个框架的底层还是⼤量使⽤了Servlet,学习Servlet对后续各个框架的理解和学习都很有帮助。
什么是 ServletServlet 是运⾏在 Web 服务器或应⽤服务器上的程序,它是作为来⾃ Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应⽤程序之间的中间层。
Servlet其实就是⼀个遵循Servlet开发的java类。
Serlvet是由服务器调⽤的,运⾏在服务器端。
Servlet带给我们最⼤的作⽤就是能够处理浏览器带来HTTP请求,并返回⼀个响应给浏览器,从⽽实现浏览器和服务器的交互。
⼯作流程Tomcat将浏览器提交的请求封装成HttpServletRequest对象,同时将输出流封装成HttpServletResponse对象Tomcat把request、response作为参数,调⽤Servlet的相应⽅法,例如doGet(request, response)等Servlet中主要处理业务逻辑⽣命周期在 Web 容器中,Servlet 主要经历 4 个阶段,如下图:加载Servlet。
当Tomcat第⼀次访问Servlet的时候,Tomcat会负责创建Servlet的实例初始化。
当Servlet被实例化后,Tomcat会调⽤init()⽅法初始化这个对象处理服务。
当浏览器访问Servlet的时候,Servlet 会调⽤service()⽅法处理请求销毁。
Servlet学习笔记Java相关课程系列笔记之九笔记内容说明Servlet(程祖红老师主讲,占笔记内容100%);目录一、Servlet概述 (1)1.1 B/S架构(了解) (1)1.2什么是Servlet (1)1.3什么是Tomcat (2)1.4如何写一个Servlet(不使用开发工具) (3)1.5使用MyEclipse开发Servlet (4)1.6 Servlet是如何运行的 (6)1.7常见错误及解决方式 (6)1.8案例:根据请求次数显示结果和显示当前时间 (6)二、HTTP协议 (8)2.1什么是HTTP协议 (8)2.2通讯的过程 (8)2.3数据格式 (8)2.4 TCP/IP Monitor的使用 (9)2.5 get请求与post请求 (9)2.6如何读取请求参数 (9)2.7访问数据库(MySql) (9)2.8案例:添加员工(访问MySql数据库) (10)2.9异常:IllegalStateException (11)三、编码问题 (12)3.1 Java语言在内存当中默认使用的字符集 (12)3.2编码 (12)3.3解码 (12)3.4 Servlet如何输出中文 (12)3.5如果表单有中文参数值,也需要注意编码问题 (12)3.6案例:根据请求正确显示中文 (12)3.7将中文数据插入到数据库 (13)四、重定向 (14)4.1什么是重定向 (14)4.2如何重定向 (14)4.3注意两个问题 (14)4.4两个特点 (14)4.5重定向原理图:以2.8案例为例 (14)五、DAO (15)5.1什么是DAO (15)5.2如何写一个DAO (15)5.3工厂类 (15)六、工厂设计模式 (16)6.1什么是工厂 (16)6.2使用工厂设计模式的好处 (16)6.3如何使用工厂模式 (16)6.4案例:为2.8案例添加新功能,并使用DAO和工厂模式 (16)1七、Servlet容器处理细节 (19)7.1 Servlet容器如何处理请求资源路径以及匹配 (19)7.2一个Servlet如何处理多种请求 (19)八、Servlet的生命周期 (20)8.1 Servlet的生命周期的含义 (20)8.2 Servlet生命周期的四个阶段 (20)8.3实例化 (20)8.4初始化 (20)8.5就绪 (20)8.6销毁 (21)8.7 Servlet生命周期图 (21)8.8 Servlet生命周期相关的几个接口与类 (21)九、JSP(简要介绍,详细内容见JSP笔记) (23)9.1什么是JSP (23)9.2为什么要使用JSP (23)9.3 JSP与Servlet的关系 (23)9.4如何写一个JSP文件 (23)9.5 JSP是如何运行的 (23)9.6指令 (24)9.7案例:创建emplist.jsp页面,将表示逻辑交给JSP处理 (24)十、请求转发 (26)10.1什么是转发 (26)10.2如何转发 (26)10.3编程需要注意的两个问题 (26)10.4转发原理图 (26)10.5转发的特点 (27)10.6转发和重定向的区别 (27)10.7何时用重定向 (27)10.8何时用转发 (27)10.9案例:修改6.4案例中step7中的ListEmpServlet.java (28)十一、异常的处理 (30)11.1用输出流out (30)11.2用转发的方式 (30)11.3让容器处理系统异常 (30)11.4案例:将10.9案例中的step3中的所有catch块修改 (30)十二、路径问题 (31)12.1什么是相对路径 (31)12.2什么是绝对路径 (31)12.3如何写绝对路径 (31)12.4如何防止硬编码 (31)12.5案例:相对、绝对路径对比 (31)12.6四种情况下,正确的绝对路径写法 (32)十三、状态管理 (33)13.1什么是状态管理 (33)213.3 cookie (33)13.4如何创建一个cookie (33)13.5查询cookie (33)13.6编码问题 (34)13.7 cookie的生存时间 (34)13.8 cookie的路径问题 (34)13.9 cookie的限制 (35)13.10案例:写一个CookieUtil (35)13.11 session(会话) (36)13.12如何创建一个session对象 (36)13.13 HttpSession接口中提供的常用方法 (36)13.14 session的超时 (37)13.15用户禁止cookie以后,如何继续使用session (37)13.16 url重写 (37)13.17 session的优点 (37)13.18 session的缺点 (38)13.19案例:session验证和访问次数 (38)13.20案例:验证码 (39)13.21案例:购物车 (41)十四、过滤器 (45)14.1什么是过滤器 (45)14.2如何写一个过滤器 (45)14.3案例:敏感字过滤器 (45)14.4过滤器的优先级 (46)14.5初始化参数 (47)14.6优点 (47)十五、监听器 (48)15.1什么是监听器 (48)15.2容器会产生两大类事件 (48)15.3如何写一个监听器 (48)15.4 ServletContext(Servlet上下文) (48)15.5如何获得Servlet上下文 (48)15.6 Servlet上下文的作用 (48)15.7案例:统计在线人数 (49)十六、上传文件 (51)16.1如何上传文件 (51)16.2案例:上传文件 (51)十七、Servlet线程安全问题 (53)17.1为何Servlet会有线程安全问题 (53)17.2如何处理线程安全问题 (53)十八、Servlet小结 (54)18.1 Servlet基础 (54)18.2 Servlet核心 (54)318.4数据库访问 (54)18.5过滤器和监听器 (54)18.6典型案例和扩展 (54)十九、其他注意事项 (55)19.1连接数据库的工具 (55)19.2知名网站 (55)19.3 C/S架构:Client/Server (55)19.4 B/S架构:Browser/Server (56)4一、Servlet概述1.1 B/S架构(了解)1)什么是B/S架构客户端使用浏览器,服务端使用web浏览器,客户端跟服务器之间使用HTTP协议进行通讯。
2)优点①客户端不需要单独安装(因为使用浏览器);C/S架构比较麻烦的是需要单独安装每个客户端,并且一旦客户端版本发生改变,就需要再次安装。
②开发相对简单;C/S架构需要我们分别在,客户端和服务器端编写相应的通信处理模块和自定义协议,而B/S架构使用标准的HTTP协议(即不再需要自定义协议),而且浏览器与Web服务器已经包含了相应的通信模块了。
1.2什么是ServletSun公司制订的一种用来扩展Web服务器功能的组件规范。
1)扩展web服务器功能早期(2000年左右)的Web服务器:apache的web server、微软的iis。
只能够处理静态资源(即需要事先将html文件写好),不能够处理动态资源的请求(即需要依据请求参数然后进行计算,生成相应的页面)。
为了让这些web服务器能够处理动态资源的请求,需要扩展他们的功能。
早期使用的是CGI技术(Common Gateway Interface通用网关接口),可以使用很多语言编写,如perl,C/C++等来开发CGI程序。
但是CGI程序有几个问题,比如开发比较复杂(因为需要程序员自己去分析请求参数)、性能不佳(因为当Web服务器收到请求之后,会启动一个CGI进程来处理请求)、CGI程序依赖平台(可移植性不好)。
现在,可以使用Servlet来扩展。
当浏览器将请求发送给Web服务器(比如:apcahe的web server),Web服务器会向Servlet容器发送请求,Servlet容器负责解析请求数据包。
当然,也包括网络通讯相关的一些处理,然后将解析之后的数据交给Servlet来处理(Servlet只需要关注具体的业务处理,不用关心网络通讯相关的问题)。
12◆ 注意事项:可以不使用服务器,而直接向Servlet 容器发送请求,因为Servlet 容器里面也有个通信模块,所以也可直接把Servlet 容器当作简单的Web 服务器来使用。
接下来,可以打开浏览器,输入 http://localhost:8080,验证是否配置成功。
②Windows系统下安装和配置的步骤step1:解压到某个盘下3step2:执行编译操作:javac -d . HelloWorldServlet.java但是会报错,找不到某些类!其中-d . 代表把编译后的文件放在当前文件夹下。
把Tomcat安装目录中common中lib中的servlet-api.jar和刚编写类放一起(是编译时需要用的jar)。
再次编译:javac -cp servlet-api.jar -d . HelloWorldServlet.java,其中-cp servlet-api.jar表示告诉Java编译器去哪里找需要的class文件(到servlet-api.jar的jar包中找)。
的webapps目录下)。
注意事项:也可以将step3创建的文件夹使用jar命令进行压缩,生成.war为后缀的文件,然后拷贝。
1.5使用MyEclipse开发Servletstep1:配置MyEclipse,使得MyEclipse能够管理Tomcat。
41)点击工具栏上的“Run/Stop/Restart MyEclipse Servers”图标旁边的下拉箭头,选择“Configure Server”。
2)在弹出的对话框“Preferences”中展开“MyEclipse”--“Servers”--“Tomcat”--“Tomcat5.X”◆注意事项:选择你目前电脑上Tomcat的版本,此处以Tomcat5为例。
3)将Tomat server选项置为“Enable”(默认为“Disable”)。
4)点击“Tomcat home directory”之后的“Browse”按钮,选择Tomcat主目录,确定,然后“Tomcat base directory”和“Tomcat temp directory”自动生成,点击“OK”。
◆注意事项:两项可改可不改的:Tomcat下的JDK--“Tomcat JDK name”是自己已安装的JDK(Tomcat也是java 写的也得依赖JDK)。