Servlet规范
servlet接口实现类开发步骤
注意
在web开发过程中,只有作为Servlet接口实现类才有资格作为动态资源文件。
Servlet接口由http服务器厂商负责提供
接口来自于这个包:F:\JAVA\apache-tomcat-9.0.45-windows-x64\apache-tomcat-9.0.45\lib\servlet-api.jar!\javax\servlet
该过程中需要使用的到抽象类,抽象类的作用是:1.降低接口实现类对接口实现过程难度。2.将接口中不需要使用的抽象方法交给抽象类进行完成。3.这样接口只需要对需要使用的方法进行重写
servlet接口:
init,
getservletconfig,
getservletinfo,
destory ----------这四个方法对于servlet接口实现类没有用。
service() 这个方法有用。
Tomcat根据Servlet规范调用Servlet接口实现类规则:
Tomcat有权创建Servlet接口实现类实例对象
Servlet OneServlet=new OneServlet();
Tomcat根据实例对象调用Service方法处理当前请求
OneServlet.service()
第一步
创建一个java类继承于httpServlet这个父类,使之成为一个Servlet接口实现类
package com.bjpowernode.controller;
import javax.servlet.http.HttpServlet;
public class OneServlet extends HttpServlet {
}
第二步
重写HttpServlet 父类两个方法Get()和Post();
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
System.out.println("Oneservlet类针对浏览器发送get请求方式处理");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Oneservlet类针对浏览器发送post请求方式处理");
}
}
第三步
将servlet接口实现类信息注册到Tomcat服务器
【网站】----》【web】----》【WEB-INF】----》web.xml
<!--将servlet接口实现类类路径地址交给Tomcat-->
<servlet>
<servlet-name>OneServlet</servlet-name> <!--声明一个变量存储servlet接口实现类类路径 -->
<servlet-class>com.bjpowernode.controller.OneServlet </servlet-class><!--声明servlet接口实现类类路径 -->
</servlet>
<!--Tomcat String mm=" com.bjpowernode.controller.OneServlet"-->
<!--为了降低用户访问servlet接口实现类的难度,需要设置简短请求别名 -->
<servlet-mapping>
<servlet-name>OneServlet</servlet-name>
<url-pattern>/one</url-pattern><!--设置简短的请求别名,必须以‘/’开头 -->
</servlet-mapping>
<!--
当请求别名设置好了以后,如果浏览器要向Tomcat索要Oneservlet时地址
http://localhost:8080/myweb/one
-->
Servlet生命周期
1.网站中的所有servlet接口实现类实例对象只能有http服务器负责创建,开发人员不能手动创建这个servlet接口实现类实例对象。
2.在默认情况下,http服务器接收到对于当前servlet接口实现类第一次请求时会自动创建这个servlet接口实现类实例对象
在手动配置情况下,要求http服务器在启动时自动创建某个servlet接口实现类的实例对象。
<servlet>
<servlet-name>mm</servlet-name><!--声明一个变量存储servlet接口实现类类路径 -->
<servlet-class>com.bgpowernode.count.oneservlet</servlet-class><!--声明servlet接口实现类类路径 -->
<load-on-startup>30</load-on-startup><!-- 填写一个大于0的整数 表示在Tomcat启动时就要将该命令用于对象-->
</servlet>
3.在http服务器运行期间,一个servlet接口实现类只能被创建出一个实例对象。
4.在http服务器关闭时,会自动将网站中所有servlet对象销毁。
HttpServletResponse接口
介绍
1.HttpservletResponse接口来自于servlet规范中,在Tomcat中存在servlet-api.jar
2.HttpservletResponse接口实现类由Http服务器负责提供
3.HttpServletResponse接口负责将docet/doPost方法执行结果写入到【响应体】交给浏览器
4.一般将HttpServletResponse接口修饰的对象称为“响应对象”
主要功能
1.将执行结果以二进制的形式写入响应体
2.设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】;
response.setContentType("text/html;charset=utf-8");
在默认的情况下,content-type属性的值"text" content-type="text"此时浏览器将会采用【文本编译器】对响应体二进制数据进行解析
3.设置响应头中【location】属性,将一个请求地址赋值给location.从而控制浏览器向指定服务器发送请求
response.sendRedirect("http://www.baidu.com");//当浏览器接收到响应包后如果发现响应头中带有location属性,将自动通过地址栏向location指定网站发送请求。sendRedirect方法远程控制浏览器请求行为【请求地址,请求方式,请求参数】
HttpservletRequest接口
介绍:
- HttpservletRequest接口来自
于servlet规范中,在Tomcat中存在servlet-api.jar
2)HttpservletRequest接口实现类由Http服务器负责提供
3)HttpservletRequest接口负责在doGet/doPost方法运行时读取Ettp请求协议包中信息
4)开发人员习惯于将HttpservletRequest接口修饰的对象称为【请求对象】
作用:
1)可以读取Http请求协议包中【请求行】信息
2)可以读取保存在Htp请求协议包中【请求头】或则【请求体】中请求参数信息
3)可以代替浏览器向Http服务器申请资源文件调用
请求转发解决方法
Cookie
介绍
1)cookie来自于servlet规范中一个工具类,存在于Tomcat提供servlet-api.jar中
2)如果两个servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于cookie对象进行数据共享
3)Cookie存放当前用户的私人数据,在共享数据过程中提高服务质量
原理
用户通过浏览器第一次向Myweb网站发送请求申请oneservlet.oneservlet在运行期间创建一个cookie存储与当前用户相关数据oneservlet工作完毕后,【将cookie写入到响应头】交还给当前浏览器。
浏览器收到响应响应包之后,将cookie存储在浏览器的缓存
一段时间之后,用户通过【同一个浏览器】再次向【myweb网站】发送请求申请Twoservlet时【浏览器需要无条件的将myweb网站之前推送过来的cookie,写入到请求头】发送过去此时Twoservlet在运行时,就可以通过读取请求头中cookie中信息,得到oneservlet提供的共享数据
实现命令
同一个网站oneservlet 与Twoservlet借助于cookie实现数据共享
Httpsession接口
介绍
- Httpsession接口来自于servlet规范下一个接口。存在于Tomcat中servlet-api.jar其实现类由Http服务器提供。Tomcat提供实现类存在于servlet-api.jar
- 如果两个servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时
借助于Httpsession对象进行数据共享 - 开发人员习惯于将Httpsession接口修饰对象称为【会话作用域对象】
httpsession 与 Cookie 的区别
- 存储位置:一个在天上,一个在地下
cookie:存放在客户端计算机(浏览器内存/硬盘)
Httpsession:存放在服务端计算机内存 - 数据类型
cookie对象存储共享数据类型只能是string
Httpsession对象可以存储任意类型的共享数据object - 数据流量
一个cookie对象只能存储一个共享数据
Httpsession使用map集合存储共享数据,所以可以存储任意数量共享数据 - 参照物
cookie相当于客户在服务端【会员卡】
Httpsession相当于客户在服务端【私人保险柜】
httpsession命令实现
同一个网站下OneServlet将数据传递给TwoServlet
Http服务器如何将用户与HttpSession关联起来
cookie
5.getSession() 与 getSession(false)
1)getSession(): 如果当前用户在服务端已经拥有了自己的私人储物柜.
要求tomcat将这个私人储物柜进行返回
如果当前用户在服务端尚未拥有自己的私人储物柜
要求tocmat为当前用户创建一个全新的私人储物柜
2)getSession(false):如果当前用户在服务端已经拥有了自己的私人储物柜.
要求tomcat将这个私人储物柜进行返回
如果当前用户在服务端尚未拥有自己的私人储物柜
此时Tomcat将返回null
6.HttpSession销毁时机:
1.用户与HttpSession关联时使用的Cookie只能存放在浏览器缓存中.
2.在浏览器关闭时,意味着用户与他的HttpSession关系被切断
3.由于Tomcat无法检测浏览器何时关闭,因此在浏览器关闭时并不会
导致Tomcat将浏览器关联的HttpSession进行销毁
4.为了解决这个问题,Tomcat为每一个HttpSession对象设置【空闲时间】
这个空闲时间默认30分钟,如果当前HttpSession对象空闲时间达到30分钟
此时Tomcat认为用户已经放弃了自己的HttpSession,此时Tomcat就会销毁
掉这个HttpSession
7.HttpSession空闲时间手动设置
在当前网站/web/WEB-INF/web.xml
<session-config>
<session-timeout>5</session-timeout> <!--当前网站中每一个session最大空闲时间5分钟-->
</session-config>