• Tomcat & Servlet


    javaWeb

    javaWeb是指使用java技术实现所有web程序的技术的总称。我们称之为javaWeb。

    1、请求和响应(成对出现)

    2、Web资源的分类

    web资源分为两大类,分别是静态资源和动态资源。

    静态资源指的是:html,Js,CSS,img图片,视频文件,txt文件等等。都是静态资源。

    动态资源指的是:Servlet程序,jsp动态页面。

    手动编写servlet实现

    • 实现servlet接口(javax.servlet.Servlet)

    • 重写service方法(service方法每次请求都会调用一次)
    • 在WebContent/WEB-INF/web.xml中配置servlet的访问路径 。浏览器访问servlet的路径

               web.xml(新建web工程的时候,eclipse自动创建出来的)的位置:

    • 把项目部署到tomcat中,去启动tomcat。在地址栏中输入信息,访问servlet

    <servlet>元素是配置Servlet所用的元素。

    <servlet-mapping>元素在Servlet和URL样式之间定义一个映射,即servlet类提供一个url,在地址栏输入对应的映射路径就可以访问你的servlet。

    <servlet> 
    <!-- 给Servlet 配置一个名字 -->
    <servlet-name>Hello</servlet-name> 
    <!-- servlet的全类名 -->
    <servlet-class>com.lmx.servlet.Hello</servlet-class>
    </servlet>
    <!-- mapping映射设置 -->
    <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <!--url-pattern(访问路径) 是给 servlet 程序配置一个访问地址 
    /hello 表示 http://ip地址:端口号/工程名/配置的地址 
    实际地址:http://127.0.0.1:8080/day06/hello -->
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    修改web.xml后必须重启服务器才会生效

    Servlet的生命周期

    1)构造 servlet,然后使用 init 方法将其初始化。

    2)处理来自客户端的对 service 方法的所有调用。

    3)从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。

    HTTP中Get与Post的区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

     Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!

    模拟Get请求和Post请求的分发

    
    
    public void service(ServletRequest req, ServletResponse res)
                throws ServletException, IOException {
    
            // 将servletRequest对象强转成为 HttpServletRequest对象
            HttpServletRequest httpRequest =  (HttpServletRequest) req;
            // 获取请求的方式
            String method = httpRequest.getMethod();
            // get请求获取到"GET" ,post请求获取到"POST"字符串
            System.out.println("请求的方式:" + method);
            // 根据请求的方式 执行不同的方法去做不同的处理
            if ("GET".equals(method)) {
                doGet();
            } else if ("POST".equals(method)) {
                doPost();
            }
        }
    
        public void doPost() {
            System.out.println("这是POST请求的处理方法");
        }
        
        public void doGet() {
            System.out.println("这是GET请求的处理方法");
        }
    
    
    
    
    

    继承HttpServlet类实现我们自己的Servlet程序

    1)首先创建一个Class,去继承HttpServlet类

    2)重写httpServlet 中的 doGet方法和doPost方法实现具体的业务逻辑操作

    3)需要在web.xml文件中配置Servlet的请求地址。

    ps:tomcat关联源码下载的包如下图所示。

     为什么我们继承HttpServlet,就可以实现了Servlet程序呢?

    因为HttpServlet继承了GenericServlet,而在GenericServlet类中它又实现了Servlet接口。

    所以我们在实现开发中,只需要继承HttpServlet类,并且根据你自己的业务需要重写doGet()请求和doPost()请求即可

    通过Eclipse自动新建一个Servlet程序

     Servlet类的继承体系

    ServletConfig类

      ServletConfig表示Servlet在web.xml文件中配置的配置信息。

    a) ServletConfig类的三大作用

     

    1.获取Servlet在web.xml文件中配置的Servlet名称(也就是servlet-name的值<servlet-name>ConfigServlet</servlet-name>)。

    2.获取Servlet初始化信息。(web.xml文件中<Servlet>标签中 <init-param>的初始化信息 )

    3.获取ServletContext域对象

    由文档可知configuration 是在初始化中获取信息。由Tomcat创建,并传入

    A servlet configuration object used by a servlet container to pass information to a servlet during initialization.

    所以init()方法必须勾选上

     ServletContext

    什么是ServletContext

     

    第一:ServletContext是一个接口。

    第二:ServletContext是一个域对象!

    第三:每个Web工程,都对应一个ServletContext对象!

    ServletContext有什么作用?

     

    第一:ServletContext可以获取web.xml文件中的配置上下文参数 -----------<context-param>:它可以配置整个web工程的上下文参数

    第二:ServletContext可以获取web工程在服务器的工程名

    第三:ServletContext可以获取web工程中文件夹或文件在服务器硬盘上的绝对路径

    第四:ServletContext可以设置、获取web工程的全局属性

    protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            // 获取ServletConfig对象
            ServletConfig config = getServletConfig();
    
            // 获取Servlet的上下文对象
            ServletContext context = config.getServletContext();
    
            // 获取web.xml文件中配置的参数的值
            // 正确。ServletContext只能获取context-param配置的参数
            String passwordValue = context.getInitParameter("password");
            System.out.println("获取context-param参数:" + passwordValue);
    
            // ServletContext无法获取Servlet中配置的init-param参数
            String usernameValue = context.getInitParameter("username");
            System.out.println("获取servlet配置的init-param参数:" + usernameValue);
        }

    在eclipse中创建一个Web项目的时候,虽然有web.xml生成,但是再添加Servlet类文件的时候总是看不见web.xml的更新,所以异常的郁闷!上网查了查,原来我们在创建Web项目的时候,会弹出一个对话框,“Dynamic web module version”这个选项默认成了3.0,按照老规范,应该是在eclipse的WebContent  WEB-INF  目录下创建web.xml的。而新规范是可以不用web.xml的,如tomcat 7.0就支持新规范,这样相关的servlet配置会以注解的形式直接写到代码里面了,比如@WebServlet。 当然如果你用老的项目导入,可以选择Dynamic web module version这个选项设成2.5,这样web.xml就会自动更新了。

    1.接口作为参数和返回值,都是同样的作用,所有继承了这个接口的类,都可以使用。也就是说,你给这个方法传参数的时候,可以把继承了这个接口的类的实例传给这个方法,同样的道理,你可以把继承了这个接口的类返回。

    2.接口做为参数传递,传递的是实现了接口的对象; 
    接口作为类型返回,返回的是实现了接口的对象。

    Servlet小结

  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/6947590.html
Copyright © 2020-2023  润新知