目录
2-3-6 创建servlet(LoginServlet: 路径 /login)
3-1 servlet的体系结构:(了解)java_ee_api
3-2-1 void init(ServletConfig config):初始化
3-2-2 void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
3-4 在servlet标签有一个子标签 load-on-startup
3-5 当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml
四、案例2-当我们登录失败,提示"用户名密码不匹配",3秒以后跳转到登录页面
一、http:要求:掌握一些头信息
超文本传输协议:
规定数据的格式
浏览器往服务器发送 ---- 请求
服务器往浏览器回写 ---- 响应
-
1-1 请求:(request)
-
1-1-1 组成部分
请求行 请求头 请求体
-
1-1-2 请求行:请求信息的第一行
格式:请求方式 访问的资源 协议/版本
例如:GET /day0801/1.html HTTP/1.1请求方式:get和post
get会把参数放在url的后面 post不会
get参数大小有限制,post请求却没有限制
get请求没有请求体;post请求有请求体 请求参数放在请求体中
-
1-1-3 请求头:请求信息的第二行到空行结束
格式:key/value (value可以是多个值)
常见的请求头:
Accept: text/html,image/bmp --支持数据类型 text/html text/css text/javascript 大类型/小类型 mime类型
Accept-Charset: ISO-8859-1 --字符集
Accept-Encoding: gzip --支持压缩
Accept-Language:zh-cn --语言环境
Host: www.itcast.cn:80 --访问主机
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --缓存文件的最后修改时间
Referer: http://www.itcast.com/index.jsp --来自哪个页面、防盗链
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Cookie
Connection:Keep-Alive --链接状态掌握的头信息:
Referer User-Agent Cookie If-Modified-Since
-
1-1-4 请求体:空行以下的内容
只有post才有请求体 get请求参数 http://xxxx?username=tom&password=123
格式:username=tom&password=123
-
1- 2 响应:(response)
-
1- 2-1 组成部分
响应行 响应头 响应体
-
1- 2-2 响应行:响应信息的第一行
格式:协议/版本 状态码 状态码说明
例如:HTTP/1.1 200 OK
状态码:
200 正常响应成功
302 重定向
304 读缓存
404 用户操作资源不存在
500 服务器内部异常
-
1- 2-3 响应头:从响应信息的第二行到空行结束
格式:key/value(value可以是多个值)
常见的头
Location: http://www.it315.org/index.jsp --跳转方向 和302一起使用的
Server:apache tomcat --服务器型号
Content-Encoding: gzip --数据压缩
Content-Length: 80 --数据长度
Content-Language: zh-cn --语言环境
Content-Type: text/html; charset=GB2312 --数据类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --最后修改时间
Refresh: 1;url=http://www.it315.org --定时刷新
Content-Disposition: attachment; filename=aaa.zip --下载
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1 --缓存
Cache-Control: no-cache --缓存
Pragma: no-cache --缓存
Connection: Keep-Alive --连接掌握的头信息
Content-Type Location Last-Modified Refresh Content-Disposition Set-Cookie
-
1- 2-4 响应体:空行以下的内容
页面上展示的内容
-
二、案例1-完成登录案例
- 需求:
在页面上输入用户名和密码,提交到服务器上,服务器拿着用户名和密码去数据库中查找有无此用户
若有用户,则提示登录成功
若无此用户,则提示用户名密码不匹配
- 技术分析:
表单
servlet
请求(request)
响应(response)
-
2-1 表单
收集用户数据
所有的字段要想提交到服务器必须 有name属性
提交的地址 action
请求方式:post
-
2-2 servlet
动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序
处理业务逻辑,生成动态web内容
-
2-2-1 编写一个servlet步骤
1.编写一个类
a.继承HttpServlet——需要在library中导入runtime中的Tomcat,即设置 target runtime
b.重写doGet或者doPost方法public class HelloServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("请求已收到............"); } }
2.编写配置文件(web-inf/web.xml)
a.注册servlet
b.绑定路径<!--注册servlet 使用servlet标签 servlet-name:给servlet起一个名字,全局唯一 servlet-class:存servlet的全限定名,复制 --> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.itheima.a_hello.HelloServlet</servlet-class> </servlet> <!--绑定路径 使用servlet-mapping标签 servlet-name:使用上面已经起好的名字,建议复制 servlet-class:访问路径,要求:目前必须以“/”开头,唯一 --> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
3.访问
http://主机:端口号/项目名/路径——(绑定的路径)
http://localhost:8080/day09/hello
-
2-2-2 接受参数: 格式:key=value
request中带有请求参数——从request中接收参数
Sting value=request.getParameter("key")
例如: http://localhost/day09/hello?username=tom
request.getParameter("username")就可以获取tom值
类
public class RequestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //接受参数 String value = req.getParameter("username"); } }
配置文件
<servlet> <servlet-name>RequestServlet</servlet-name> <servlet-class>com.itheima.b_request.RequestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RequestServlet</servlet-name> <url-pattern>/request</url-pattern> </servlet-mapping>
-
2-2-3 回写内容
response
response.getWriter().print("success");
处理响应数据中文乱码:
resp.setContentType("text/html;charset=utf-8"); //建议大家放在方法中的第一行public class RequestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //接受参数 String value = req.getParameter("username"); //往浏览器回写数据 //防止乱码,需要设置数据集 resp.setContentType("text/html;charset=utf-8"); resp.getWriter().print("数据:"+value); System.out.println(value); } }
-
2-3 案例步骤分析
-
2-3-1 先有数据库和表
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);
-
2-3-2 创建工程
-
2-3-3 复制页面
修改login.html
给用户名和密码添加name属性
修改表单的action属性
action="http://localhost/day0901/login"
添加method属性
method="post"<form class="form-horizontal" action="http://localhost:80/day0901/login" method="post"> <div class="form-group"> <label for="username" class="col-sm-2 control-label">用户名</label> <div class="col-sm-6"> <input type="text" class="form-control" id="username" placeholder="请输入用户名" name="username"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-2 control-label">密码</label> <div class="col-sm-6"> <input type="password" class="form-control" id="inputPassword3" placeholder="请输入密码" name="password"> </div> </div>
-
2-3-4 导入jar包
驱动 dbutils c3p0——直接导入到WEB-INF中的lib中
-
2-3-5 导入工具类和配置文件
datasourceUtils——见 07 的DataSource
c3p0-config.xml(注意修改 数据库 名称)
-
2-3-6 创建servlet(LoginServlet: 路径 /login)
接受用户名和密码
调用service层(UserService)完成登录操作
提示信息类
public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //0.设置编码 response.setContentType("text/html;charset=utf-8"); //1.接受用户名和密码 String username=request.getParameter("username"); String password=request.getParameter("password"); //2.调用userservice 里的login(username,password) 返回值:User user User user = null; try { user = new UserService().login(username,password); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("网络异常,请稍后再试!"); } //3.判断user是否为空 if(user==null){ //3.1若为空 写"用户名和密码不匹配" response.getWriter().print("用户名和密码不匹配,3秒之后跳转"); //案例2-定时跳转 response.setHeader("refresh", "3;url=/day0901/login.htm"); }else{ //3.2若不为空 写"xxx:欢迎回来" response.getWriter().print(user.getUsername()+":欢迎回来"); } } }
配置
<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.itheima.web.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping>
-
2-3-7 UserService
login(username,password)
调用daopublic class UserService { /** * 用户登录 * @param username 用户名 * @param password 密码 * @return User 用户 * @throws SQLException */ public User login(String username, String password) throws SQLException { //调用dao UserDao dao=new UserDao(); return dao.getUserByUsernameAndPwd(username,password); } }
-
2-3-8 dao
通过用户名和密码查询数据库
//执行sql
User user = qr.query(sql, new BeanHandler<>(User.class), username,password);public class UserDao { /** * 登录 * @param username 用户名 * @param password 密码 * @return 用户 * @throws SQLException */ public User getUserByUsernameAndPwd(String username, String password) throws SQLException { //创建queryrunner QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); //编写sql String sql="select * from user where username = ? and password = ?"; //执行sql User user = qr.query(sql, new BeanHandler<>(User.class), username,password); return user; } }
-
2-3-9 流程图
-
三、serlvet总结
-
3-1 servlet的体系结构:(了解)java_ee_api
Servlet:接口
|
GenericServlet:抽象类
|
HttpServlet:抽象类
|
自定义servlet
-
3-1-1 servlet常用方法
- void init(ServletConfig config):初始化
- void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
- void destroy():销毁
- ServletConfig getServletConfig() :获取当前servlet的配置对象
-
3-1-2 GenericServlet常用方法
除了service方法没有实现,其他都实现了
空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可
(control+o)所有方法打开
-
3-1-3 HttpServlet常用方法
service做了实现,把参数强转,转为Http的request和response,调用了重载的service方法
重载的 service 方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
doGet和doPost方法
-
3-2 servlet生命周期 ★★★
- 配置
<servlet> <servlet-name>LifeServlet</servlet-name> <servlet-class>com.itheima.c_life.LifeServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>LifeServlet</servlet-name> <url-pattern>/life</url-pattern> </servlet-mapping>
-
3-2-1 void init(ServletConfig config):初始化
* 初始化方法
* 执行者:服务器
* 执行次数:一次
* 执行时机:默认第一次访问的时候
-
3-2-2 void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
* 服务
* 执行者:服务器
* 执行次数:请求一次执行一次(eg: 刷新一次执行一次)
* 执行时机:请求来的时候
-
3-2-3 void destroy():销毁
* 销毁
* 执行者:服务器
* 执行次数:只执行一次
* 执行时机:当servlet被移除的时候——如 重新部署项目时
者服务器正常关闭的时候
-
3-2-4 serlvet是单实例多线程
默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.
-
3-3 url-pattern的配置:★
-
3-3-1 方式
方式1:完全匹配 必须以"/"开始 例如: /hello /a/b/c
方式2:目录匹配 必须"/"开始 以"*"结束 例如: /a/* /*
方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp *.do *.action
-
3-3-2 优先级
完全匹配>目录匹配>后缀名匹配
-
3-3-3 练习
有如下的一些映射关系:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
-
3-3-4 问题
当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/*”和“/abc”都匹配,哪个servlet响应
Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2.
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。
-
3-4 在servlet标签有一个子标签 load-on-startup
作用:用来修改servlet的初始化时机
取值:正整数 值越大优先级越低
-
3-5 当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml
若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息,即,项目中的web.xml类似于继承了Tomcat中的 web.xml
-
3-6 路径的写法
-
3-6-1 相对路径
当前路径 ./ 或者 什么都不写
上一级路径 ../
-
3-6-2 绝对路径:(我们使用)
带主机和协议的绝对路径(访问站外资源)
http://www.itheima.com/xxxx
http://localhost:80/day09/hello不带主机和协议的绝对路径
/day09/hello(开发经常使用)
-
四、案例2-当我们登录失败,提示"用户名密码不匹配",3秒以后跳转到登录页面
- 技术分析
定时刷新
-
4-1 常见的响应头-refresh
-
4-1-1 响应头格式
refresh:秒数;url=跳转的路径
-
4-1-2 设置响应头
response.setHeader(String key,String value);设置字符串形式的响应头
response.addHeader(String key,String value);追加响应头, 若之前设置设置过这个头,则追加;若没有设置过,则设置
-
4-1-3 设置定时刷新
response.setHeader("refresh","3;url=/day0901/login.htm");
-
4-2 步骤分析
登录失败之后,修改业务逻辑
打印之后添加一个头信息即可 public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //0.设置编码 response.setContentType("text/html;charset=utf-8"); //1.接受用户名和密码 String username=request.getParameter("username"); String password=request.getParameter("password"); //2.调用userservice 里的login(username,password) 返回值:User user User user = null; try { user = new UserService().login(username,password); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("网络异常,请稍后再试!"); } //3.判断user是否为空 if(user==null){ //3.1若为空 写"用户名和密码不匹配" response.getWriter().print("用户名和密码不匹配,3秒之后跳转"); //案例2-定时跳转 response.setHeader("refresh", "3;url=/day0901/login.htm"); }else{ //3.2若不为空 写"xxx:欢迎回来" response.getWriter().print(user.getUsername()+":欢迎回来"); } } }
五、案例3-统计登录成功的总人次
- 需求:
在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.在访问另一个servlet的时候,显示登录成功的总人次
单实例多线程,计数器不能记录
- 技术分析:
ServletContext
-
5-1 ServletContext:全局管理者,域对象
上下文(全局管理者)
常用的方法:
setAttribute(String key,Object value);//设置值
Object getAttribute(String key);//获取值
removeAttribute(String key)://移除值
-
5-2 获取全局管理者
getServletContext()
-
5-3 步骤分析
1.在项目启动的时候,初始化登录次数
在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext上
@Override //初始化登录次数 public void init() throws ServletException { //获取全局管理者——省略 this ServletContext context=getServletContext(); //初始化次数 context.setAttribute("count", 0); System.out.println("初始化次数成功"); }
2.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数
3.然后将次数+1,让后将值设置回去
//4.获取全局管理者
ServletContext context = this.getServletContext();
//5.获取总次数
Integer cishu = (Integer) context.getAttribute("count");
//6.将次数+1
cishu++;
//7.将次数再次放入域对象中
context.setAttribute("count", cishu);@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //0.设置编码 response.setContentType("text/html;charset=utf-8"); //1.接受用户名和密码 String username=request.getParameter("username"); String password=request.getParameter("password"); //2.调用userservice 里的login(username,password) 返回值:User user User user = null; try { user = new UserService().login(username,password); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("网络异常,请稍后再试!"); } //3.判断user是否为空 if(user==null){ //3.1若为空 写"用户名和密码不匹配" response.getWriter().print("用户名和密码不匹配,3秒之后跳转"); //案例2-定时跳转 response.setHeader("refresh", "3;url=/day0902/login.htm"); }else{ //3.2若不为空 写"xxx:欢迎回来" response.getWriter().print(user.getUsername()+":欢迎回来"); //4.获取全局管理者 ServletContext context = this.getServletContext(); //5.获取总次数 Integer cishu = (Integer) context.getAttribute("count"); //6.将次数+1 cishu++; //7.将次数再次放入域对象中 context.setAttribute("count", cishu); } }
4.当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可
/** * 展示登录人数的总次数 */ public class ShowServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //0.设置编码 response.setContentType("text/html;charset=utf-8"); //1.获取全局管理者 ServletContext context = this.getServletContext(); //2.获取登录的次数 Integer cishu=(Integer) context.getAttribute("count"); //3.在页面上打印总次数 response.getWriter().print("登录成功的总次数为:"+cishu); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
-
5-4 ServletConfig:(了解)
servlet配置对象
-
5-4-1 作用
1.获取当前servlet的名称
2.获取当前servlet的初始化参数
3.获取全局管理者
-
5-4-2 方法
- String getServletName():获取当前servlet的名称(web.xml配置的servlet-name
- String getInitParameter(String key):通过名称获取指定的参数值
- Enumeration getInitParameterNames() :获取所有的参数名称
初始化参数是放在 web.xml文件
servlet标签下子标签 init-paramEnumeration<String> names = config.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
System.out.println("参数名称:"+name);
}
- ★getServletContext():获取全局管理者
- servletconfig是由服务器创建的
在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象
传递给servlet,由servlet的getServletConfig方法获取
配置文件
<servlet> <description></description> <display-name>SConfigServlet</display-name> <servlet-name>SConfigServlet</servlet-name> <servlet-class>com.itheima.d_config.SConfigServlet</servlet-class> <init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>1234</param-value> </init-param> </servlet>
servletconfig 对象的常用方法
/** * servletconfig 对象的常用方法 */ public class SConfigServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取servletconfig ServletConfig config = this.getServletConfig(); //获取当前servlet的名称 String servletName=config.getServletName(); System.out.println("名称:"+servletName); //获取初始化参数 String user=config.getInitParameter("user"); System.out.println("获取单一的值user:"+user); System.out.println("==================="); Enumeration<String> names = config.getInitParameterNames(); while(names.hasMoreElements()){ String name = names.nextElement(); System.out.println("参数名称:"+name); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
-
5-5 ServletContext:理解
上下文(全局管理者)
一个项目的引用.代表了当前项目.
当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
当项目被移除的时候或者服务器关闭的时候servletcontext销毁
-
5-5-1 作用
1.获取全局的初始化参数
2.共享资源(xxxAttribute)——servlet之间通信
3.获取文件资源
4.其他操作
-
5-5-2 获取servletcontext
- 方式1:了解
getServletConfig().getServletContext()
- 方式2:
getServletContext()
-
5-5-3 常用方法
- 1.了解
String getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames() :获取所有的参数名称
在根标签下有一个 context-param子标签 用来存放初始化参数
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
- 2.xxxAttribute
setAttribute(String key,Object value);//设置值
Object getAttribute(String key);//获取值
removeAttribute(String key)://移除值
- 3.getRealPath
String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
如:getRealPath("/") : D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
InputStream getResourceAsStream(String path):以流的形式返回一个文件
- 4.获取文件的mime类型 大类型/小类型
String getMimeType(String 文件名称)
- 5.servletcontext 的常用方法
/** * servletcontext 的常用方法 */ public class ScontextServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取全局管理者 ServletContext context = this.getServletContext(); //获取初始化参数 String encoding=context.getInitParameter("encoding"); System.out.println("初始化参数:"+encoding); //获取文件的真实路径 //String path = context.getRealPath("/");//项目目录下 String path = context.getRealPath("/1.txt");//项目目录下 System.out.println(path); //以流的形式返回一个文件 InputStream is = context.getResourceAsStream("/1.txt"); System.out.println(is); //获取文件的mime类型 System.out.println("----------------"); String mimeType = context.getMimeType("1.jpg"); System.out.println(mimeType); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
-
六、域对象:★★★
servletcontext
当成map集合
-
6-1 常用方法
xxxAttribute()
-
6-2 servletcontext创建和销毁
当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
当项目被移除的时候或者服务器关闭的时候servletcontext销毁
-
6-3 存放
共享的数据——所有servlet都可以访问
-
6-4 获取文件的路径
通过类加载器获取文件:2.txt 放在classes目录下——部署前放置 src 目录下 无论是java项目还是web项目都可以
类.class.getClassLoader().getResource("2.txt").getPath()
-
总结
- http:超文本传输协议
请求:
响应:
- servlet:★
本质上就是一个类,运行在服务器端的一个java小程序,生成动态web内容处理业务逻辑.
- 编写servlet
1.编写一个类 继承了HttpServlet 重写了doGet()或者doPost()
2.编写配置文件
注册servlet
<servlet>
<servlet-name>给servlet起个名字 名字唯一</servlet-name>
<servlet-class>servlet的全限定名</servlet-class>
</servlet>
绑定路径
<serlvet-mapping>
<servlet-name>给servlet起个名字 名字唯一</servlet-name>
<url-pattern>访问路径 目前都是以"/"开始</url-pattern>
</serlvet-mapping>
3.访问路径:
http://主机:端口号/项目名/路径
- servlet的体系结构
所有的servlet应该继承HttpServlet 间接的实现了Servlet接口
- httpServlet中的方法
service(ServletRequest request,ServletResponse response):在这个方法中 将两个参数强转,调用了重载service方法
service(HttpServletRequest request,HttpServletResponse response):获取请求的方式,根据请求方式的不同调用相应doXxx方法
doGet和doPost方法:用来处理我们自己业务逻辑
- servlet的生命周期 ★★★
- url-pattern的配置
完全匹配>目录匹配>后缀名匹配
- load-on-startup:修改servlet的初始化时机
- 若我们自己的项目处理不了请求,服务器上有一个默认的servlet会帮我们处理
- servletConfig
servlet的配置对象:
获取servlet名称 初始化参数
获取全局管理者★ getServletContext()
- servletContext
上下文
作用:
1.获取全局的初始化参数
getInitParameter("key")
2.共享资源(域对象)
xxxAttribute()
3.获取资源
getRealPath("/1.txt"):获取项目发布到服务器上位置的根目录
getResourceAsStream("/1.txt"):以流的形式返回一个文件
4.获取文件mime类型
getMimeType(文件名称)
- 域对象
servletcontext
创建:
销毁: