- JAVAEE web项目的标准目录结构:
项目名
|-->META-INF:项目的描述目录(不用管它)
|-->WEB-INF:这下面的目录是安全目录,不能通过浏览器直接访问
|-->|-->classes:servlet/java代码编译后的class文件存储的目录
|-->|-->lib:放的是项目所需要的jar包
|-->|-->web.xml:相当于java项目中的main方法;(必须)
此目录结构最终是给tomcat看的.不管IDE或者Eclipse玩出了啥花样,目录随便放和随便管理.Eclipse会最终拼装成一个标准的目录结构给Tomcat;
- 例子:
- 在Eclipse内部启动Tomcat服务:
- 创建一个html:
将此html在tomcat中访问:
|
协议://ip或者域名:端口/项目名/文件的位置(相对于webContent所在的目录) |
|
WebContext相当于项目的根目录;如果见到文件夹就用/隔开 |
1、如果不用Eclipse会咋样:
- 在tomcat/webapps创建一个文件夹(名字==项目名)
- 在此目录下面创建一个html,也可以将之前的复制过来;
在浏览器访问
|
协议://ip或者域名:端口/项目名/文件的位置 |
|
Webapps下面的文件夹相当于项目的根目录; |
这种方式如果有修改html的时候,没有使用Eclipse简单;
如果是在ROOT目录下面的文件,项目名可以省略;
2、Eclipse启动Tomcat注意点
1、不管是在外部启动tomcat和Eclipse内部启动tomcat,都只能启动一次(端口一样的时候)
2、在Eclipse外部启动Tomcat可以访问三条腿的猫,在内部启动不能访问;为啥呢?
路径1:
|
D:\项目空间\上课\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 |
此目录下面的文件夹结构和tomcat特别的像;webapps的功能被wtpwebapps替换掉了;
三个目录:
|
1 |
Eclipse使用的tomcat目录 |
D:\项目空间\上课\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 |
|
2 |
代码存储的目录 |
D:\班级\20171108\20171225_servlet\代码 |
|
3 |
tomcat外部的目录 |
C:\Java\apache-tomcat\ |
- 最开始的时候,是先有目录3,启动Eclipse以后,通过目录3配置了目录2;创建一个项目的时候,选择了目录3,Eclipse会将tomcat从目录3中拷贝到了目录2中(拷贝了一份);
- 一直将代码存储到了目录2中;当我们按下保存按钮的时候,Eclipse会自动的将代码从目录2拷贝到目录1;(拷贝了一份)
- 如果电脑特别慢,拷贝了一份失效;
3、Servlet
Tomcat是一个容器,里面放的是Servlet,Servlet是把html等前端知识与后端java知识连接起来的唯一途径;
Servlet:小应用程序:生命周期:
- tomcat一启动就会启动servlet;需要额外的配置
- 第一次访问的时候,会启动servlet;
- Servlet一旦启动,永远不会销毁;直到tomcat停止时销毁
Servlet:接口
|
destroy():销毁 init:初始化 service:服务;Servlet启动就是为了提供服务; |
HttpServlet:类
|
此类的父类是:GenericServlet,又实现了Servlet接口 service(HttpServletRequest req, HttpServletResponse resp):是提供服务的 doPost(HttpServletRequest req, HttpServletResponse resp):专门处理post请求 doGet(HttpServletRequest req, HttpServletResponse resp):专门处理get请求 |
HttpServletRequest:请求
|
此接口的父接口就是servletrequest |
HttpServletResponse:响应
|
此接口的父接口就是servletresponse |
HttpSession:会话
参照:javaee_api.chm;(手册),javase_api,java_eeapi
站在服务器这一端:
- Request:唯一个从客户端获取信息的途径
- Response:唯一一个向客户端发送信息的途径
- 从来都是客户端主动请求服务器端,木有听过服务器端主动推送客户端.
案例(第一个Servlet):
- 创建了一个Servlet类
|
package com.carlinfo.servlet.demo;
import java.io.IOException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
/** * 第一个Servlet * * 一个类:做以下几件事情: * * ~hw * ~有木有父类和接口 * ~定义属性和方法 * ~实现属性和方法 * ~测试这些属性和方法;new对象,或者被static修饰,直接写类名.属性,类名 .方法() * * 写的是一个普通的类,如何让它成为一个Servlet呢? * 常见的有三个方法 * * ~问题: * 这里面没有main方法?如何启动(需要在web.xml中配置),谁来调用(tomcat来调用) * * @author wangshMac */ public class Hw_01 extends HttpServlet { @Override public void init() throws ServletException { System.out.println("==hw_01初始化了=="); }
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.service(req, resp); System.out.println("==Service开始干活了=="); }
@Override public void destroy() { System.out.println("==hw_01销毁了=="); } } |
- 配置web.xml
|
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>01_servlet_hw</display-name>
<!-- 打开一个XML文件,先格式化 --> <!-- 一个Servlet配置开始 servlet标签和servlet-mapping标签,是通过servlet-name关联起来;servlet-name得一致
servlet-class:开发的Servlet所处的位置(包名+名类);一看到包名+类名; 对象创建有两种方式: 一种是new了一个对象;new 后面跟的是:构造方法 一种反射;Class.forName(包名+类名).newInstance(); --> <servlet> <servlet-name>Hw_01</servlet-name> <servlet-class>com.carlinfo.servlet.demo.Hw_01</servlet-class> <!-- 一旦写了此配置,tomcat一启动就要初始化Servlet 数字指的是:如果有多个Servlet,都要在tomcat启动的时候初始化, 按照数字的大小:从小到大,一一的初始化 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Hw_01</servlet-name> <!-- url-pattern:在浏览器地址栏输入的内容,tomcat会调用我们的service方法 --> <url-pattern>/Hw_01</url-pattern> </servlet-mapping> <!-- 一个Servlet配置结束 -->
<!-- 欢迎文件列表页面 http://192.168.1.2:8080/01_servlet_hw(项目名后面啥也木有写) tomcat会按照welcomefilelist中指定的页面,一个一个的找,如果找到就访问. 找不到就报:404错误(页面未找到)
不配置也可以,但是文件名必须叫做index.html; 如果不是下面列出的文件,需要手工指定; (这下面的文件,写不写都行)
如果想指定一个文件,不在下面的文件中,需要指定 --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> |
- 需要启动浏览器来访问:
协议://ip(域名):端口/项目名/web.xml中servlet对应的url-pattern