1.Servlet
1.1.为何学习Servlet
1.2.Servlet概述
1.2.1.Servlet概念
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API动态的向客户端输出内容
1.2.2.Servlet快速入门
实现步骤:
1)创建类实现Servlet接口
【思考】:为何这么操作就可以不报错了,并且Ecplise中有servlet接口的提示了呢?
2)覆盖尚未实现的方法
publicclass Demo1Servlet implements Servlet{ publicvoid destroy() { // TODO Auto-generated method stub } public ServletConfig getServletConfig() { // TODO Auto-generated method stub returnnull; } public String getServletInfo() { // TODO Auto-generated method stub returnnull; } publicvoid init(ServletConfig arg0) throws ServletException { // TODO Auto-generated method stub } publicvoid service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub }} |
---|
在servlet中接口中一共实现了5个方法,我们着重是要思考的service方法!!!!
3)在web.xml进行servlet的配置
<< span="">servlet> << span="">servlet-name>abcservlet-name> << span="">servlet-class>com.yueqian.Demo1Servletservlet-class> servlet> << span="">servlet-mapping> << span="">servlet-name>abcservlet-name> << span="">url-pattern>/demo1Servleturl-pattern> servlet-mapping> |
---|
最终效果:
1.2.3.Servlet的请求流程
1.3.Servlet的API详解
publicvoid init(ServletConfig arg0) throws ServletException { // TODO Auto-generated method stub }publicvoid service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("service.............."); } publicvoid destroy() { // TODO Auto-generated method stub } public ServletConfig getServletConfig() { // TODO Auto-generated method stub returnnull; } public String getServletInfo() { // TODO Auto-generated method stub returnnull; } |
---|
不管是init还是service还是其他方法,仔细观察,这些方法都不是被static修饰的,所以必须先实例化创建一个Demo1Servlet 对象,再由这个对象进行调用!
那么再思考,我们从来都没有去实例化过这个对象,那这个对象是怎么创建的呢?
也就是说由服务器tomcat帮我们创建的对象,由服务器创建这个对象,调用init,调用service方法!
1.3.1.init方法
1)init方法何时执行?
Servlet创建的时候调用
2)service方法何时执行?
每次请求都会执行
3)destroy方法何时执行?
Servlet销毁的时候执行的
1.3.2.servlet的生命周期
1)servlet何时创建
默认第一次访问的时候创建
2)servlet何时销毁
服务器关闭servlet就销毁了
3)每次访问必然执行的方法
service
1.3.3.生命周期2个方法参数
1)init
publicvoid init(ServletConfig config) throws ServletException { System.out.println("init........"); } |
---|
ServletConfig :代表的是该servlet对象的配置信息
2)destroy 关闭服务器
3)service
publicvoid service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("service.............."); } |
---|
ServletRequest :代表请求 认为ServletRequest 内部封装的是 http请求的信息
ServletResponse :代表响应 认为要封装的是响应的信息
1.4.Servlet的配置
1.4.1.基本配置
—servlet类的配置--> << span="">servlet> << span="">servlet-name>abcservlet-name> << span="">servlet-class>com.yueqian.Demo1Servletservlet-class> << span="">init-param> << span="">param-name>jdbcparam-name> << span="">param-value>jdbc:mysql://localhost:3306param-value> init-param> servlet> —servlet的虚拟路径配置--> << span="">servlet-mapping> << span="">servlet-name>abcservlet-name> << span="">url-pattern>/demo1Servleturl-pattern> servlet-mapping> |
---|
其中url-pattern的配置方式:
1)完全匹配 访问的资源与配置的资源完全相同才能访问到
2)目录匹配 格式:/虚拟的目录../* *代表任意
3)扩展名匹配 格式:*.扩展名
注意:第二种与第三种不要混用 /aaa/bbb/*.abcd !!
1.4.2. 服务器启动实例化Servlet配置
Servlet的何时创建:默认第一次访问时创建
为什么是默认?
当在servlet的配置时 加上一个配置servlet对象在服务器启动 时就创建
<< span="">servlet> << span="">servlet-name>abcservlet-name> << span="">servlet-class>com.yueqian.Demo1Servletservlet-class> << span="">init-param> << span="">param-name>jdbcparam-name> << span="">param-value>jdbc:mysql://localhost:3306param-value> init-param> << span="">load-on-startup>3load-on-startup> servlet> << span="">servlet-mapping> << span="">servlet-name>abcservlet-name> << span="">url-pattern>*.abcdurl-pattern> servlet-mapping> |
---|
1.4.3.缺省的servlet(默认的servlet)
可以将url-pattern配置一个/,代表该servlet是缺省的servlet
什么是缺省的servlet?
当你访问资源地址所有的servlet都不匹配时 , 缺省的servlet负责处理
1.4.4.欢迎页
http://localhost:8080/demo1/
<< span="">welcome-file-list> << span="">welcome-file>index.htmlwelcome-file> << span="">welcome-file>index.htmwelcome-file> << span="">welcome-file>index.jspwelcome-file> << span="">welcome-file>default.htmlwelcome-file> << span="">welcome-file>default.htmwelcome-file> << span="">welcome-file>default.jspwelcome-file> welcome-file-list> |
---|
因为,在当前的web应用程序中,有配置请求页面的顺序!!!
默认从上到下依次去寻找!!
如果将应用程序的web.xml中的配置删除掉,发现还是会按照顺序访问!
1.5.HttpServlet
1.5.1.操作步骤:
1)新建选择servlet模板
2.填写servlet名称
3.修改url-parten
4.选择servlet中要实现的方法
1.5.2.servlet模板分析
1.原来我们是定义一个类去实现servlet接口,这里为何是继承呢?
2.之前我们都是覆盖的是service方法,这里为何是doGet和doPost方法呢?
按照我们以前以前学习的面向对象的原则,儿子如果没有,应该找爹的方法,所以就找httpServlet
doPost中为何调用doGet呢?
1.6.ServletContext对象
1.6.1.ServletContext对象概念
ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象内部封装是该web应用的信息!
问题:
一个web应用有几个servlet对象?----多个
ServletContext对象一个web应用只有一个
1.6.2.如何获取ServletContext对象
1)ServletContext servletContext = config.getServletContext();
2)ServletContext servletContext = this.getServletContext();
思考:为何使用this就可以调用这个方法呢?
在它爹(HttpServlet)中没有这个方法
再去找爷爷
1.6.3.ServletContext作用
1.6.3.1.获得web应用全局的初始化参数
web.xml中配置初始化参数
通过context对象获得参数
1.6.3.2.获得web应用中任何资源的绝对路径(重要 重要 重要)
根据web应用的相对地址获取资源的绝对路径!
方法:String path = context.getRealPath(相对于该web应用的相对地址);
WebContent中内容会被copy发布到web应用内部中去!
获取不到的,因为发布不过去
1.6.3.3.获取当前JavaWeb项目的名称
ServletContext servletContext = this.getServletContext();servletContext.getContextPath() |
---|
1.6.3.4.ServletContext是一个域对象(重要 重要 重要)
什么是域对象?什么是域?
区域
广州市 域 范围
存储数据的区域就是域对象
ServletContext域对象的作用范围:整个web应(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)
域对象的通用的方法:
setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);
1.7.练习实战(自己练习)
1.71.用户登录案例
1.7.2.用户注册案例
Jdbc
数据库
Servlet
String str = request.getParameter("username");