javaweb笔记5
1). 服务器创建Servlet:
当 Servlet 第一次被请求时,或服务器启动时,服务器会创建 Servlet 实例。
- 服务器默认是在servlet第一次被请求时创建Servlet实例,如果希望服务器启动时就创建Servlet实现需要在web.xml中配置
服务器只为一个类型的 Servlet 创建一个实例对象,所以 Servlet 是单例的;
2). 服务器初始化Servlet:
-
当服务器创建Servlet实例后会马上调用Servlet的init(ServletConfig)方法,完成对Servlet的初始化;
-
init(ServletConfig)只会被调用一次
-
服务器会在调用init()方法时传递ServletConfig参数
3). 服务器使用Servlet处理请求:
-
当Servlet被请求时,服务器会调用Servlet的service(ServletRequest,ServletResponse)方法
-
service(ServletRequest,ServletResponse)方法每处理一次请求,就会被调用一次,所以它可能会被调用N次
因为 Servlet 是单例的,所以可能在同一时刻一个 Servlet 对象会被多个请求同时访问,所以这可能出现线程案例问题
Servlet 不是线程案例的,这有助与提高效率,但不能让 Servlet 具有状态,以免多个线程争抢数据
4). 服务器销毁Servlet
服务器通常不会销毁 Servlet ,通常只有在服务器关闭时才会销毁 Servlet
-
服务器会在销毁Servlet之前调用Servlet的destory()方法
-
可以在destory()方法中给出释放Servlet占有的资源,但通常Servlet是没什么可要释放的,所以该方法一般都是空的
1.1.4 ServletConfig
ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletConfig对象给init()方法。
ServletConfig 对象封装了 Servlet 在 web.xml 中的配置信息,它对应 <servlet> 元素。
ServletConfig类的功能有:
-
String getServletName():获取 Servlet 配置名,即 <servlet-name> 的值;
-
ServletContext getServletContext():获取 ServletContext 对象
-
String getInitParameter(String name):获取初始化参数
-
Enumeration getInitParameterNames():获取所有初始化参数的名称
在web.xml文件中,配置<servlet>时可以为<servlet>配置0~N个初始化参数
1.1.5 GenericServlet
GenericServlet是Servlet接口的实现类,但它是一个抽象类,它唯一的抽象方法就是 service() 方法
GenericServlet实现了Servlet方法:
-
实现了String getServletInfo()方法
-
实现了void destory()方法,空实现
-
实现了void init(ServletConfig)方法,用来保存ServletConfig参数
-
实现了ServletConfig getServletConfig()方法
GenericServlet实现了ServletConfig接口:
-
实现了ServletContext getServletContext()方法
-
实现了String getInitParameter()方法
-
实现了String getServletName()方法
-
实现了Enumeration getInitParameterNames()方法
GenericServlet添加了init()方法:
-
该方法会被init(ServletConfig)方法调用
-
如果希望对Servlet进行初始化,那么应该覆盖init()方法,而不是init(ServletConfig)方法
service 方法中也可以使用 servletconfig 成员 , 只要在 init 方法之前就可以
不可贸然覆盖init方法,其中有config对象
可以覆盖init()无参函数
1.1.6 HttpServlet
HttpServlet是GenericServlet的子类,它专注HTTP请求
HttpServlet类的方法:
- 实现了void service(ServletRequest,ServletResponse)方法,实现内容是:
> 把ServletRequest强转成HttpServletRequest
> 把ServletResponse强转成HttpServletResponse
> 调用本类添加的void service(HttpServletRequest,HttpServletResponse)方法
- 添加了void service(HttpServletRequest,HttpServletResponse)方法,内容是:
> 调用request的getMethod()获取请求方式
> 如果请求方式为GET,那么调用本类添加的doGet(HttpServletRequest,HttpServletResponse)方法
> 如果请求方式为POST,那么调用本类添加的doPost(HttpServletRequest,HttpServletResponse)方法
-
添加了doGet(HttpServletRequest,HttpServletResponse)方法,内容是响应405,表示错误,所以我们应该去覆盖这个方法
-
添加了doPost(HttpServletRequest,HttpServletResponse)方法,内容是响应405,表示错误,所以我们应用去覆盖这个方法
如果是通过继承HttpServlet类来自定义Sevlet的话,那么:
-
不要去覆盖void service(ServletRequest,ServletResponse)
-
不要去覆盖void service(HttpServletRequest, HttpServletResponse)
-
而应该去覆盖doGet()或doPost()方法。
1.1.7 web.xml
servlet创建两种方式,
1.servlet第一次收到请求创建
2.服务器在启动时就创建
1.1.8 defaultServlet
default优先级最低,如果一个请求没有处理,那么它来处理,显示404
url-pattern 匹配的是 /
当访问路径不存在时,会执行defaultServlet,其实在访问index.html时也是在执行这个servlet
1.1.9 jspServlet
访问jsp页面时,会调用jspServlet,通过将动态资源转为静态资源,然后用response进行响应
1.1.10 session-config
session过期时间
1.2 MIME 多功能网际邮件扩充协议
多用途扩展类型,包含jpeg gif等,在这里定义了类型:
xml类型
txt类型
jpg/jpeg类型
doc类型
docx