1.什么是servlet
- servlet使用运行在web服务器上的小型java程序,通过http接收或者响应web客户端的请求
- servlet与jsp的关系 警察 协警
2.Servlet接口的5个方法
init()
在Servlet实例化后,Servlet容器会调用init()方法来 初始化该对象,主要是为了让Servlet对象在处理客户请求前可以完成一些初始化工作,例如:建立 数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只能被调用一次。init() 方法有一个类型为ServletConfig的参数,Servlet容器通过这个参数向Servlet传递配置信息。 Servlet使用ServletConfig对象从Web应用程序的配置信息中获取以名-值对形式提供的初始化参 数。另外,在Servlet中,还可以通过ServletConfig对象获取描述Servlet运行环境的 ServletContext对象,使用该对象,Servlet可以和它的Servlet容器进行通信。
service()
容器调用service()方法来处理客户端的请求。要注意的是,在service()方法被容器调用之前,必须确 保init()方法正确完成。容器会构造一个表示客户端请求信息的请求对象(类型为ServletRequest)和 一个用于对客户端进行响应的响应对象(类型为ServletResponse)作为参数传递给service()。在 service()方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请 求进行处理后,调用ServletResponse对象的方法设置响应信息。
destroy()
当容器检测到一个Servlet对象应该从服务中被移除的时候,容器会调用该对象的destroy()方法,以便 让Servlet对象可以释放它所使用的资源,保存数据到持久存储设备中,例如将内存中的数据保存到数据 库中,关闭数据库的连接等。当需要释放内存或者容器关闭时,容器就会调用Servlet对象的destroy() 方法,在Servlet容器调用destroy()方法前,如果还有其他的线程正在service()方法中执行容器会等 待这些线程执行完毕或者等待服务器设定的超时值到达。一旦Servlet对象的destroy()方法被调用,容 器不回再把请求发送给该对象。如果需要改Servlet再次为客户端服务,容器将会重新产生一个Servlet 对象来处理客户端的请求。在destroy()方法调用之后,容器会释放这个Servlet对象,在随后的时间 内,该对象会被Java的垃圾收集器所回收。
getServletConfig()和getServletInfo()
该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含了Servlet的初始化参数。 返回一个String类型的字符串,其中包括了关于Servlet的信息,例如,作者、版本和版权。该方法返回的应该是纯文本字符串,而不是任何类型的标记。
3.ServletRequest接口
- req.getMethod()获得请求行中的命令
- req.getServletPath();获得请求行中的资源路径
- req.getProtocol();获得请求行中的协议
- req.getQueryString()获得请求中的参数信息
- req.getHeader(“Host”)获得主机信息
- req.getHeader(“User-Agent”) 获得用户代理(浏览器)
- req.getInputStream()获得消息体的长度
- resp.setStatus(200);设置状态码为200
- resp.setContentType(“image/jpeg”);设置MIME类型
3.1其他
4.部署Servlet的两种方式
- WebServlet注解:loadOnStartup加载顺序
- web.xmlhello和com.qfedu.servlet.FirstServlet
5.处理中午乱码
1. response.setCharacterEncoding("UTF-8"); 2. respnse.setHeader("content-type","text/html;charset=UTF-8"); 3. resp.setContentType("text/html;charset=utf-8"); 4. respnse.getWriter().append("<h1>中文</h1>");
生成HTML方式
1. PrintWriter out = response.getWriter();(1)append("String")(2)println("String") 2. write("String")