servlet

servlet

一、http(超文本传输协议)

  学习要求(了解):掌握一些头信息(请求和响应)

二、servlet ★

1.简介
    动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序,
    接受请求,处理业务逻辑,生成动态web内容
    
2.编写servlet步骤
(1)编写一个类
    a.继承HttpServlet
    b.重写doGet()或者doPost()方法
(2)编写配置文件(web-inf/web.xml)
    a.注册servlet
        <servlet>
            <servlet-name>给servlet起个名字 名字唯一</servlet-name>
            <servlet-class>servlet的全限定名</servlet-class>
        </servlet>
    b.绑定路径
        <serlvet-mapping>
            <servlet-name>给servlet起个名字 名字唯一</servlet-name>
            <url-pattern>访问路径 目前都是以"/"开始</url-pattern>
        </serlvet-mapping>
(3)访问路径(测试)
    格式:http://主机:端口号/项目名/路径
    例如:http://localhost/day09/hello            
                
3.接受请求参数和回写数据(了解)
(1)接受参数:
        格式:key=value
         String value=request.getParameter("key")
        例如:http://localhost/day09/hello?username=tom
         String value=request.getParameter("username")就可以获取tom值
(2)回写内容:
        例如:response.getWriter().print("success");

4.servlet的体系结构(了解)
    Servlet:接口
        |
    GenericServlet:抽象类
        |
    HttpServlet:抽象类
        |
    自定义servlet
    
5.servlet及其子类常用方法    
(1)servlet常用方法(了解)
    void init(ServletConfig config):初始化
    void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
    void destroy():销毁
    ServletConfig getServletConfig() :获取当前servlet的配置对象
(2)GenericServlet常用方法(了解)
    除了service方法没有实现,其他都实现了
    空参的init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可
(3)HttpServlet常用方法
    service(ServletRequest request,ServletResponse response):
    在这个方法中 将两个参数强转,调用了重载的service方法
    service(HttpServletRequest request,HttpServletResponse response):
    获取请求的方式,根据请求方式的不同调用相应doXxx方法
    doGet和doPost方法:用来处理我们自己的业务逻辑
    doGet() :处理get请求的逻辑
    doPost():处理post请求的逻辑 (只有表单提交的时候把method设置成post的时候)
    
6.servlet的生命周期(常见面试题) ★★★    
(1)void init(ServletConfig config):初始化
   执行者:服务器
   执行次数:一次
   执行时机:默认第一次访问的时候
(2)void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
   执行者:服务器
   执行次数:请求一次执行一次
   执行时机:请求来的时候
(3)void destroy():销毁
   执行者:服务器
   执行次数:一次
   执行时机:当servlet被移除的时候或者服务器正常关闭的时候
   熟记以下内容
   serlvet是单实例多线程
   默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
   每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
   当serlvet被移除的时候或者服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.

7.url-pattern的配置 ★
    方式1:完全匹配   必须以"/"开始            例如: /hello /a/b/c
    方式2:目录匹配   必须以"/"开始,以"*"结束 例如: /a/*   /*
    方式3:后缀名匹配 以"*"开始,以字符结尾    例如: *.jsp  *.do  *.action
    优先级:完全匹配>目录匹配>后缀名匹配  

8.load-on-startup
    在servlet标签有一个子标签 load-on-startup
    作用:用来修改servlet的初始化时机
    取值:正整数  值越大优先级越低
    
9.defaultservlet
    当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
    若我们自己的项目处理不了请求,tomcat的默认的servlet会帮我们处理信息

10.路径的写法(了解)
(1)相对路径:
        当前路径    ./ 或者 什么都不写
        上一级路径 ../
(2)绝对路径(常用)
        带主机和协议的绝对路径(访问站外资源)
            http://www.itheima.com/xxxx
            http://localhost:80/day09/hello
        不带主机和协议的绝对路径
            格式:/项目名/资源路径
            例如:/day09/hello(经常使用)
 注:一个路径对应一个servlet;
     一个servlet可以对应多个路径

11.ServletConfig(了解)
(1)简介:servlet的配置对象
    servletconfig是由服务器创建的,在创建servlet的同时也创建了它,
    通过servlet的init(ServletConfig config)将config对象传递给servlet,
    由servlet的getServletConfig方法获取
(2)作用
    a.获取当前servlet的名称
    b.获取当前servlet的初始化参数
    c.获取全局管理者
(3)方法
    String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)
    String getInitParameter(String key):通过名称获取指定的参数值
    Enumeration getInitParameterNames():获取所有的参数名称
        初始化参数是放在 web.xml文件 servlet标签下子标签 init-param        
    ★getServletContext():获取全局管理者

12.ServletContext(理解) ★★★
(1)简介:上下文(全局管理者)
     一个项目的引用,代表了当前项目.
     当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
     当项目被移除的时候或者服务器关闭的时候servletcontext销毁
(2)作用
    a.获取全局的初始化参数
    b.共享资源(xxxAttribute)
    c.获取文件资源
    d.其他操作:获取文件的mime类型
(3)获取servletcontext
    方式1:(了解)
        getServletConfig().getServletContext()
    方式2:
        ServletContext getServletContext()
(4)常用方法
    a.获取全局的初始化参数(了解)
        String  getInitParameter(String key):通过名称key获取指定的初始化参数
        Enumeration getInitParameterNames() :获取所有的参数名称    
            在根标签下有一个 context-param子标签 用来存放初始化参数
            <context-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </context-param>
    b.共享资源(域对象) xxxAttribute()
        setAttribute(String key,Object value);//设置值
        Object getAttribute(String key);//获取值
        removeAttribute(String key)://移除值
    c.获取文件资源
        String getRealPath(String 文件路径):获取文件部署到tomcat上的绝对路径(带tomcat路径)
            文件路径从项目的根目录往后写
        例如:getRealPath("/"):D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
              getRealPath("/1.txt");
        InputStream getResourceAsStream(String 文件路径):以流的形式返回一个文件
    d.获取文件的mime类型  格式:大类型/小类型
        String getMimeType(String 文件名称)

13.域对象:★★★
(1)servletcontext 当成map集合
    常用方法:xxxAttribute()
(2)servletcontext创建和销毁
    创建:当项目(服务器)启动的时候,服务器为每一个web项目创建一个全局管理者,servletcontext就是当前项目的引用
    销毁:当项目被移除的时候或者服务器关闭的时候servletcontext销毁
(3)存放:共享的数据

14.获取文件的路径
    通过类加载器获取文件的路径:(处于classes目录下的文件)
    格式:类.class.getClassLoader().getResource("文件路径").getPath()        
            类.class.getClassLoader().getReourceAsStream("文件路径")
  

15.学习要求:会创建一个servlet;会更改web.xml  ★★★       


三、常见案例

1.案例一-登录
(1)需求:在页面上输入用户名和密码,提交到服务器上,服务器拿着用户名和密码
          去数据库中查找有无此用户
          若有此用户,则提示登录成功;
          若无此用户,则提示用户名密码不匹配
(2)技术分析:html的表单标签 servlet 请求 响应
(3)步骤分析:
    a.先有数据库和表(SQLyog软件)
        代码如下:
        create database day09;
        use day09;
        create table user(
            id int primary key auto_increment,
            username varchar(20),
            password varchar(20),
            email varchar(20),
            name varchar(20),
            sex varchar(10),
            birthday date,
            hobby varchar(50)
        );
        insert into user values (null,'tom','123','tom@126.com','tom','1','1988-01-01',null);
    b.创建工程(eclipse软件)   
        例如:day0901(web工程)
    c.复制页面   
        复制day01(html)中的案例中的所有内容到WebContent下
        修改login.html
            给用户名和密码添加name属性
            修改表单的action属性
                action="http://localhost/day0901/login"
            添加method属性:method="post"
    d.导入jar包
        驱动 dbutils c3p0
    e.导入工具类和配置文件
        datasourceUtils
        c3p0-config.xml(注意修改数据库名称)
    f.创建用户类(User)
    g.创建servlet(LoginServlet: 路径 /login),自动生成web.xml
        接受用户名和密码
        调用service层(UserService)完成登录操作
        提示信息
    h.UserService
        login(username,password)
            调用UserDao
    i.UserDao
        通过用户名和密码查询数据库
            创建queryrunner
            编写sql
            执行sql
    
2.案例二-定时刷新
(1)需求:当我们登录失败,提示"用户名密码不匹配",3秒以后跳转到登录页面
(2)技术分析:定时刷新 响应头(refresh)
(3)步骤分析:
    登录失败之后,修改业务逻辑
    打印之后添加一个头信息即可
    
3.案例三-统计登录次数
(1)需求:在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.
          在访问另一个servlet的时候,显示登录成功的总人次
(2)技术分析:ServletContext
(3)步骤分析:
    a.在项目启动的时候,初始化登录次数
      在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext上
    b.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数
    c.然后将次数+1,将值设置回去
    d.当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值