javaweb三大技术点之servlet

Servlet

案例:商城的登录的功能的实现

一,案例需求

这里写图片描述
+ 在登录的页面中输入用户名和密码点击登录,完成登录的功能.登录成功,提示用户 “Login Success”;登录失败,提示用户”Login Fail…”

二,技术分析

1. Servlet的概述
1.1什么是Servlet

​ Servlet 运行在服务端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求、响应给浏览器的动态资源。

1.2Servlet的作用

​ 用来处理从客户端发送过来的请求,并对该请求作出响应。

​ Servlet的任务有:

​ 获取请求数据

​ 调用业务

​ 分发转向/响应

2.Servlet的入门
2.1准备工作

​ Servlet规范要求:Servlet程序需要实现Servlet接口,并在web.xml进行配置。

​ 1.编写一个类

​ 实现servlet的接口

​ 重写方法(service)

​ 2.编写配置文件

​ 注册servlet

​ 绑定路径

​ 3.测试

​ 协议://主机:端口号/项目名/绑定路径

2.2实现步骤

​ 步骤一:编写一个类,实现servlet的接口

public class ServletDemo implements Servlet {

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException     {
    System.out.println("hello ServletDemo..");
    }   


    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {

    }


    @Override
    public void destroy() {

    }

}

​ 步骤二:修改应用中的web.xml文件,配置一个可供外部访问的URI标签

 <!-- 实例化一个servlet对象 -->
  <servlet>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>com.itheima.demo01.ServletDemo</servlet-class>
  </servlet>

  <!--创建一个供外界访问的路径  -->
  <servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>/demo</url-pattern>
  </servlet-mapping>

​ 步骤三:部署应用

2.3 Servlet的执行的流程详解

这里写图片描述

2.4简单写法

​ 直接创建一个Servlet

2.5Servlet的继承关系

Servlet规范规定,所有的servlet必须实现 javax.servlet.Servlet接口。

这里写图片描述

2.5.1Servlet的API

​ ★void init(ServletConfig config):初始化方法

​ ★void service(ServletRequest request,ServletResponse response):服务方法

​ ★void destroy():销毁方法

​ ServletConfig getServletConfig():获取当前servlet的配置对象(了解)

String getServletInfo()

2.5.2,Servlet的生命周期

2.5.2.1 生命周期

​ 一个对象从创建到销毁的过程

2.5.2.2 Servlet生命周期

​ servlet从创建到销毁的过程

​ 出生:(初始化)用户第一次访问时执行。

​ 活着:(服务)应用活着。每次访问都会执行。

​ 死亡:(销毁)应用卸载。

​ serrvlet生命周期方法:

​ init(ServletConfig config)

​ service(ServletRequest req, ServletResponse res)

​ destroy()

2.5.2.3生命周期方法的执行

​ 当客户端第一次请求的时候,会执行init方法,创建出来

​ 客户端任何一次请求会执行Service方法,

​ 当servlet从服务器移除或者服务器正常关闭会执行destroy方法

​ Servlet是单例(只有一个对象), 默认情况下,当第一次请求的时候,调用init()方法,创建出来. 任何一次请求,都会获得一个线程,来处理请求,调用Service()方法. 当servlet从服务器移除或者服务器正常关闭,会执行destroy方法,把对象给销毁.(设计模式:单例模式)

Servlet是单实例多线程的

doGet()/doPost()方法是从Service()方法里面分出去的.

2.5.3GenericServlet里面的方法

​ 只有Service方法没有实现,其它的四个方法都实现了.

2.5.4HttpServlet里面的方法

​ 实现Service方法, 在Service方法里面

​ 1.强转了两个参数

​ 2.调用了自己的service方法

​ 在自己的service方法里面:

​ 1.判断是get/post…请求

​ 2.根据不同的请求调用对应的doGet/doPost方法

书写Servlet: 创建Servlet,重写doGet和doPost方法

3.request接收请求参数

​ request对象的原型是javax.servlet.http.HttpServletRequest.此对象由服务器自动创建。服务器创建request对象的时候,把请求的三样东西(请求行,请求头,请求体)封装在了这个对象里面

url?username=zs&password=1234&hobby=lq&hobby=zq

方法名描述
String getParameter(String name)获得指定参数名对应的值。如果没有则返回null,如果有多个获得第一个。 例如:username=jack
String[] getParameterValues(String name)获得指定参数名对应的所有的值。此方法专业为复选框提供的。 例如:hobby=抽烟&hobby=喝酒
Map
4. Request接收请求参数入门程序

​ 步骤一:编写表单,提供表单字段:username、password、hobby,以post方式提交

​ 步骤二:编写Servlet实现类,使用对应方法获得请求参数,并处理POST中文乱码

​ 步骤三:测试提交表单。控制台显示.

  • 表单

    <form action="提交的路径(servlet)" method="post">
        用户名:<input type="text" name="username"/><br />
        密码:<input type="password" name="password" /><br />
        爱好:
        <input type="checkbox" name="hobby"  value="篮球" />篮球
        <input type="checkbox" name="hobby"  value="足球" />足球
        <input type="checkbox" name="hobby"  value="乒乓球" />乒乓球
        <input type="checkbox" name="hobby"  value="看电影" />看电影<br />
        <input type="submit" />
    </form>
三,思路分析
  • 创建页面
  • 创建数据库
  • 点击登录按钮,把获得的参数提交到LoginServlet
  • 查询数据库,如果有此用户,登录成功
  • 如果没有,登录失败

这里写图片描述

四,代码实现 ####
1.准备工作
1.1创建数据库和实体
  • 数据库
create database web;

use web;

create table user(
    id int primary key auto_increment,
    username varchar(20),
    password varchar(20),
    nickname varchar(20)

);

INSERT INTO `USER` VALUES(null,'zhangsan','123456','Jack');
INSERT INTO `USER` VALUES(null,'lisi','123456','老王');
INSERT INTO `USER` VALUES(null,'wangwu','123','东方不败');
  • 创建实体
public class User {
    private int id;
    private String username;
    private String password;
    private String nickname;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }   
}
五,总结
1.url-pattern的配置

url-pattern配置方式共有三种:

​ 1.完全路径匹配 :以 / 开始 ; /aa/bb

​ 例如: /demo01 ,/login, /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6

​ 2.目录匹配:以 / 开始需要以 * 结束. ===>过滤器

​ 例如: /* (所有) /aaa/* (aaa目录下的所有) /aaa/bbb/*

​ 3.扩展名匹配 :不能以 / 开始, 以 * 开始的 .

​ 例如:

*.do, *.jsp,*.jpg   

​ 错误的写法 : /*.do

​ 缺省路径(系统自带的)

​ 通常情况访问 html页面时,首先从当前web项目的web.xml文件寻找匹配路径,如果如果没有找到,再从tomcat默认的web.xml匹配,将使用缺省servlet

  • 一个路径对应一个servlet,但是一个servlet可以有多个路径

  • tomcat获得匹配路径时,优先级顺序:1 >2 > 3 > 4

    ​ 完全路径匹配> 目录匹配 > 扩展名匹配 > 缺省路径(tomcat里面的)

    有如下的配置:
    <servlet>
      <servlet-name>ServletDemo</servlet-name>
      <servlet-class>com.cd.a_servlet.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>ServletDemo</servlet-name>
      <url-pattern>/ServletDemo</url-pattern>
    </servlet-mapping>
    
    <servlet>
      <servlet-name>ServletDemo1</servlet-name>
      <servlet-class>com.cd.a_servlet.ServletDemo1</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>ServletDemo1</servlet-name>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
    <servlet>
      <servlet-name>ServletDemo2</servlet-name>
      <servlet-class>com.cd.a_servlet.ServletDemo2</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>ServletDemo2</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    
2.配置servlet的启动加载项

​ Servlet**默认**是在第一次访问的时候创建的.现在让Servlet在服务器启动的时候创建好.进行对Servlet的配置

<load-on-startup>int的值</load-on-startup>:值越小,优先级越高
3 开发中的路径的编写
3.1相对路径

​ 不以/开头的, 都是需要找位置相对关系,要有一个完整的作为参照路径

​ ./ 当前路径 , ../上一级目录

3.2绝对路径

​ 以/开头的,不需要找位置相对关系

4.serveltConfig获得Servlet的配置信息

​ String getServletName(); —获得Servlet在web.xml中配置的name的值.

​ String getInitParameter(String name); —获得Servlet的初始化参数的.

​ Enumeration getInitParameterNames(); —获得所有Servlet的初始化参数的名称.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值