Servlet
1.Servlet是利用反射技术创建的实例,要求构造器必须是无参的,在Servlet实例中必须提供给一个无参的构造器。
2.init()里可以有ServletConfig对象,初始化对象一般在init()方法中完成。
3.自己直接创建new一个实例是没有意义的,实力的创建和方法的调用都是通过servlet容器来负责调用的
4.init(ServletConfig servletConfig) :
①-获取初始化参数。servletConfig.getInitParameter()
-------------------------------------------------------------------
GenericServlet:
1.模拟实现原理:
.在Service方法中获取初始化参数:利用当前servlet定义一个ServletConfig类型的成员变量,在Servlet容器调用init()时,初始化该成员变量,然后在Service方法中就可以使用ServletConfig对象,就可以实现获取初始化参数
注意:在直接实现Servlet接口的Servlet中是不可以直接在service中直接获取初始化参数的,这也是实现GenericServlet的原理。
7. GenericServlet: 实现了 Servlet, ServletConfig 这两个接口, 所以在其中可以直接调用 ServletConfig 的任何方法;
通过 ServletConfig 类型的成员变量实现 ServletConfig 接口的方法;
额外定义 init()(无参) 防止在调用 init(ServletConfig) 方法时, 忘记调用 super.init(ServletConfig) 容易出现的问题;
init()(无参) 并非生命周期相关的方法, 该方法能在构造器之后被调用, 是因为在 init(ServletConfig) 中调用了 init()(无参)
所以可以覆盖无参的init()达到初始化的目的
-------------------------------------------------------------------------------------
HttpServlet:继承自GenericServlet
模拟实现原理:基于http协议的,所以传入的参数一定是http相关的:
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// 1. 因为当前的 Servlet 是基于 HTTP 协议的, 所以传入的参数一定也是 HTTP 相关的
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
service(request, response);//调用的是下面的那个方法
}
---------------------------------------------------------
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 获取请求方式
String method = request.getMethod();
// 2. 根据请求方式调用 doXxx() 方法
if ("Get".equalsIgnoreCase(method)) {
doGet(request, response);
} else if ("Post".equalsIgnoreCase(method)) {
doPost(request, response);
}
// ....
}
用ServletRequest无法获取到请求方式,必须强制转换为HttpServletRequest类型才可以获取网页的请求方式,可以获取相应的请求方式
因为请求方式是基于Http协议的,这也体现了java很好的多态继承机制 和 良好的扩展性
这就是HttpServlet的大致原理,
------------------------------------------------------------------------------
httpServletRequest实现原理
①-html基础:
单选<select name="age">
<option value="10">10</option>
<option value="11">10</option>
</age>
多选:
<input type="checkbox" name="interest" value="sports"/>Sports
<input type="checkbox" name="interest" value="shopping"/>Shopping
<input type="checkbox" name="interest" value="music"/>music
<input type="checkbox" name="interest" value="reading"/>reading
②-及各种方法的调用
---------------------------------------------------------------------------------
不赞成使用response输出,不推荐使用PrintWriter()方法
请求方式 一般post提交form表单信息
get提交一般限制在1kb以下
--------------------------------------------------------
ServletContext:代表当前的web应用,可以充当前web应用的信息
设置当前web应用初始化参数,任何一个Servlet都可以访问到。--在web.xml中<context-param>
在一个ServletContext中放入一个属性值,在另一个Servlet(在本应用中)中可以获取该属性,相当于插入了一个公共属性
setAttribute():向ServletContext共享内存中放入一个属性值
和getAttribute();从公共内存中取出一个属性值
需求:从指定界面进入系统,统计当前web应用的统计次数:
基本思路:先在指定Servlet中获取该属性值,并判断该属性值是否存在,若不存在放入,若存在使其加一,
-------------------------------------------------------------------------------------