Servlet

2021-11-07  本文已影响0人  菜鸟要逆袭

前言

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项目中的配置

<!-- servlet加载过程:
  1.找到tomcat应用
  2.找到项目
  3.找到web.xml
  4.通过url-pattern找到servlet-mapping
  5.通过servlet-mapping找到servlet-name
  6.通过servlet-name找到servlet-class
  7.通过servlet-class找到servlet类进行加载
 -->
<web-app>
  ...
  <context-param>
      <param-name>sex</param-name>
      <param-value>man</param-value>
  </context-param>
  ...
  <!-- 配置servlet信息 -->
  <servlet>
    <!-- servlet名称 -->
    <servlet-name>servletDemo</servlet-name>
    <!-- servlet完整类名 -->
    <servlet-class>com.test.servletDemo</servlet-class>
    <!-- 使servlet随着服务器启动而创建实例,数字不得为负数,建议>2 -->
    <!-- <load-on-startup>2</load-on-startup> -->
    <!-- servlet配置参数,可以使用ServletConfig对象获取,很少使用  -->
    <init-param>
      <param-name>name</param-name>
      <param-value>zhangsan</param-value>
    </servlet-class>
  </servlet>
  <!-- 配置servlet映射信息 -->
  <servlet-mapping>
    <!-- servlet名称,必须与servlet标签中servlet-name值相同 -->
    <servlet-name>servletDemo</servlet-name>
    <!-- 访问servlet的路径设置 -->
    <url-pattern>/sd</url-pattern>
  </servlet-mapping>
  ...
</web-app>

解决请求/响应乱码

/*
* 解决请求乱码
* 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);
上一篇下一篇

猜你喜欢

热点阅读