Servlet的使用

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)包含到响应中。
原文地址:https://www.cnblogs.com/gynbk/p/6556301.html