1,什么是servlet?
servlet是JavaWeb的三大组件之一,它属于动态资源,servlet的作用就是处理请求,服务器会把接收到的请求交给servlet来处理,它是可以被浏览器访问的动态资源。
在servlet中通常需要:- 接收请求数据;
- 处理请求;
- 完成响应;
2.创建servlet的方式(原始)三种方式:
(1).实现javax.servlet.Servlet接口(我这个类名叫FirstServlet)
* servlet可以完成:
* 接收请求数据:
* 接收客户端提交上来的数据,比如URL中携带参数处理请求数据
*
* 根据不同的需求,处理数据
* 完成响应:
* 响应有很多种,比如将数据传递给jsp显示
* serlvet的生命周期方法:
*
* init(config),
* service,
* destory
*
public class FirstServlet implements Servlet {
/**
* 可以通过config对象,获得servlet的配置信息
*/
private ServletConfig config;
/**
* 初始化方法init(congfig)
* 当servlet对象被创建的第一时间调用
* 当浏览器访问firstservlet时,服务器会给我们创建一个firstservlet的对象
* 在创建好这个对象后,就回调用这个对象的init方法
*
*
*
* @param servletConfig servletconfig类,封装了servlet的配置信息
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
this.config=servletConfig;
System.out.println("FirstServlet---init(config)");
config.getServletContext().removeAttribute("name");
}
@Override
public ServletConfig getServletConfig() {
return this.config;
}
/**
* 浏览器每次请求Firstservlet,
* 都会调用这个servce方法,
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("FirstServlet---service(sreq,srsp)");
}
@Override
public String getServletInfo() {
return null;
}
/**
* 当服务器关闭时,会销毁servlet对象,在销毁servlet对象之前,会调用他的destory方法
* ,可以砸这个方法中,释放资源
*/
@Override
public void destroy() {
System.out.println("FirstServlet---destory()");
}
}
<servlet>
<servlet-name>fs</servlet-name>
<servlet-class>servlet.FirstServlet</servlet-class>
<!--FristServlet的初始化参数-->
</servlet>
<servlet-mapping>
<servlet-name>fs</servlet-name>
<url-pattern>/fs</url-pattern>
</servlet-mapping>
以上是第一个方法的xml文件。这就是第一种创建servlet的方法。
(2)继承javax.servlet.GenericServlet类。
* GenericServlet是一个抽象类
* 继承GenericServlet类也可以创建servlet
* GenericServlet类也是实现了servlet接口
* 只不过帮我们实现可其他的方法
* 只是暴露出service方法
* 这样方便我们创建servlet类
public class SecondServlet extends GenericServlet {
/**
* init()并不是生命周期方法
* init(config)才是生命周期方法
* 当服务器创建当前的servlert的时候
* 服务器回调用init(config)方法
* 在init(config)方法中,调用了init()方法
*
*
*
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println(getServletContext().getAttribute("name"));
//获得域对象中所有属性的name值
//(就是键值中的键)
Enumeration<String> attributeNames = getServletContext().getAttributeNames();
System.out.println(getServletContext().getInitParameter("gender"));
//遍历集合
while (attributeNames.hasMoreElements()){
String element = attributeNames.nextElement();
System.out.println("paramName:"+element);
}
System.out.println("SecondServlet---service(srep,srsp)");
}
@Override
public void init() throws ServletException {
System.out.println("SecondServlet---init(config)");
}
}
<servlet>
<servlet-name>ss</servlet-name>
<servlet-class>servlet.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ss</servlet-name>
<url-pattern>/ss</url-pattern>
</servlet-mapping>
以上是继承GenericServlet类的创建servlert的方法,及xml。
(3)继承javax.servlet.http.HttpServlet类
* 当服务器访问service时,会创建一个servlet对象
* 然后调用该对象的init(config)方法
* 在init(config)方法中又会调用非生命周期的init()方法
* 当servlet被请求时,回调用生命周期中的service(sreq,srsp)方法
* 在该方法中,会调用非生命周期的service方法
* 在非生命周期的service中,会根据请求,选择要调用那个do方法
* 如果是get:会调用doGet()
* 如果是post:会调用doPost()
public class FouthServlet extends HttpServlet {
// @Override
// public void init(ServletConfig config) throws ServletException {
// //super.init(config)方法
// //就会调用 GenericServlet 父类中的方法的赋值操作
//
// super.init(config);
// }
@Override
public void init() throws ServletException {
//servlet的上下文对象
//实际上就是一个和装载多个的servlet的集合
ServletContext servletContext = getServletContext();
servletContext.setAttribute("name","张三");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String age = req.getParameter("age");
String t = req.getParameter("t");
System.out.println("dododododododo-----age:"+age);
System.out.println("dododododododo-----name:"+t);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String age = req.getParameter("age");
String t = req.getParameter("t");
System.out.println("postpsotpostpost----age:"+age);
System.out.println("postpsotpostpost----age:"+t);
}
}
上边是第三种创建servlet的方式。下面是xml文件。
<servlet>
<servlet-name>Fs</servlet-name>
<servlet-class>servlet.FouthServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Fs</servlet-name>
<url-pattern>/Fs</url-pattern>
</servlet-mapping>