Servlet

前言

Servlet是服务器内部的小程序,简单来说就是一个java程序,运行在Web服务器上,用于接收和响应客户端请求。可用于监听器、过滤器

Servlet生命周期

/*
* 3.0版本直接注解方式配置servlet
* 2.5版本需要在web.xml中手动配置servlet
* */
@WebServlet("/servletDemo")
public class ServletDemo extends HttpServlet {
    /*
    * Servlet生命周期:
    * 初始化init
    * 处理请求和响应service
    * 销毁destory:项目从tomcat移除或者关闭tomcat时执行
    * 注意:doGet和doPost不是生命周期中方法
    * */

    /*初始化方法
    * 一个servlet只能初始化一次init方法
    * 默认情况下,第一次访问servlet时会创建servlet实例
    * */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("servlet init");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*service方法
    * 该方法为处理请求和响应
    * 客户端每次请求都会执行该方法,doGet/doPost同
    * */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet service");
    }

    /*get方法*/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet method:get");
        //1.获取ServletConfig配置参数,很少使用
        ServletConfig config = getServletConfig();
        String name = config.getInitParameter("name");
        System.out.println("获取ServletConfig配置参数name:"+name);
        //2.获取Servlet上下文对象ServletContext 
        ServletContext context = getServletContext();
        String sex = context.getInitParameter("sex");
        System.out.println("获取Servlet上下文对象sex :"+sex );
        //3.通过ServletContext获取绝对路径
        //3.1.src下资源
        context.getRealPath("WEB-INF/classes/1.txt");
        //3.2.获取webContent下资源
        context.getRealPath("index.html ");
        //4.ServletContext域对象使用
        context.setAttrubute("att","lisi");
        String att = (String)context.getAttrubute("att");  
    }

    /*post方法*/
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet method:post");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    /*销毁方法*/
    @Override
    public void destroy() {
        System.out.println("servlet destory");
    }
}

ServletContext上下文对象

定义:在web工程中只有一个上下文对象,在任何一个servlet下,都可以获取到这个上下文对象
作用:
①配置全局参数
②获取web资源绝对路径(根据工程相对路径获取他相对于tomcat服务器的绝对路径)
③获取域对象数据

Servlet在2.5版本web项目中的配置



  ...
  
      sex
      man
  
  ...
  
  
    
    servletDemo
    
    com.test.servletDemo
    
    
    
    
      name
      zhangsan
    
  
  
  
    
    servletDemo
    
    /sd
  
  ...

解决请求/响应乱码

/*
* 解决请求乱码
* get请求中文不会发生乱码(tomcat8以上,编码默认utf-8)
* post请求参数中文需要进行编码转换
* 编码转换语句需要放在取参数前
* */
request.setCharacterEncoding("UTF-8");

/*
* 解决响应乱码
* */
response.setContentType("text/html;charset=UTF-8");

转发和重定向(跳转页面)

/*
* 转发/重定向区别:
* 转发是request中的方法, 重定向是response中的方法
* 转发在服务器端完成,重定向在客户端完成
* 转发后请求栏地址不变,重定向后地址栏发生变化
* 转发是同一次请求,重定向是多次请求
* 转发速度快,重定向速度慢
* 转发可以在请求中附带参数,重定向不能
* */
request.getRequestDispatcher("success.html).forward(request,response);
request.sendRedirect("success.html);

你可能感兴趣的:(Servlet)