Servlet总结

更新时间:2024-07-03 01:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、什么是Servlet?

Servlet是服务器端的程序,是运行在WEB服务器或者应用服务器上的JAVA程序。是基于Http协议的,用于处理和响应客户端请求,可以将Servlet看作是一个含有HTML的JAVA程序。

3、认识什么是Web容器?

是用来管理组件行为的一个集合工具,组件的行为包括与外部环境的交互、组件的生命周期、

组件之间的合作依赖关系等等。

4、什么是组件?

本意是指可以重用的代码单元,一般代表着一个或者一组可以独立出来的功能模块。

特点是分别会打包成.war,.jar,.jar,.ear,每个组件由特定格式的xml描述符文件进行描述,

而且服务器端的组件都需要被部署到应用服务器上面才能够被使用。 如,Servlet-api.jar

5、Tomcat的配置、启动、测试

配置:2个主要的环境变量:

JAVA_HOME 指向JDK的安装目录

CATALINA_HOME 指向TOMCAT的安装目录

启动:控制台进入TOMCAT的安装目录下的bin目录,输入catalina.bat run。 测试:打开浏览器,输入http://127.0.0.1:8080/,

可以访问到tomcat的主页就表示启动成功。

6、Web应用框架

用户界面 Web服务器,中间件业务逻辑 后台存储系统:数据库 7、Web应用结构 主要分为两部分:

(1) WEB-INF目录,其中包含不能被客户访问的专用Web应用程序,包括Servlet类文件、部署描述符、外部类库等文件

(2) WEB-INF目录之外的文件都被看作是公共的,它们可以被客户端访问,包括HTML页面、JSP页面、和图像等文件

8、Servlet开发步骤 (1)编写Servlet类。

也是普通的Java类,该类实现Servlet接口、继承HttpServlet类、或继承间接实现了Servlet接口的类,简称为Servlet类。

(2)若实现Servlet接口,则Servlet类覆盖Service()方法;

若继承HttpServlet类,则Servlet类应重写doGet()方法或doPost()方法。 在Service(),doGet(),doPost()方法实现与客户交互的界面信息。 (3)配置Web.xml文件。

/*Servlet名字和物理路径*/

HelloServlet

com.tarena.serv.core.HelloServlet

/*Servlet名字和客户请求资源的url虚拟路径*/ HelloServlet /core/hello

(4)重启Tomcat服务器

9、Servlet工作流程

10、Servlet生命周期

11、Servlet接口、HttpServlet 类

1、Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。 (1)void init(ServletConfit config)

在servlet被载入后和实施服务前由servlet引擎进行一次性调用。

(2)void service(ServletRequest request, ServletResponse response) 处理request对象中描述的请求,使用response对象返回请求结果 (3)void destory()

当servlet将要卸载时由servlet引擎调用。

2、HttpServlet 类通过调用指定到HTTP请求方法的方法实现service()。

(1)void doGet(HttpServletRequest request,HttpServletResponse response) 由servlet引擎调用用处理一个HTTP GET请求。

输入参数、HTTP头标和输入可从request对象、response头标和response对象

的输出流中获得。

(2)void doPost(HttpServletRequest request,HttpServletResponse response)

由servlet引擎调用用处理一个HTTP POST请求。 (3)Service(Request request,Response response)

此方法实际上将请求导向doGet()、doPost(),不应该覆盖此方法。

12、ServletRequest接口、HttpServletRequest接口

1、ServletRequest接口封装了客户端请求的细节。它与协议无关。

ServletRequest主要处理: 1.找到客户端的主机名和IP地址 2.检索请求参数 3.取得和设置属性 4.取得输入和输出流

2、HttpServletRequest类(HTTP协议)

HttpServletRequest类主要处理: 1.读取和写入HTTP头标 2.取得和设置cookies 3.取得路径信息

4.标识HTTP会话。

13、ServletResponse接口、HttpServletResponse接口

1、ServletResponse对象将一个servlet生成的结果传到发出请求的客户端。

ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由servlet引擎创建.

2、HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL

中写入一Web页面的HTTP会话ID进行解码。

14、ServletContext接口

简称“Servlet上下文”。

Web应用中servlet可以使用servlet上下文得到:

1.在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。 2.读取Web应用中文件内容和其他静态资源的功能。 3.互相发送请求的方式。

4.记录错误和信息化消息的功能。

15、HttpSession接口

HttpSession类似于哈希表的接口,它提供了setAttribute ()和getAttribute()方法存储和 检索对象。HttpSession提供了一个会话ID关键字,一个参与会话行为的客户端在同一 会话的请求中存储和返回它。servlet引擎查找适当的会话对象,并使之对当前请求可用。

16、客户的Get和Post请求

Get请求的参数会显示到地址栏上,而Post不会

17、Servlet的多线程安全控制

servlet中需要同步的:成员变量、文件、静态变量、数据库连接。

(1)对变量和方法定义适当的访问方式, 例如单纯取值操作不会有多线程安全问题;

(2)同步化所有访问重要数据的实例变量; 多线程下,如果操作的是一个变量,且兼有读

写操作,就要考虑加上同步,但同步不能乱加,否则会造成死锁问题。 (3)给共享资源加上同步代码块(Synchronize )

18、Form表单的解析

客户端:form元素的属性

(1)action: 用来指定要处理form数据的Servlet的URL。 (2)method: 指定数据传送给HTTP服务器的方法. 服务器端:解析表单信息

(1)req.getParameter(String name): 返回表单中参数名(区分大小写)对应的参数值;

(2)req.getParameterNames(),可以获得一个迭代器Enumeration,通过这个迭代器,来获得

form表单中参数的名字.

(3)req.getParameterValues(String name) 返回表单中参数名(区分大小写)对应的字符串

数组

19、页面转发

(1)forward:上一页面请求信息会传递到下一页面,即请求对象包含的信息不变。 例:ServletContext application = getServletContext();

RequestDispatcher dispatcher = application.getRequestDispatcher(nextPage); dispatcher.forward(request, response);

(2)redirect:上一页请求不会传递到下一页面,即重开一新请求.

例:response.sendRedirect(nextPage);

19、MVC编程模型

20、Servlet中使用JNDI数据源访问数据库 步骤:

(1)、在Web工程目录下新建META-INF目录,其中放一个context.xml文件,内容是:

type=\ //绑定资源的类型

maxActive=\ //连接池最大连接数

maxIdle=\ //最大空闲连接数

maxWait=\ //请求数据源等待时间,-1代表无限等待 username=\password=\

driverClassName=\

url=\>

type=\ //绑定资源的类型

maxActive=\ //连接池最大连接数

maxIdle=\ //最大空闲连接数

maxWait=\ //请求数据源等待时间,-1代表无限等待 username=\password=\ driverClassName=\

url=\>

(2)、取得数据库连接

Context ctx = new InitialContext();

DataSource ds = (DataSource) ctx.lookup(\);

Connect con = ds.getConnection();

21、会话管理。为什么使用Session.

(1)、从同一客户打开浏览器连接到服务再到客户关闭浏览器可称为一次会话 (2)、一个客户向服务器发出请求然后服务器返回响应,连接就被关闭了。在服务器端不保

留连接的有关信息.因此当下一次连接建立时,服务器已没有以前连接的信息了,无法判断这一次连接和以前的连接是不是属于同一客户发出的。在实际应用中,客户进行一个事务性的操作可能需要对服务器进行好几次连接,这时维护前几次连接的状态就非常重要。

(3)、服务器必须能够区分不同的客户,而且还要有为每一个客户存储数据的方法。

22、会话管理。实现Session的三种方式

1、Cookie

(1)浏览器请求,服务器创建Cookie对象,设置Cookie名称、值和最大时效

Cookie userName = new Cookie(\, \); userName.setMaxAge(60 * 60 * 24 * 365);

Cookie password = new Cookie(\, \); (2)将Cookie对象使用HTTP响应报头返回给客户端

response.addCookie(userName);

response.addCookie(password);

(3)从客户端读取cookie信息。取得cookie数组,遍历数组. Cookie[] cookies = request.getCookies();

if (cookies != null) {

for (int i = 0; i < cookies.length; i++) { String username;

if (cookies[i].getName.equals(“username”)) String username = cookies[i].getValue(); //到数据库查询是否为该用户。 }

}

2、HttpSession

(1)获得当前请求的Session对象,调用getSession方法

HttpSession session = request.getSession();

(2)查找与会话相关联的信息,调用getAttribute方法,并转为相对应的类型。 Counter counter = (Counter) session.getAttribute(\); (3)查看从session得到的结果。

如果为null,则把new一新的对象调用setAtrribute方法存放入session中 如果不为null,则可直接对结果(对象)进行操作;

if (counter == null) {

counter = new Counter(1);

session.setAttribute(\, counter); } else {

counter.add(); }

3、URL重写

当浏览器不支持cookie或在用户禁用cookie的情况下,当客户第一次请求服务器时服

务器在返回资源的路径后添加多一个额外数据,即Jsessionid = xxx,当用户再次发送请求时把这个Jsession数据一同发送给服务器,服务器再根据这个Jsession值即可与特定的用户相关联,这称为“URL重写”

String pageURL = \; pageURL = response.encodeURL(pageURL);

这样处理后,pageURL = /serv-guides/state/session;jsession=xxxxxxxxx;

23、过滤器

过滤器是一些Web应用程序组件,可以绑定到一个Web应用程序中。但是与其他Web应用程序组件不同的是,过滤器是\链\在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发的响应信息返回到客户前访问这些响应信息。这种访问使得过滤器可以检查并修改请求和响应的内容。

24、过滤器编程,示例一:非法用户登陆

(1)继承于HttpFilter类,并覆盖doFilter()方法

public class SessionFilter extends HttpFilter { @Override

public void doFilter(HttpServletRequest request,

HttpServletResponse response, FilterChain chain) throws IOException, ServletException { //不符合条件的,响应客户转向指定的页面

response.sendRedirect(\); //符合条件的,转向客户所要请求页面 chain.doFilter(request, response);

}

(2)web.xml配置

SessionFilter

com.tarena.filter.SessionFilter

SessionFilter *.do

25、过滤器编程,示例二:字符编码过滤

(1)继承于HttpFilter类,并覆盖doFilter()方法

public class CharacterEncodingFilter extends HttpFilter {

@Override

public void doFilter(HttpServletRequest request,

HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String charset = getInitParameter(\); if (charset == null) { charset = \; }

//设计请求字符编码

request.setCharacterEncoding(charset); //转向客户所要请求页面

chain.doFilter(request, response); } }

(2)web.xml配置

CharacterEncodingFilter

com.tarena.filter.CharacterEncodingFilter

charset gbk

CharacterEncodingFilter /*

26、监听器

(1)ServletRequestListener

(2)HttpSessionListener (3)ServletContextListener

a. 这三个监听器接口,分别监听Servlet中3种对象(ServletContext、HttpSession

及ServletRequest)的创建和销毁。

b. 这三个接口中分别有监听该对象创建和销毁事件的方法

27、ServletContext事件监听器

1、对于应用程序而言得管理资源或保存状态 2、有二种类型的事件监听器:

(1)ServletContextListener(以下是该监听器的方法) contextDestroyed(ServletContextEvent sce) contextInitialized(ServletContextEvent sce)

(2)ServletContextAttributeListener(以下是该监听器的方法) attributeAdded(ServletContextAttributeEvent scab) attributeRemoved(ServletContextAttributeEvent scab) attributeReplaced(ServletContextAttributeEvent scab)

28、HttpSession事件监听器

1、管理从同一个客户端或用户向一个Web应用程序发出的一系列请求相关的 状态或资源;

2、有二种类型的事件监听器:

(1)HttpSessionListener(以下是该监听器的方法) sessionCreated(HttpSessionEvent se) sessionDestroyed(HttpSessionEvent se)

(2)HttpSessionAttributeListener(以下是该监听器的方法) attributeAdded(HttpSessionBindingEvent se) attributeRemoved(HttpSessionBindingEvent se) attributeReplaced(HttpSessionBindingEvent se)

29、ServletRequest事件监听器

1、管理整个request生命周期的状态 2、有二种类型的事件监听器:

(1)ServletRequestListener(以下是该监听器的方法) requestDestroyed(ServletRequestEvent sre) requestInitialized(ServletRequestEvent sre)

(2)ServletRequestAttributeListener(以下是该监听器的方法) attributeAdded(ServletRequestAttributeEvent srae) attributeRemoved(ServletRequestAttributeEvent srae) attributeReplaced(ServletRequestAttributeEvent srae)

30、监听器编程

1、监听器类,实现ServletRequestListener接口,覆盖两个方法。

public class IpLogListener implements ServletRequestListener {

public void requestDestroyed(ServletRequestEvent sre) { }

public void requestInitialized(ServletRequestEvent sre) { ServletRequest request = sre.getServletRequest(); System.out.println(request.getRemoteAddr()); } }

2、web.xml配置

com.tarena.listener.IpLogListener

本文来源:https://www.bwwdw.com/article/960.html

Top