Servlet

Servlet简介
Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

Servlet 的使用方法
Servlet技术的核心是Servlet,它是所有Servlet类必须直接或者间接实现的一个接口。在编写实现Servlet的Servlet类时,直接实现它。在扩展实现这个这个接口的类时,间接实现它。

Servlet 的工作原理
Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。

    用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

    对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象.

Servlet的实现
Servlet创建方法:
1.实现javax.servlet.Servlet接口

2.继承javax.servlet.GenercServlet抽象类,GenericServlet是Servlet接口实现类

3.继承javax.servlet.http.HttpServlet抽象类(常用)专门处理Http请求HTTP Servlet是GenericServlet子类

第一种方式; 实现Servlet接口
编写一个类实现Servlet接口,并重写方法
package com.fs.servlet; import javax.servlet.*;import java.io.IOException; public class AServlet implements Servlet { private ServletConfig servletConfig; /** * c初始化方法,生命周期方法(有web服务器调用) * 在Servlet对象创建,马上调用它,只执行一次 * @param servletConfig * @throws ServletException */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init()....."); System.out.println(servletConfig); this.servletConfig=servletConfig; } /** * 获取Servlet的配置类对象 ServletConfig *@return */ @Override public ServletConfig getServletConfig() { return this.servletConfig; } /** * 处理用户请求方法,生命周期方法(有web服务器调用),用户没请求Servlet一次, * service就执行一次 */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("Aservlet........service(阳婷小猪)..."); } /** * 描述Servlet,没有意义 * @return */ @Override public String getServletInfo() { return null; } /** * 销毁方法,生命周期方法 * 当Servlet被销毁志强,调用destroy() */ @Override public void destroy() { System.out.println("AServlet.....destroy"); } /** * * */ }

在web.xml文件中,geiServlet绑定url(Servlet配置)

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--配置Servlet--> <servlet> <servlet-name>CServlet</servlet-name> <!--Servlet类全限命名--> <servlet-class>com.fs.servlet.CServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CServlet</servlet-name> <url-pattern>/CServlet</url-pattern> </servlet-mapping> </web-app>

执行原理:

Servlet生命周期

面试高频

Servlet创建: 默认 第一次请求的时候创建Servlet对象, 马上调用init()方法进行初始化操作, 客户端每请求该Servlet一次, 调用一次Servlet对象的service(),

当Tomcat服务器关闭之前, 销毁Servlet对象, 销毁Servlet对象之前,调用destroy()

Servlet接口中关联的javaWeb的api接口

javaWeb: sun公司提供, JavaEE的标准

ServletConfig: 得到Servlet的配置


ServletRequest: 请求对象 

获取请求参数: 重要

根据请求参数名获取请求参数值

前端传递的数据类型都是String

如果需要转换为其他类型, 需要对String进行类型转换

如果前端没有传递这个参数, 返回值nul

lServletResponse: 响应对象

第一种方式:实现Servlet接口

1.编写一个类实现Servlet接口,并重写方法

2.在web.xml文件中,给Servlet绑定url(Servlet配置)

Servlet第二种实现方式:继承GenericServlet

第二种实现方式:继承GenericServlet类
1.编写一个类继承HttpServlet类,重写doGet()//处理get请求,doPost()处理post请求

Servlet第三种实现方式:继承HttpServlet
专门处理http请求

编写一个类继承HttpServlet类, 重写doGet() //处理get请求, doPost() 处理post请求


2.配置

HttpServlet执行请求的流程:

Servlet细节

注解配置 web3.0以上提供注解的方式,替换xml配置
@WebServlet

get请求: 超链接链接, 浏览器地址栏输入, form action=“默认值GET”,

js: localtion.href=

post请求: form action=“post”

Get请求与post请求区别:

get请求: 请求参数通过url传递, 请求参数会在url显示, 不安全, 敏感字段,不能使用get, 请求参数只能是字符串数据

post请求: 请求参数通过请求体,请求参数不会在url显示, 安全

请求参数: 字符串数据 也可以是文件

使用idea创建Servlet

Servlet细节

servlet是否是线程安全的? 面试题
依据: 这个对象是否共享, 如果是多个线程共享, 一定是线程不安全servlet类: 在整个web项目中, 只有一个对象, 每一次请求, 服务器为这次请求创建线程处理, 多个线程共享Servlet对象, Servlet线程不安全

代码指导:编写servlet类时候, 一定不要使用属性接收用户请求参数

Servlet对象创建时机
默认情况: 在第一次访问的时候, 第一次请求, 消耗的时间比较多, 第一次惩罚

设置servlet创建时机, 在服务器启动的时候创建, 在servlet配置中有一个值: 非负整数

@WebServlet注解属性: loadOnStartup

如果不配置, 默认值: -1: servlet创建时机,在第一次访问的时候如果设置>=0整数: 在服务器启动的时候创建, 数字越小, servlet越先创建

解决方案: 修改tomcat的日志配置文件:

获取全局初始化参数: 通过ServletContext获取

servlet的url绑定
配置文件: 配置

注解: value或者urlPatterns配置

一个servlet可以绑定多个url, 但是实际开发中,

只写一个

url可以使用 *通配符: *: 表示任意个数任意字符/字符串: 精确匹配前缀匹配: /前缀字符串/*: /api/*: /api/1 /api/aa /api/abc后缀匹配: *.后缀字符串 *.do: a.do b.do c.do匹配所有: /*优先级最低

ServletContext对象

服务器会为每个应用创建一个ServletContext对象: 代表这个应用程序

ServletContext对象的创建是在服务器启动时完成的;
ServletContext对象的销毁是在服务器关闭时完成的
ServletContext生命周期与服务器周期一样, 与天同寿作用: ServletContext对象的作用是在整个Web应用的动态资源之间共享数据! 称为Application域

域对象: 类似与银行, 数据流通javaWeb中, 有四大域对象: 范围从小到大PageContext: page域, 在同一个jsp, servlet类有效, 很少使用ServletRequest: request域: 在同一次请求内有效, 重点HttpSession: session域: 在同一次会话(包含多次请求)内有效 , 重点ServletContext: application域: 整个Web应用都有效

域对象都有如下功能:

存数据: setAttribute(String name, Object value): 存储任意数据类型值
取数据: Object getAttribute(String name) 如果域中没有key, 返回null
删除数据: removeAttribute(String name)
获取域中所有属性的name: Enumeration getAttributeNames()
得到ServletContext对象:

通过ServletConfig的getServletContext()
如果Servlet继承GenericServlet, 直接getServletContext();
获取全局的初始化参数

全局初始化参数: 整个项目的动态资源都可以的访问的数据

练习: 使用ServletContext实现网站访问量, 每访问网站servlet, 访问量加1, 显示总访问量,

项目编码统一为UTF-8:

请求对象

javaWeb核心对象创建都不是程序员创建:Servlet, ServletConfig. ServletContext, ServletRequest, ServletResponse对象都是web服务器创建, 程序员直接使用

ServletRequest: 父接口

HttpServletRequest: 是ServletRequest子接口

当客户端每请求一次, 服务器就会为这个请求,创建Request, Response对象 服务器调用service() 方法, 传递Request, Response对象, 如果Servlet继承HttpServlet, HttpServlet他的service() 把Request, Response对象向下转型为HttpServletRequest, HttpServletResponse子对象. 根据请求方式, 调用doGet()/doPost(), 把HttpServletRequest, HttpServletResponse子对象传递过来

请求对象: 封装所有请求相关的数据:比如请求头数据,请求方式, 客户端ip, 端口, 服务器ip, 端口, 请求参数

请求对象方法分类:

获取请求头参数
获取请求参数
域对象
请求转发,包含
其他方法
request域: 同一次请求内有效

request域在请求转发中, 使用

request域对象功能

request获取请求头数据 了解

request与请求头相关的方法有:

String getHeader(String name):获取指定名称的请求头;
Enumeration getHeaderNames():获取所有请求头名称;
int getIntHeader(String name):获取值为int类型的请求头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值