话不多说,直接上图:
上面其实一般都不用,但是必须了解,下面说一下,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("-------------");
//下面来获取请求头的数据
}
}



