目录
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-class是Servlet的全类名-->
        <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");
    }










