servlet简介
简单来说,servlet就相当于是后台处理数据的一个东西。比如说表单要提交了 action提交到哪里去呢?就写一个比如XX.java 这个里面写一个java类(servlet) 这个类用于处理提交过来的信息。
然后接下来我们瞎bb一会儿:
servlet是jsp的前身,是一个可以通过”请求-响应”编程模型来访问的 在服务器上运行的小程序。
servlet容器管理context容器,一个context容器对应一个web工程
Servlet(接口):有三个方法 :Init()、service()和destroy();
类的关系
GenericServlet(抽象类,实现servlet接口):是与协议无关的servlet类。
HttpServlet(抽象类):实现了http协议的servlet类。
自定义Servlet(继承HttpServlet方法):一般重写(覆盖)doGet与doPost方法。重写哪个方法取决于用户用什么方式提交请求。
servlet生命周期
- init 初始化
- 响应客户请求 service-(doGet或doPost)
- 服务器关闭-终止:destroy(只有服务器被关闭时才会执行destroy,仅仅终止程序是没有用的)
一旦servlet实例被装载,servlet对象会一直保存在服务器内存当中
Tomcat装载servlet的三种情况:
- 当客户端首次访问某个servlet时
- servlet容器启动时可以自动装载某些servlet(不需要客户端进行请求)
需要在web.xml文件中进行如下配置:
<servlet>
<loadon-startup>1</loadon-startup>//数字越小优先级越高
</servlet>
- servlet类文件被更新后,也会重新装载servlet
手动编写servlet步骤
- 继承HttpServlet
- 重写(覆盖)doGet与doPost方法.(这取决于用户用什么方式提交请求,超链接使用的是get方式,表单可以指定使用post方法)
- 在web.xml中注册servlet
在新版的eclipse中创建servlet时取消了自动在web.xml中生成servlet 和mapping,取而代之的时在servlet中加入注解@webservlet
,在@WebServlet 中定义Servlet的name、urlPatterns等信息。
虽然已经不需要它了,但还是讲讲web.xml的配置方法吧
注意不要既配置web.xml又配置@WebServlet,不然可能tomcat会启动出错
在<welcome-file-list></welcome-file-list>
后面加上:
<servlet>
<servlet-name>TaxiPriceServlet</servlet-name>//servlet的名字
<servlet-class>Servlet.TaxiPriceServlet</servlet-class>//这里的类名要写完整,是带包名的
</servlet>
<servlet-mapping>
<servlet-name>TaxiPriceServlet</servlet-name>//和上面的servlet-name相同(对应)
<url-pattern>/Servlet/TaxiPriceServlet</url-pattern>//映射地址
</servlet-mapping>
实现第一个servlet例子——向页面输出内容
- 在src中新建一个包。就叫servlet好了。
- 右键包-新建servlet,然后就会发现它自己生成了很多内容。
- 我们现在只需要覆写一下doGet方法
因为一般来说自动生成的doPost都会调用doGet,像这样:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
当然覆写doPost然后用doGet去调用它也是可以的,也可以都进行覆写(两种提交方式写不同的代码)
4. 调用PrintWriter类(需要import java.io.PrintWriter)——实现向浏览器输出东西
doGet和doPost方法要抛出异常:ServletException, IOException(import java.io.IOException;
import javax.servlet.ServletException;)
response.setContentType("text/html;charset=utf-8");//可以使下面的引号里支持html代码 并向页面输出中文 注意这句一定要写在printwriter前 不然输出的中文会是问号
PrintWriter out = response.getWriter();
out.println("");
//当然也可以用system.out.println来向后台输出东西