Servlet学习

目录

servlet简介

Servlet创建方法:

第一种方式; 实现Servlet接口

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

Servlet第三种实现方式:继承HttpServlet

Servlet对象创建时机

servlet的url绑定


servlet简介

javaWeb三剑客:

Servlet:接收用户请求,处理 请求,相应结果,类似与服务人员

Filter(过滤器):拦截请求,相当与保安

Listener(监听器):监听某个行为,一旦触发,自动执行绑定方法

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请求

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

2.配置

HttpServlet执行请求的流程:

Servlet细节

  1. 注解配置 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细节

  1. servlet是否是线程安全的? 面试题

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

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

  1. Servlet对象创建时机

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

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

@WebServlet注解属性: loadOnStartup

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

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

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

  1. 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对象:

  1. 通过ServletConfig的getServletContext()
  2. 如果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类型的请求头。

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值