一、servlet的概念
Servlet是一种独立与平台和协议的服务器端java应用程序,通过Servlet可以生成动态web页面,同时使用Servlet还可以在服务器端对客户的请求进行处理,控制程序的执行。
Servlet的主要作用就是交互式的浏览和更新数据,并生成动态的页面内容展示。
1. 服务器接收客户端发送的请求。
2. 服务器将请求信息发送至Servlet.
3. Servlet进过处理后,生成响应的内容。
4. Servlet将响应的内容返回客户端。
名称 说明 所在包
servlet接口 JavaServlet的基础接口,定义了Servlet必须实现的方法 javax.servlet
GenericServlet 继承自servlet接口属于通用的不依赖于协议的servlet javax.servlet
HttpServlet 继承自GenerticServic类在此继承上扩展了http协议的Servlet javax.servlet.http
HttpServletRequest 继承自servletRequest接口用于数据的读取 javax.servlet.http
HttpServletResponse 继承自servletResponse接口用于返回数据 javax.servlet.http
二、servlet的生命周期
Servlet容器:是用来装载Servlet对象的一种容器。是负责管理Servlet的一类组件。
1、 实例化---》Servlet容器创建Servlet的实例
2、 初始化---》该容器调用init()方法
init()方法:初始化方法只会别调用一次,在创建servlet时候调用
3、 服务-----》如果请求Servlet,则容器调用Service()方法
service()方法时执行任务的主要方法,每次服务器接收到一个servlet请求,都会启动一个线程并调用服务,service()方法会检查http请求类型,调用相应的doGet或doPost方法
4、 销毁-----》销毁实例之前调用destroy()方法。
destroy()方法也只会被调用一次,在servlet生命周期结束时调用,会关闭数据库连接,停止线程等,destroy()方法执行后GC会回收servlet对象。
三、创建servlet
(1).创建servlet的三种方法
1.继承servlet接口(interface)
2.继承GenericServlet类(class)
3.继承httpServlet类(class)
(2).在web.xml中添加servlet的配置
<servlet> <servlet-name>myServlet</servlet-name> <servlet-calss>servlet.MyServlet</servlet-calss> </servlet> <servlet-mapping> <servlat-name>myServlat</servlat-name> <url-pattern>/myServlet</url-pattern> <servlat-mapping> <servlet> <servlet-name>servlet</servlet-name> <servlet-class>servlet.servlet</servlet> <init-param> <!-- 初始化参数 --> <param-name>charSetContent</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>servlet<servlet-name> <url-pattern>utf-8</url-pattern> </servlet-mapping>
(3).创建servlet类:
package demo.web.servlet; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("调用了doGet方法"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { super.service(arg0, arg1); } @Override public void destroy() { System.out.println("调用了销毁的方法"); } @Override public void init(ServletConfig config) throws ServletException { System.out.println("init被初始化了"); String initParam=config.getInitParameter("charSerContent"); System.out.println(initParam); } }
说明:<url-pattern>标签里面可以有三种设置方法:
1./myservlet
2./xx/*
3.*.do
四、servlet的部署和运行:
1.servlet的运行比较简单,只要通过url就可以实现访问,servlet的访问名称必须与web.xml文件中设置的url的映射名一致。
2.在浏览器中输入:localhost:8080/项目名/url-pattern对应的类型 (如果是第一种输入/myservlet,第二种输入/xx/任意字符,第三种是任意字符.do),就会在控制太输出信息。
五、servletRequest对象和httpServletRequest对象
当用户请求时有servlet容器创建servletRequest对象,这个对象被容器作为service()方法之一传给servlet,servlet能够利用servletRequest获取客户端的数据请求数据。
1.servletRequest对象常用方法
常用方法 说明
getAttribute(String name); 获取名字为name的值
setAttribute(String name,Object obj); 设置名字为name的值
getParameter(String name); 获取表单中传入的参数
2.HttpServletRequest对象常用方法
常用方法 说明
String getContextPath(); 获取上下文路径
Cookie[] getCookies(); 返回客户端发送的所有cookie对象
HttpSession getsession(); 返回和此次请求相管理的session,没有则创建一个新的session
String getMethod(); 返回此次请求service所调用的方法,doGet,或doPost方法
六、servletResponse接口和HttpServletResponse接口
1.servletResponse接口用来封装响应接口
常用方法 说明
PrintWriter getWriter(); 返回PrintWriter对象,用于向客户端发送文本
String getCharacterEncoding(); 获取编码类型
String setCharacterEncoding(); 设置编码类型
void setContentType(String type); 设置发送到客户端的响应的内容类型
2.httpServletResponse接口常用方法
常用方法 说明
void addCookie(Cookie cookie); 设置一个cookie到响应中,这个方法可多次调用设置多个cookie
void addHeader(String name,String value); 将一个名字为name的值为value的响应报头添加到响应中
void sendRedirect(String location); 重定向
void encodURL(string url); 使用sessionId对重定向的url进行编码,