0
点赞
收藏
分享

微信扫一扫

Servlet总结

楚木巽 2022-01-30 阅读 67

目录

Servlet技术

1)什么是Servlet

  • Servlet是javaEE规范之一。规范就是接口
  • Servlet是JAVAWEB三大组件之一。(Servlet程序,Fititer过滤器,Listenter监听器)
  • Servlet是运行在服务器上的一个java小程序,它可以接收客服端的请求,获取响应请求

2)实现第一个Servlert程序

  • 编写一个类去实现Servlet接口(一般来使用HttpServlet来实现)
  • 实现Service方法,处理请求,并响应数据
  • 到web.xml中配置servlet程序的访问路径
 <!--Servlet标签给tomcat配置Servlet程序 -->
    <servlet>
        <!--Servlet-name标签Servlet程序起一个别名(一般是类名) -->
        <servlet-name>qsh_servlet</servlet-name>
        <!-- servlet-classServlet的全类名-->
        <servlet-class>com.qsh_Servlet</servlet-class>
    </servlet>

    <!--servlet-mappting标签给servlet程序配置访问路径-->
    <servlet-mapping>
        <!--servlet-name标签的作用是告诉服务器,当前配置的地址给那个Servlet使用-->
        <servlet-name>qsh_servlet</servlet-name>
        <!--url-pattern
        /代表这服务器解析的时候,表示地址:http://ip:port/工程路径
        /hello代表 http://ip:port/工程路径/hello
        -->
        <url-pattern>/qsh</url-pattern>
    </servlet-mapping>

3)生命周期

  • 执行Servlet构造器方法
  • 执行init初始化方法
  • 执行service方法
  • 知悉destroy销毁方法

serveletconfig类(配置信息类)

1)三大作用

  • 可以获取Servlet程序的别名servlet-name的值
  • 获取初始化参数init-param
<init-param>
       <param-name>name</param-name>
       <param-value>覃圣航asjdlk</param-value>
 </init-param>
  • 获取ServletContext
    2)解析serveletconfig类
  • serveltConfig是servlet程序的配置信息类
  • servlet程序默认是第一次访问的时候创建,servletconfig是每个servlet程序创建时,就创建一个对应的servlet对象
  • 我们除开在init类中使用servletconfig对象外,还可以在doget或者dopost使用
 ServletConfig servletConfig = getServletConfig();

3)ServletContext是什么

  • 它是一个接口,它表示Servlet上下文对象
  • 一个web工程,只有一个servleContexxt对象实例
  • servletContext对象是一个域对象,他在部署的时候创建,停止服务器的时候销毁。
    在这里插入图片描述
    作用:
  • 获取web.xml中配置上下文参顺context-param
    <!--context-param是上下文参数(它属于整个web项目) -->
    <context-param>
        <param-name>user</param-name>
        <param-value>root</param-value>
    </context-param>
        System.out.println("这个Context的配置对象是:"+servletContext.getInitParameter("user"));

  • 获取当前工程路径,格式/工程路径
        System.out.println("当前工程的路径"+servletContext.getContextPath());
  • 获取工程部署后在服务器硬盘的绝对路径
/**
         * 输入/是因为,/代表这http:ip:port/工程名/
         */
        System.out.println("当前磁盘路径"+servletContext.getRealPath("/"));
  • 想map一样存取数据(他的作用范围是整个web工程)
getServletContext().setAttribute("name","覃圣航");
        System.out.println(getServletContext().getAttribute("name"));

HTTP协议

1)get请求和post请求
在这里插入图片描述
在这里插入图片描述
2)响应状态码
在这里插入图片描述

HTTPServletRequest类

1)HttpServletRequest类的作用是什么
每次只要有请求进入TOmcat服务器,Tomcat服务器就会把请求过来的HTTP协议幸喜分析封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。
2)常用参数
在这里插入图片描述
Request解决中文乱码问题:/** * 解析中文字符为"UTF-8" * 这个方法要在请求参数调用前设置才会有效果 */ request.setCharacterEncoding("UTF-8");
3)请求转发
关键词:request.getRequestDispatcher("/Servlet02")、 requestDispatcher.forward(request,response);
什么是请求转发?
请求转发是指,服务器收到请求后,从一个资源跳转到另一个资源。
在这里插入图片描述
Servlet01

//获取办事材料(获取请求的参数)
        String username = request.getParameter("username");
        System.out.println("这是柜台一的材料"+username);
        //处理完事务,加盖一个印章传到你要转发到的Servlet
        request.setAttribute("key","柜台一的章");
        /**
         * 请求转发的路径
         * 请求必须要以斜杠打头,/代表这:http://ip:port/工程名/,映射到IDEA代码的web项目
         */
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Servlet02");
        //走到你要取的路径requesDispater
        requestDispatcher.forward(request,response);
    

Servlet02

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     //查看传过来的办公材料(获取请求的参数)
        String username = request.getParameter("username");
        System.out.println("在Servlet2(柜台2)中查看参数(材料)"+username);
     //查看柜台一是否有盖章
        Object key = request.getAttribute("key");
        System.out.println("柜台一的章"+key);
     //处理自己的业务
        System.out.println("Servlet2处理自己的业务");


4)base标签的作用
base标签可以设置当前页面中所有相对路径工作时候,参数路径按照那个经行跳转

avascript
<head>
    <title>Title</title>
    <base href="http://localhost:8080/a/b/text.html">
</head>
<body>
这是a/b的页面
<a href="../../../text00.html">跳转页面</a>
</body>
</html

HttpServletResponse类

1)response作用
HttpSservletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递Servlet程序去使用。HttpServletReuest表示请求过来的信息,HttpServletResponse表示所有响应的信息,
我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置
2)如何向客户端上传递数据
用流的方式:字符流、字节流

PrintWriter writer = resp.getWriter();
        writer.write("覃圣航");

3)response解决中文乱码问题

  //设置服务器的字符集为(UTF-8)
        resp.setCharacterEncoding("UTF-8");
        //设置浏览器的字符集(utf-8)
        resp.setHeader("Content-Type","text/html;charset-UTF-8");

方法二:

 /**
         * 缺点:必须在获取响应流前使用这个方法
         * 优点:可以同时设置客户端和服务器的字符集
         */
        resp.setContentType("text/html;charset-UTF-8");

4)请求重定向
在这里插入图片描述
response1

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应状态码
        resp.setStatus(302);
        //设置响应头
        resp.setHeader("Location","/reponse2");
    }

response2

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Content-Type","text/html;charset-UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().write("这是reponse2");
    }

方法二、


    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("/reponse2");
    }
举报

相关推荐

0 条评论