Servlet是使用java Servlet应用程序设计接口及相关类和方法的java程序。Servlet主要用于处理客户端传来的http请求,并返回一个响应。通常说的Servlet就是指HttpServlet,能够处理的请求doGet()、doPost()和service()等方法。可以直接继承javax.servlet.http.HttpServlet。 Servlet的主要功能: 1、 创建并返回一个包含基于客户请求性质动态内容的完整HTMl页面。 2、 创建可嵌入到现有Html页面中的部分html页面。 3、 与其他服务器资源(包括数据库和基于java的应用程序)通信。 4、 用多个客户端处理链接,接受多个客户端的输入,并将结果传递到多个客户端上。 5、 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器到Applet的新连接,并将该启动客户浏览器和服务器之间的连接,可以通过定制协议来通信。 6、 将定制的处理提供给所有服务器的标准程序。 Servlet特点: 1、 高效 优势在于多个来自客户端的请求访问时,Servlet为每个请求分配一个线程,而不是进程。 2、 方便 Servlet提供大量的实用工具例程,完成表单数据、读取和设置Http头,以及处理Cookie和跟踪会话等。 3、 跨平台 编译完成后可以在不同的系统平台和应用服务器下运行。 4、 功能强大 可以直接和Web服务器交互,而普通的GGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。 5、 灵活性和可扩展性 6、 共享数据 7、 安全 由于java的安全机制,SSLCA认证。 Servlet的生命周期: 1、 客户端请求Servlet或Web服务器启动,容器环境加载一个java Servlet类。 2、 Servlet根据客户端的请求创建一个或多个Servlet对象实例。并把对象添加到Servlet链接池。 3、 Servlet调用初始化Init()方法。初始化ServletConfig对象。并项Servlet传递数据。 4、 Servlet接受HttpServletRequest和HttpServletResponse对象从Web客户端接受Http发送的请求和Servlet生成响应。 5、 Servlet并把请求和响应传递给HttpServlet.service()方法。 6、 Servlet通过HttpServletRequest获取请求数据,访问HttpSession或Cookie对象。通过HttpServletResponse对象生成Http响应数据。 7、 当Web服务器和容器关闭时会自动调用HttpServlet.destroy()方法关闭所有打开的资源,并执行一些关闭前的处理。 Servlet接口常用方法: 方法 说明 Void service(ServletRequest request,ServletResponse response) Servlet在处理客户端的请求时调用此方法。 Void destroy() 当Servlet容器移除Servlet对象是调用此方法,以释放资源 ServletConfig getServletConfig() 用于获取Servlet对象的配置信息,返回ServletConfig对象 String getServletInfo() 返回有关Servlet的信息,它是纯文本格式的字符串 HttpServlet类常用方法: 方法 说明 Void doGet(HttpServletRequest request,HttpServletResponse response) 用于处理Get类型的Http请求的处理方法 Void doPost(HttpServletRequest request,HttpServletResponse response) 用于处理Post类型的Http请求的方法 Void doPut(HttpServletRequest request,HttpServletResponse response) 用于处理Put类型的Http请求的方法 HttpServletRequest接口常用方法: 方法 说明 String getContextPath() 返回上下文路径,此路径以”/”开头 Cookie[] getCookies() 返回所有Cookie对象,返回类型为Cookie数组 String getMethod() 返回Http请求类型,如get和Post等 String getQueryString() 返回请求查询的字符串 String getRequestURL() 返回主键名到请求参数之间的部分字符串 HttpSession getSession() 返回与客户端关联的HttpSession对象 HttpServletResponse接口的常用方法: 方法 说明 Void addCookie(Cookie cookie) 向客户端发送Cookie信息 Void sendError(int sc) 发送一个错误状态码sc的错误响应到客户端 Void sendError(int sc,String msg) 发送包含错误状态码及错误信息的响应到客户端 Void sendRedirect(String location) 将客户端请求重定向到新的URL Servlet实例: 通过web.xml文件配置Servlet信息。 <!-- 注册Servlet --> <servlet> <!-- Servlet的描述信息 --> <description>描述Servlet信息</description> <!-- Servlet的名称 --> <servlet-name>MyServlet</servlet-name> <!-- Servlet的完整的类名 --> <servlet-class>com.wgh.MyServlet</servlet-class> </servlet> <!-- Servlet映射 --> <servlet-mapping> <!-- Servlet的名称 --> <servlet-name>MyServlet</servlet-name> <!-- 访问URL地址 --> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> 通过注解配置Servlet信息: @WebServlet("/MyServlet") public class MyServlet extends HttpServlet { 注意:注解跟web.xml配置信息不可以同时使用,只能二选一。 通过Form表单访问Servlet: <form action="MyServlet" method="post"> <ul> <li> <input type="text" name="username" /> </li> <li><input type="submit" value="提交"/></li> </ul> </form> Servlet处理业务逻辑: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String username=request.getParameter("username"); if("xiaoming".equals(username)){ //重定向页面 response.sendRedirect("login.jsp"); //转发页面 RequestDispatcher dispatcher=request.getRequestDispatcher("login.jsp") //执行转发 dispatcher.forward(request, response); } doGet(request, response); } 转发和重定向的区别: 转发不会失效Request中存放的信息,而且转发后的页面跟之前的页面是同意请求,不会改变URL链接路径。 重定向要失效Request中存放的信息,而且转发后是客户端项服务器端重新发送的一个请求,与之前的请求没有任何关系。且转发比较慢。 转发的方法: RequestDispatcher接口实现的。主要方法有:forward()方法用于把请求转发到服务器上的另一资源,可以是Servlet、jsp或是html。 Include()方法用于服务器上的另一个资源(Servlet、jsp、html)包含到响应中。