前言
一位正在学习Java的开发工程师.
用户登录
-
与用户发送请求,访问服务器端的一个登录页面(有一个表单:用户名和密码的输入框以及一个登录的提交按钮)
-
用户在登录表单中输入: 用户名和密码,点击登录的提交按钮--->提交到一个服务器的位置(Servlet)
- 我们使用Servlet来获取用户输入的用户名和密码,然后根据用户名和密码查询数据库
- 结果如果存在 : 给出登录成功的提示信息
- 结果如果不存在: 给出登录失败的提示信息(用户名或者密码错误)
Servlet的介绍
1. 在Javax.servlet包下的接口(它是JavaEE众多规范中的一个)
2. Servlet是运行在Web服务器中的小型Java程序,且必须在服务器中运行,
里面涉及到的创建对象和调用方法,都不是由程序员来完成,都是服务器来进行操作的
3. Servlet通常会通过HTTP接受和响应来自Web客户端的请求
4. Servlet他是JavaWeb三大组件之一(Servlet/Filter/Listener)
5. Servlet主要用于
1. 接受用户的请求(数据)
主要HTTPServletRequest对象来负责完成的
2. 处理请求 :
主要由Servlet的服务方法来负责完成
3. 对处理对象的结果进行响应
主要由HttpServletResponse对象来负责完成
Servlet的入门
我们想要我们自己编写的代码具有Servlet的功能,那么必须直接或间接的实现Servlet接口!!
操作步骤 :
1. 编写一个类去实现Servlet接口(必须实现该接口下的所有方法)
2. 在web.xml文件中配置访问你编写的这个类(Servlet处理类)
3. 在Servlet实现类的服务方法,(Servlet方法)中编写具体的业务代码!
案例的技术分析
- 如何让表单指向一个
Servlet
<form action="书写将这个表单提交的具体位置" method="post">
.....
/form
- 我们访问的路径的写法:
http://localhost:8080/项目名称/具体项目
- 我们按照访问路径的写法,在登录表单的acton属性中,也去这么写(仅仅只需要更新访问Servlet的名称)
- 如何获得用户输入的用户名和密码
- 我们这里时候request相关的方法来完成
String result= request.getParameter("name")
//方法的参数为表单的那么属性值,得到的就是表单的value的属性值(String类型)
WEB阶段的通用开发流程
在实现具体功能之前,必须思考一个问题:我们所做的这个功能到底是对数据库表CRUD操作的那一个,我们现在的数据库都是关系型数据库(有表,多表,表与表之间)
我们可以根据这个来分析器SQL语句的编写,===>>看看这个SQL语句是否带有条件,如果有参数,那么我是需要在页面指定Servlet的时候进行传递的.
1. 跟据客户的需求设计数据库表结构并创建数据库以及初始化数据
2. 根据数据库表结构创建对应的JavaBean(讲数据库表里面的字段名称作为类里面的属性名称)
3. 导入相关的jar包.工具类和配置文件(少许修改)
4. 寻找程序入口(就是普通用户操作的地方,一般都在页面(按钮,超链接,图片) 将其指向服务器的某个Servlet(是否需要携带请求参数)
5. 编写Servlet
如果有请求参数:
1. 接受请求参数(参数比较多,讲数据封装到JavaBean中),调用Servlce层应对的方法
2. 处理响应
如果没有求情参数: 直接调用Servlce层对应的方法
6. 编写Servlce
WEB阶段除了事务和分页操作灭我们都是直接调用DAO层应对的方法!
7. 编写DAO
WEB阶段都是使用DBUtils来对数据库进行CRUD操作
web.xml
Servlet-name
Servlet-class
<Servlet>
取任意值,建议写Servlet的类名,
如果我们使用快速创建Servlet,自动生成, 默认的就是当前的Servlet的类
且必须于mapping里的Servlet-name的值一致
//主要作用是:让访问的路径与具体的Servlet处理类产生对应的关系
<Servlet-name>xxx</Servlet-name>
//访问路径对应的Servlet处理类:必须写全限定类名(有包结构的!)
<Servlet-class>com.ithema.web.helkoServlet</Servlet-class>
</Servlet>
Servlet的生命周期
问题:我们访问Servlet,它是谁调用Servlce方法的呢?调用这个方法不需要创建对象吗?需要的话,有是谁创建的?
是服务器创建,并且调用Servlce方法
默认情况,当用户第一次访问Servlet,这个Servlet的事例对象由服务器Tomcat来创建,并且一个Servlet类型只会创建一个对象,然后调用init(ServletConfig config)
方法来完成初始化,该方法在整个Servlet的生命周期中只会调用一次,紧接着调用Servlce(ServletRequest rep,ServletResponse resp)
方法来处理用户的请求,这个方法在整个生命周期中会被调用多次!当我们正常关闭服务器的时候,会在关闭之前调用destroy()
方法来进行销毁,该方法在整个生命周期中只会被调用一次,项目移除也会被销毁.
我们发现与Servlet生命周期相关的有三个方法:
1. init(ServletConfig config)
2. servlce(ServletRequest rep,ServletResponse resp)
3. destroy()
此外,我们还可以通过配置,让Servlet在服务器启动的时候就创建
在web.xml文件中配置一个load-on-startup的参数(当前的Servlet)!值为非负的整数(值越小,优先级越高)
<servlet>
<servlet-name>BServlet</servlet-name>
<servlet-class>com.itheima.web.servlet.BServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Servletcongif对象
Servlet容器使用的Servlet配置对象,该对象在初始化期间将信息传递给Servlet.意味这个对象在我们进行初始化之前就已经创建好了
我们可以通过这个对象来获得当前Servlet在出事话阶段配置的一切初始化数据!
String getInitParameter(String name) //获取指定初始参数名称的值
Enumeration getInitParameterNames() //获得所处初始参数的名称
ServletContext getServletContext() //获得ServletContext对象!
String getServletName() //获得当前Servlet的名称
Servlet中与生命周期相关意外的其他方法
getServletConfig() //获得一个ServletConfig对象
//这是接口里的方法,想要得到这个对象,我们需要自己去实现
getServletInfo() //获得Servlet的作者,版本 没什么作用
Servlet的实现方式和体系结构
Servlet的实现方式有三种
1. 编写一个类去实现Servlet接口(我们必须实现该接口所有的方法)
1. 编写一个类去继承GenericServlet抽象类,(他有抽象方法Servlce,我们需要重写)
1. 编写一个类去继承HttpServlet抽象类(没有抽象方法),我们重写doxxx方法
这三种的关系如图:
Servalet体系结构
url-pattern的配置
配置的主要是我们访问的Servlet的入口
完全匹配 : /文件名
匹配所有 : /*
目录匹配 : /abc/*
扩展名匹配: *.do
缺省的配置: /
为一个Servlet配置多个url-pattern : 众多配置都是以完全匹配为主
网友评论