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的执行的流程详解
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是单实例的,默认情况下,第一次请求的时候创建出来.当每次来了请求,获得一个线程处理业务逻辑(自己写的代码),调用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
- 查询数据库,如果有此用户,登录成功
- 如果没有,登录失败
四,代码实现 ####
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的初始化参数的名称.
- Servelet的总结
- java+servelet+oracal 连接的步骤总结
- servelet的学习
- Servelet
- 什么是Servelet和Servlet的优越性
- JSP/Servelet数据源连接池的配置
- Jsp+JavaBean+Servelet 的工作原理
- servelet web.xml的规范顺序
- Servelet获取properties的几种方法
- servelet的执行原理与生命周期
- Jsp+Dao+Jdbc+Servelet 用户完整登录总结
- 张志宇 SERVELET JSP学习讲义-知识点总结纲要
- Servelet上传一个汉字的名字出错的问题
- WebLogic下查看JSP编译成的JAVA SERVELET文件
- 张志宇 SERVELET JSP学习讲义-我的第一个Servlet
- Javaweb学习之jsp与servelet的区别
- servelet中乱码问题的解决:表单操作实例
- Servelet基本概念
- 数据库优化
- 软件构造 异常处理的5个建议
- Jedis远程连接Redis服务器报错(connect time out)
- Ajax 如何提交集合到mvc后台 1,前端请求如下 复制代码 复制代码 1 var apply = { CompanyName: $("[name='corpName']").val(),
- MongoDB_01
- Servelet的总结
- View绘制流程及源码解析(一)——performTraversals()源码分析 96 游骑兵810 关注 2017.02.01 11:07* 字数 5024 阅读 945评论 3喜欢 6 本篇文
- Android View 测量流程(Measure)完全解析
- 1656: [Usaco2006 Jan] The Grove 树木 BFS+射线阻隔
- 《人月神话》读书笔记
- 数组去重
- MySQL和Oracle的区别比较
- 关于demo.cpp:(.text.startup+0x8f): undefined reference to `vtable for SlotObject' ,问题探究
- 【Leetcode】【python】Plus One