栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

javaee之tomcat与servlet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javaee之tomcat与servlet

话不多说,直接上图:

上面其实一般都不用,但是必须了解,下面说一下,Tomcat里面项目的目录结构

这个就是会放到Tomcat里面的东西。

这里会产生一个疑问,就是,有些小伙伴说,我用IDEA创建了JAVAEE项目,但是没有在Tomcat下面webapps看到我的项目目录啊。

那么这里就来说一说:

然后我们随便打开一个项目,进入到相应的一个项目里面:

C:UsersAdministrator.IntelliJIdea2019.2systemtomcatTomcat_8_5_31_tomcat1confCatalinalocalhost

里面有一个xml 文档,看到这,是不是就想到了,之前说Tomcat项目配置的时候,我们可以在/conf/catalina/localhost配置一个xml文档,然后来解析我们的程序。

我们点开这个tomcat1_war.xml

他其实就是给我们配了一个虚拟目录,真实的项目地址在D:javatomcat1.....这个位置

 而用户访问的就是虚拟目录下面的内容:

OK,大致就是这样,那么现在出现了一个问题,IDEA每次为我创建一个javaee项目的时候,默认会在C盘创建项目配置路径,我想修改一下放到E盘 

直接去改动IDEA安装路径下面的一个配置文件

把下面内容进行改动

 

改动成我们自己设置的项目配置目录

 最后记得把之前的在c盘的.IntelliJIdea2019.2的项目目录拷贝过去,然后重启IEDA,加载原来的项目过来即可

 下面来说一下Servlet

 话不多说,直接上代码:

ServletDemo1

package web.servlet;

import javax.servlet.*;
import java.io.IOException;

public class ServletDemo1 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello Servlet");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

当我们实现了Servlet,我们必须配置web.xml核心配置文件:

 上面就是一个java程序的标准配置文件。

首先去找

当找到了上面,然后再去找

 

这个全类名

然后Tomcat就会将字节码加载到内存,然后创建其对象,调用里面的service方法

上面每次写一个java程序就去配置一个web.xml其实非常麻烦,后面我们直接用注解处理

这个是servlet3.0之后的版本

先来说一下Servlet的生命周期:

上面有五个方法:

下面再来说一下Servlet这个对象。其实是存在多个,每一个Java文件过来,都会产生一个对象,但是访同一资源的java文件,都会调用同一个Servlet对象 ,也就是说任何一个Servlet都是单例这样来设计的。

这个位置打印了一个this对象的地址 

然后我们去查看一下:

每个对象内存地址都是一样的,也就是指向同一片内存空间。 

 下面说,用注解来配置文件映射名字

 看一下@WebServlet这个注解类

里面有一个value属性,我们就可以通过value来赋值映射文件名,因为是value,所以可以省略

 Servlet是一个接口,那么系统就会帮我们做一些操作,方便我们简写程序

 如果一个普通类去实现Servlet接口,就必须把里面所有方法全部实现,所以服务器帮我们做了一件事儿,就是我把一些无关紧要的方法全部做了空实现,你只需要去继承我的类,然后复写Service方法就可以了。

比如这个类:

但是这样做还不够好,我们在开发中用的也不多,对于我们客户端表单的请求数据,我们会拿到service()方法里面进行处理,我们一般采用post或者get方法来获取数据,因此我们在service中一个大致操作就是判断表单提交方式,然后根据不同的方式来处理数据。因此在Servlet中,它又给我们提供了一个类继承GenericServlet,这个类就不用在判断数据提交的方式,而是给了我们两个方法doGet()与doPost(),然后service()方法又调用了这两个方法,所以,我们只需要重写这两个方法的一个就行。

大致看一下源代码:

 

上面基本就是这样。

直接上个源代码:

package web.request;

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("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //打印一些通过get方法获取的相关信息
        String res1= request.getMethod();
        System.out.println(res1);
        String  res2 = request.getContextPath();
        System.out.println(res2);
        String res3 = request.getServletPath();
        System.out.println(res3);
        String res4 = request.getQueryString();
        System.out.println(res4);
        String res5 = request.getRequestURI();
        System.out.println(res5);
        StringBuffer res6 = request.getRequestURL();//整个请求链接都可以拿出来
        System.out.println(res6);

        //可以获取客户主机的ip
        String ip = request.getRemoteAddr();
        System.out.println(ip);

        System.out.println("-------------");
        //下面来获取请求头的数据
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号