Servlet基础知识-01

1. HTTP协议

http:	区别客户端
特点:
	1.简单快捷
	2.灵活
	3.无连接
	4.无状态

URL(重点):	统一资源定位符
	例如:http://www.baidu.com:8080/index.html?s=java
	
	http:	协议,例如 https ftp jdbc file 
	www.baidu.com	域名,或者写ip地址
	:8080	端口号
	index.html	文件
	?s=java		参数

2. Servlet(重点)

工作机制:

1.客户端通过电脑网页发送HTTP请求到web服务器——Tomcat;

2.此时请求的servlet没有初始化,Tomcat从磁盘中加载Servlet,磁盘中存放的是Servlet架包;

3.Servlet加载成功,解析HTTP请求为request对象;

4.转发request请求到相应的servlet处理;

5.servlet处理后返回response;

6.Tomcat将response转换为HTTP响应;

7.Tomcat返回HTTP响应给客户端。
2.1 Servlet简介
server applet	Java的服务器小程序
功能:完成HTML和Java后端的交互

核心类和核心接口:

包:javax.servlet

	  javax.servlet.http

类:ServletException

	  HttpServlet

	  Cookie

	  Session

	  GenericServlet(核心)

接口:HttpServletRquest

	      HttpServletResponse

		Servlet(核心)
2.2 Servlet 初识‘
    package com.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    //注解  与URL有关  请求
    @WebServlet("/Servlet-01")
    public class Servlet01 extends HttpServlet {
        /**
         * 处理Post的请求
         * request 请求
         * response 响应
         * ServletException 抛出的异常
         * */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
    
        /**
         * 处理Get的请求
         * request 请求
         * response 响应
         * ServletException 抛出的异常
         * */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            //处理乱码
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=utf-8");
    
            //在页面显示    返回一个PrintWriter对象
            response.getWriter().append("<font color='red' size='7'>hr</font>");//append 附加
            response.getWriter().append("<font color='red' size='7'>哇哦</font>");
            response.getWriter().append("<font color='red' size='7'>哇哦</font>");
        }
    }
2.3 Servlet的核心接口和类
2.3.1 核心接口 Servlet
    public class TestServlet implements Servlet {
        //想要使用Servlet类对象  初始化当前的servlet的程序
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
    
        }
    
        //获取当前ServletConfig的对象(Servlet的配置对象)
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        //Servlet的一个服务方法,认为是doGet doPost
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
        }
    
        //几乎不用,了解
        @Override
        public String getServletInfo() {
            return null;
        }
    
        //Servlet程序销毁
        @Override
        public void destroy() {
    
        }
    }
2.4 Servlet的三种创建方式
2.4.1 第一种(自定义Servlet 实现 Servlet接口的)(以后不会用)
    package com.servlet;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import java.io.IOException;
    
    @WebServlet("/TestServlet")
    public class TestServlet implements Servlet {
        //想要使用Servlet类对象  初始化当前的servlet的程序
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("init方法...");
        }
    
        //获取当前ServletConfig的对象(Servlet的配置对象)
        @Override
        public ServletConfig getServletConfig() {
            System.out.println("getServletConfig...");
            return null;
        }
    
        //Servlet的一个服务方法,认为是doGet doPost
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("service...");
    
            //处理乱码
            servletResponse.setCharacterEncoding("UTF-8");
            servletResponse.setContentType("text/html;charset=utf-8");//设置响应的文本内容字符集
    
            servletResponse.getWriter().append("哇哦");
        }
    
        //几乎不用,了解
        @Override
        public String getServletInfo() {
            return null;
        }
    
        //Servlet程序销毁
        @Override
        public void destroy() {
            System.out.println("destroy方法...");
        }
    }
2.4.2 第二种(自定义servlet类继承GenericServlet)
    package com.servlet;
    
    import javax.servlet.GenericServlet;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebServlet;
    import java.io.IOException;
    
    @WebServlet("/TestGenericServlet")
    public class TestServlet2 extends GenericServlet {
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
            System.out.println("service...");
            servletResponse.setContentType("text/html;charset=utf-8");
            servletResponse.getWriter().append("hello");
        }
    }

2.4.3 第三种(自定义Servlet类继承HttpServlet,常用)
    package com.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/TestHttpServlet")
    public class TestServlet3 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doPost");
            resp.setContentType("text/html;charset=utf-8");
            resp.getWriter().append("哇哦");
        }
    }

总结:

为什么用HttpServlet?

1.可以减少对其他方法处理的要求,其他方法对业务影响不大;

2.可以根据HTTP请求方式对应请求的响应;

	doGet		select 查询

	doPost		insert  delete  update
2.5 Servlet两种配置方式
2.5.1 web.xml的配置,通用于所有servlet的版本

TestXMLServlet

    package com.servletxml;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class TestXMLServlet extends HttpServlet {
    
        public TestXMLServlet(){}
    
        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doPost...");
            resp.setContentType("text/html;charset=utf-8");
            resp.getWriter().append("哈哈哈");
        }
    }

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <!-- servlet的配置 -->
        <servlet>
            <display-name>TestXMLServlet</display-name>
            <!--   servlet-name 要与   servlet-mapping 中的 servlet-name 保持一致 -->
            <servlet-name>TestXMLServlet</servlet-name>
            <!--   servlet程序所对应的类     -->
            <servlet-class>com.servletxml.TestXMLServlet</servlet-class>
    
            <!--    服务器启动的时候就加载    -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>TestXMLServlet</servlet-name>
            <!--    访问路径URL    -->
            <url-pattern>/TestXmlServlet</url-pattern>
        </servlet-mapping> 
    </web-app>
2.5.2 注解的一种写法(版本必须是3.0以上)

@WebServlet(name = “TestAnnocation”,urlPatterns = {"/TestAnnocation","/Annocation1","/Annocation2"},loadOnStartup = 1)

参数:

	name   ==   servlet --> servlet-name

	urlPatterns   ==   url-pattern

	loadOnStartup   ==   load-on-startup
    package com.servletxml;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * name   ==   servlet --> servlet-name
     * urlPatterns   ==   url-pattern
     * loadOnStartup   ==   load-on-startup
     * */
    @WebServlet(name = "TestAnnocation",urlPatterns = {"/TestAnnocation","/Annocation1","/Annocation2"},loadOnStartup = 1)
    public class TestAnnocation extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("注解----doPost...");
            resp.setContentType("text/html;charset=utf-8");
            resp.getWriter().append("耶啵<br/>");
            resp.getWriter().append("赞赞<br/>");
        }
    }
2.6 Servlet的生命周期

执行流程:

阶段1:constructor,servlet对象实例化,创建出servlet实例对象,提供给Tomcat使用;

阶段2:init,使用init,初始化ServletConfig对象里的参数;

阶段3:service,当前的servlet对外提供服务;

阶段4:destroy,servlet的销毁
    package com.servletlife;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/Life.do")
    public class ServletLife extends HttpServlet {
    
        public ServletLife(){
            System.out.println("构造方法");
        }
    
        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            System.out.println("init方法...");
        }
    
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            System.out.println("service...");
    
            //没有响应,所以会报405 错误
            resp.setContentType("text/html;charset=utf-8");
            resp.getWriter().append("service");
        }
    
        @Override
        public void destroy() {
            super.destroy();
            System.out.println("destroy...");
        }
    }
2.7 获取请求参数
    package com.loginservlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/LoginServlet")
    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            //防止乱码
            req.setCharacterEncoding("utf-8");
    
            //请求参数
            String user = req.getParameter("user");
            String pwd = req.getParameter("pwd");
            System.out.println(user + "," + pwd);
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值