zoukankan      html  css  js  c++  java
  • 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小结

  • 相关阅读:
    驰骋工作流引擎2016年第1次组团培训日程
    CCBPM中流程回滚的介绍
    CCBPM流程变更处理解决方案与对策
    CCBPM多表单流程中关于绑定表单的设计步骤
    CCBPM关于工作流引擎取回审批的设计方案与实现过程
    线程池 -实现线程复用
    线程安全 -同步锁机制
    匿名内部类创建线程,简化线程创建代码
    Thread -线程的两种创建方式
    Throwable -抛出异常类与自定义异常类
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/6947590.html
Copyright © 2011-2022 走看看