Servlet

作者: 菜鸟要逆袭 | 来源:发表于2021-11-07 18:14 被阅读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);
    

    相关文章

      网友评论

          本文标题:Servlet

          本文链接:https://www.haomeiwen.com/subject/infszltx.html