基本功:
1、配置:Servlet – api.jar包导入到jdk1.6.0_10\jre\lib\ext中
2、Servlet(服务器端小程序):多线程、可移植。
最大好处:它可以处理客户端传来的HTTP请求,并返回一个响应。(特点:没有Main主程序)
3、接口类继承关系?
第一个Servlet程序――永远的HelloWorld!
package zz.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<head><title>Hello World!</title></head>");
out.println("<h2>Hello World!</h2>");
out.println("</body>");
out.println("<html>");
out.close();
}
}
Servlet程序编写完成后,马上配置修改web.xml文件
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>
zz.servlet.HelloServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
进化-->修改Web.xml文件(吹牛B的事情:我创造了一门语言)
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>
zz.servlet.HelloServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello.asp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello.zz</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/zz/*</url-pattern><!—在zz目录下表示任意名称都可以。图3所示->
</servlet-mapping>
![](https://img-my.csdn.net/uploads/201208/14/1344956292_3912.jpg)
Servlet与表单
<html>
<head><title>表单提交</title><head>
<body>
<form action="<%request.GetContentPath()%>/9_servlet/SubmitServlet" method="get">
请输入姓名:<input type="text" name="name">
<input type="submit" value="提交">
</form>
</body>
</html>
package zz.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SubmitServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{ // 处理Get请求
String info = req.getParameter("info"); // 接收请求参数
PrintWriter out = resp.getWriter(); // 准备输出
out.println("<html>");
out.println("<head><title>接收表单参数</title></head>");
out.println("<body>");
out.println("<h2>" + info + "<h2>");
out.println("</body>");
out.println("</html>");
out.close();
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
![](https://img-my.csdn.net/uploads/201208/14/1344956505_7353.jpg)
![](https://img-my.csdn.net/uploads/201208/14/1344956518_1307.jpg)
问题:标题为何是乱码?
三、Servlet生命周期
package zz.life;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LifeServlet extends HttpServlet{ // 继承HttpServlet
public void init()throws ServletException{ // 初始化操作
System.out.println("****1、Servlet初始化-->init()***");
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{ // 处理服务
System.out.println("****2、Servlet服务-->doGet()/doPost()");
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{ // 处理服务
this.doGet(req, resp); // 调用doGet()
}
public void destroy(){ // Servlet销毁
System.out.println("****3、Servlet销毁-->destroy()*******");
}
}
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>zz.life.LifeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>life</servlet-name>
<url-pattern>/LifeServlet</url-pattern><!—错误原因:没有/目录标志-->
</servlet-mapping>
![](https://img-my.csdn.net/uploads/201208/14/1344956646_8488.jpg)
反复F5刷新,结果:
![](https://img-my.csdn.net/uploads/201208/14/1344956674_6208.jpg)
结论:默认状态下,servlet只在第一次运行时初始化;当然也可以经过配置:<load-on-startup>1</load-on-startup>
让其在容器Tomcat启动时进行初始化。
问题:
1、请区分容器和服务器?
2、关闭容器 || 一个Servlet长时间不使用和动态加载怎样实现?(servlet销毁)
3、回顾config对象、模板设计模式(servlet程序本身应用);
4、Servlet生命周期控制的3个方法:init(), service()(doGet()、doPost())和destory();