JavaWeb——Servlet学习总结

Servlet是Java Web应用的基本技术,也是JSP实现的基础,JSP页面最后是通过转换为Servlet形式来实现功能的。
Servlet和其他的Java程序一样编写、编译,他的特点在于,Servlet必须继承servlet类或它的子类,通常是继承HttpServlet这个类。

HttpServlet中的方法:
doGet()/doPost()方法:通过覆盖HttpServlet类中的doGet()方法,可以处理浏览器端发送过来的GET请求。覆盖HttpServlet类中的doPost()方法可以处理浏览器端发送过来的POST请求。这两个方法中都有两个参数:HttpServletRequest和HttpServletResponse,他们分别代表客户端的请求和向客户端的响应

init()方法:
在创建Servlet实列的时候,HttpServlet中的init()方法会被调用,如果需要对这个servlet做一些初始化的华,可以将初始化代码放在这个方法中。这个方法只会被调用一次,不会对于每次的请求都调用它

service()方法:
如果客户端有一个对servlet的请求发送过来,那么,服务器会产生一个新的线程,并且让他调用Servlet的service()方法。service()方法会根据收到的客户端的请求类型,决定调用doGet()还是doPost()甚至其他的do..()方法

destroy()方法:
如需撤除某个Servlet示例,调用,可以在这个方法中执行一些清理的动作

Servlet的生命周期:Servlet对象从创建到销毁的过程。
Servlet何时被创建又是何时被销毁的?
Servlet中有init,service,destroy方法,这几个方法称为是Servlet生命周期相关的方法。
Servlet是在第一次被访问的时候会被实例化,只要Servlet一被实例化那么Servlet中的init方法就会执行(init只会执行一次)。任何一次从客户端发送来的请求,那么Servlet中的service方法就会执行(在service方法的内部根据请求的方式不同调用不同doXXX方法)。当Servlet从服务器中移除或者服务器关闭的时候Servlet对象被销毁,里面的destroy方法就会执行,然后垃圾回收就会将其回收掉。

package com.csmy.servlet;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class sheong
 */
@WebServlet("/sheong")
public class sheong extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public sheong() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        // TODO Auto-generated method stub
    }

    /**
     * @see Servlet#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
     */
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

为什么使用启动时加载
Servlet对象是第一次被访问的时候会被创建的,init方法就会执行。假设在init方法中做了一些比较耗时的操作(比如:加载了一些配置文件并且解析可能需要花费3秒钟)。第一个用户第一次访问这个Servlet的时候,需要等待3秒钟。如何使第一个用户在第一次访问的时候不需要花费这么长时间?
什么是启动时加载
Servlet默认是在第一次访问的时候创建的对象,现在通过一个配置将Servlet的实例化的过程放在服务器启动的时候(让服务器启动的时候创建Servlet的对象)。如果现在这样做那么之前花费的时间就会在服务器启动的时候一起花费掉了。对于用户来讲就不需要额外花费这个时间。


    servletdemo1
    com.csmy.servlet.ServletDemo1
  
  
  2
  
  
    servletdemo1
    /ServletDemo1
  

在Servlet中读取客户端发送的数据:

用户登录

用户名:
密码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        reponse.setContentType("text/html;charset=UTF-8");
                request.setCharacterEncoding("UTF-8")
              String username = request.getParameter("username")
String password = request.getParameter("password")
PrintWriter out = response.getwriter();
out.println("登陆"+username+"密码"+password)
    }

在Servlet中跳转到其他的页面

reponse.sendRedirect("login.jsp")//全路径
request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);

你可能感兴趣的:(JavaWeb——Servlet学习总结)