Servlet简介
开发者通过实现Servlet接口书写业务操作,web容器通过Servlet接口调用方法,可以屏蔽开发者业务量的差异
Servlet由容器来管理生命周期web服务器交互
Servlet的API结构
在Servlet规范中,Servlet是业务接口,提供servlet方法,供开发者业务操作,ServletConfig是配置接口,用于配置servlet相关信息
GenericServlet同时实现了Servlet接口和ServletConfig接口,并为两个接口的大部分方法提供 了简单实现,但是没有实现service方法,该方法需要由不同的类根据不同的协议特点分别重写
HttpServlet是GenericServlet的子类,根据Http协议的特点重写了service方法,该service方法根据不同的请求方式,分别调用doXXX(),如果开发者使用http学协议,那么,只需要继承httpServlet,重写doGet和doPost就可以了
servlet编码
public class FirsServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求信息的编码集,只对Post有效
req.setCharacterEncoding("utf-8");
// 设置响应信息的MIME类型和编码集
resp.setContentType("text/html;charset=utf-8");
// 向客户端输出文本
resp.getWriter().println("hello,how你好中国");
}
servlet注册
// 第一个参数为上下文对象,第二个参数为servlet名称,第三个参数未servlet实现类对象
Wrapper servlet = tomcat.addServlet(context,"first" ,new FirsServlet());
// 表示容器启动就直接实例化servlet
servlet.setLoadOnStartup(1);
// 配置servlet的请求路径
servlet.addMapping("/fir");
servlet请求路径
精确匹配:
/test 客户端以/test路径请求可以访问servlet
扩展匹配:
*.do 客户端以.do结尾的路径请求可以访问servlet
路径匹配:
/user/*开始的目录路径请求可以访问servlet
servlet生命周期
1,容器加载并实例化Servlet
2,调用init方法完成初始化
3,当请求到达,调用service方法,处理请求,产生响应
4,销毁阶段,调用destroy()方法,完成资源清理
5,在整个生命周期中,1,2,4都只进行一次,只有三部步,每次请求都会执行,而servlet实现类是一个单实例,多线程的一个类
得到表单数据
String info= "";
// 根据表单名,得到表单值
String userName = req.getParameter("userName");
String birthday = req.getParameter("birthday");
info+="姓名"+userName+"生日"+birthday;
String[] likeArray = req.getParameterValues("like");
info+="爱好"+ Arrays.toString(likeArray)+"<br>";