servlet学习

Servlet

1 概念

Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的WEB服务器端编程技术。一个Servlet程序就是一个实现了特殊接口的 Java类,它由支持Servlet(具有Servlet引擎)的WEB服务器调用和启动运行。一个Servlet程序负责处理它所对应的一个或一组URL地址的访问请求,并接收客户端发出的访问请求信息和产生响应内容。

2 servlet功能

获取客户端通过HTML的FORM表单递交的数据和URL后面的参数信息
创建对客户端的响应消息内容
访问服务器端的文件系统
连接数据库并开发基于数据库的应用
调用其它的Java类

3 servlet特点

Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。
Servlet引擎是一种容器程序,它负责管理和维护所有Servlet对象的生命周期。Servlet的加载、执行流程、以及如何接收客户端发送的数据和如何将数据传输到客户端等具体的底层事务,都是由Servlet引擎来实现的。Servlet引擎负责将客户端的请求信息转交给Servlet和将Servlet生成的响应信息返回给客户端。
Servlet属于一种插件,它是一个提供了一些约定方法供容器去调用的类,它只负责在自身的方法中接受并处理容器传递进来的数据,以及生成并返回给容器去使用的数据和状态信息。
Servlet的最常见应用在于读取WEB浏览器传递给WEB服务器的参数和生成WEB服务器返回给WEB浏览器的动态网页文档内容;Serlvet也能获取WEB浏览器发送的HTTP请求消息中的各个请求头和请求行信息,以及生成用于WEB服务器发送的HTTP响应消息中的状态行和响应头信息;Serlvet还能获取WEB服务器和Servlet引擎自身的一些环境和状态信息。
Servlet程序的运行过程就是它与Servlet引擎的交互过程,Servlet程序只与Servlet引擎打交道,它并不与Web服务器和客户端进行任何直接的交互。 
Servlet本身就是Java语言的一个应用,具有Java语言的所有优势,能完成普通Java程序所能完成的所有功能。
Web服务器上可以布置多个功能各不相同的Servlet,每个Servlet 都应宣称它可以处理何种样式的URL,当符合样式的URL请求到达时,Servlet引擎调用相应的Servlet进行处理。

4 servlet查询数据库的过程

servlet学习

5 servlet运行过程

1 Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步。
2 装载并创建该Servlet的一个实例对象。
3 调用Servlet实例对象的init()方法。
4 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
5 WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

6 servlet多线程机制

Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。
当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有 多个线程在使用这个实例。
Servlet容器会自动使用线程池等技术来支持系统的运行

servlet学习

7 Servlet、Servlet容器 与Servlet API的关系

servlet学习

8 doXxx方法

如果要在service方法中对不同的请求方式进行不同的处理,那么首先必须判断客户端的请求方式,然后通过选择语句对每种方式分别进行处理。
HttpServlet类为每一种HTTP请求方式都定义了一个对应的doXxx方法,例如,与GET请求方式对应的是doGet方法,与POST请求方式对应的是doPost方法。
HttpServlet中重载的Service方法根据客户端的请求方式,分别调用与之对应的doXxx方法来完成具体的处理和响应细节,并将它接受的两个参数传递给该doXxx方法,例如,如果HTTP请求方式为GET,则调用doGet方法。
HttpServlet中的doXxx处理方式是回应给客户端一条不支持该请求方式的信息,这就好比一个人虽然接听了你的电话,但他回话的内容却是“不认识你”。只要覆盖了doGet方法,即使没有覆盖doHead方法,Servlet也可以支持HEAD请求方式。
9 servlet session cookie  application

关于session和cookie 请看 http://my.oschina.net/tdd/blog/341545   http://my.oschina.net/tdd/blog/342064

用于保存整个WebApplication的生命周期内都可以访问的数据
在API中表现为ServletContext
通过HttpServlet的getServletContext方法可以拿到
通过ServletContext的 get / setAttribute方法取得/设置相关属性
10 Servlet中的请求转发

http://blog.csdn.net/redbednil/article/details/2127682

11 servlet生命周期 

1、只有一个对象
2、第一次请求的时候被初始化,只一遍 【类加载】
3、初始化后先调用init方法,只一遍
4、每个请求,调用一遍serviceservicedoGet/doPost。以多线程的方式运行
        4.1不要在servlet中设计成员变量。【涉及到多线程的同步问题,见6
5、卸载前调用destroy方法

12 乱码

    

场合:页面本身有中文的时候

解决办法:servlet:resp.setContentType("text/html;charset=gbk");

Jsp<%@ page contentType="text/html;charset=gb2312"%>

注意:一定要写在PrintWriter out = resp.getWriter();之前

场合:解决get方式乱码问题:

解决办法:修改server.xml àURIEncoding="GBK"

场合:解决post方式提交内容的乱码

解决办法:request.setCharacterEncoding("GBK");

注意:一定要写在存取第一个参数之前

不要调用response.setCharacterEncoding("GBK");

场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数

解决办法:<%request.setCharacterEncoding("GBK");%>

注意:

你可能感兴趣的:(java,servlet)