Servelet的总结

来源:互联网 发布:南昌淘宝学校在哪里 编辑:程序博客网 时间:2024/06/05 06:07
  • 独立编写Servlet程序
  • 使用request接收请求参数
  • 了解ServletConfig的使用


用户名:

密码:

登录

  • 在登录的页面中输入用户名和密码点击登录,完成登录的功能.登录成功,提示用户 "Login Success";登录失败,提示用户"Login Fail..."

演示路径:http://localhost:8080/day15Servlet/WEB01/login.htm

二,技术分析

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 {

@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException     {System.out.println("hello ServletDemo..");}   @Overridepublic ServletConfig getServletConfig() {    return null;}@Overridepublic String getServletInfo() {    return null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {}@Overridepublic void destroy() {}

}```

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

```

<servlet-name>ServletDemo</servlet-name> <servlet-class>com.itheima.demo01.ServletDemo</servlet-class>

<servlet-mapping> <servlet-name>ServletDemo</servlet-name> <url-pattern>/demo</url-pattern> </servlet-mapping>```

​ 步骤三:部署应用

2.3 Servlet的执行的流程详解

img

2.4简单写法

​ 直接创建一个Servlet

2.5Servlet的继承关系

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

img

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是单实例的,默认情况下,第一次请求的时候创建出来.当每次来了请求,获得一个线程处理业务逻辑(自己写的代码),调用service方法,当servlet从服务器移除或者服务器正常关闭的时候,servlet实例销毁.(设计模式,单例模式)

servlet是单实例,多线程

HttpServlet里面的doGet()/doPost()方法就是从Servlet的service()方法分出去的.

2.5.3,GenericServlet的方法

​ 只有service方法没实现,其它的4个方法都实现了

2.5.4,HttpServlet的方法

实现了父类的service()方法,在这个方法里面

​ 强转了两个参数

​ 调用了自己的service()方法

在自己的service()方法里面

​ 获得请求方式,根据请求方式,调用对应的doxxx()方法. (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<String,String[]> getParameterMap() | 获得所有的请求参数。key为参数名,value为key对应的所有的值。 || setCharacterEncoding(String env) | 设置请求体的编码,用于解决POST请求参数乱码问题 |

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
  • 查询数据库,如果有此用户,登录成功
  • 如果没有,登录失败

img

四,代码实现 ####

1.准备工作
1.1创建数据库和实体
  • 数据库

```create database web15;

use web15;

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 INTOUSER 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.完全路径匹配    :以 / 开始             

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

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

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

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

​ 例如: .do , .action 、.jsp 、.jpg

​ 错误的写法  : /*.do

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

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

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

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

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

``` 有如下的配置: <servlet-name>ServletDemo4</servlet-name> <servlet-class>com.itheima.a_servlet.ServletDemo4</servlet-class> <servlet-mapping> <servlet-name>ServletDemo4</servlet-name> <url-pattern>/ServletDemo4</url-pattern> </servlet-mapping>

<servlet>  <servlet-name>ServletDemo5</servlet-name>  <servlet-class>com.itheima.a_servlet.ServletDemo5</servlet-class></servlet><servlet-mapping>  <servlet-name>ServletDemo5</servlet-name>  <url-pattern>/*</url-pattern></servlet-mapping><servlet>  <servlet-name>ServletDemo6</servlet-name>  <servlet-class>com.itheima.a_servlet.ServletDemo6</servlet-class></servlet><servlet-mapping>  <servlet-name>ServletDemo6</servlet-name>  <url-pattern>*.do</url-pattern></servlet-mapping>

如果访问地址: http://localhost:8080/web15Servlet/ServletDemo4 ; ServletDemo4 http://localhost:8080/web15Servlet/aaa.do ;ServletDemo5 ***** 完全路径匹配 > 目录匹配 > 扩展名匹配 ```

2.配置servlet的启动加载项(了解)

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

<load-on-startup>2</load-on-startup>

3 开发中的路径的编写(重要**)
2.1相对路径

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

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

2.2绝对路径

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

​ 绝对路径中分为客户端路径和服务器端路径:

​ 客户端路径一定要加工程名.(注:客户端的/代表8080后面的/)

​ 服务器端路径不需要加工程名.(注:服务器端内部的/代表项目下的/),转发

3.serveltConfig获得Servlet的配置信息(了解)

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

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

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

原创粉丝点击