• JAVAEE web项目的标准目录结构:

项目名

|-->META-INF:项目的描述目录(不用管它)

|-->WEB-INF:这下面的目录是安全目录,不能通过浏览器直接访问

|-->|-->classes:servlet/java代码编译后的class文件存储的目录

|-->|-->lib:放的是项目所需要的jar包

|-->|-->web.xml:相当于java项目中的main方法;(必须)

此目录结构最终是给tomcat看的.不管IDE或者Eclipse玩出了啥花样,目录随便放和随便管理.Eclipse会最终拼装成一个标准的目录结构给Tomcat;

servlet——2.1Javaee web项目

  • 例子:

servlet——2.1Javaee web项目

 

  • 在Eclipse内部启动Tomcat服务:

servlet——2.1Javaee web项目

servlet——2.1Javaee web项目

 

  • 创建一个html:

servlet——2.1Javaee web项目

将此html在tomcat中访问:

http://localhost:8080/01_servlet_hw/hw.html

协议://ip或者域名:端口/项目名/文件的位置(相对于webContent所在的目录)

WebContext相当于项目的根目录;如果见到文件夹就用/隔开

 

1、如果不用Eclipse会咋样:

  • 在tomcat/webapps创建一个文件夹(名字==项目名)
  • 在此目录下面创建一个html,也可以将之前的复制过来;

servlet——2.1Javaee web项目

在浏览器访问

http://localhost:8080/01_test/hw.html

协议://ip或者域名:端口/项目名/文件的位置

Webapps下面的文件夹相当于项目的根目录;

这种方式如果有修改html的时候,没有使用Eclipse简单;

如果是在ROOT目录下面的文件,项目名可以省略;

http://localhost:8080/hw.html

 

 

 2、Eclipse启动Tomcat注意点

1、不管是在外部启动tomcat和Eclipse内部启动tomcat,都只能启动一次(端口一样的时候)

servlet——2.1Javaee web项目

 

2、在Eclipse外部启动Tomcat可以访问三条腿的猫,在内部启动不能访问;为啥呢?

路径1:

D:\项目空间\上课\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

servlet——2.1Javaee web项目

此目录下面的文件夹结构和tomcat特别的像;webapps的功能被wtpwebapps替换掉了;

servlet——2.1Javaee web项目

三个目录:

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;(拷贝了一份)
  • 如果电脑特别慢,拷贝了一份失效;

 

servlet——2.1Javaee web项目

 

 3、Servlet

Tomcat是一个容器,里面放的是Servlet,Servlet是把html等前端知识与后端java知识连接起来的唯一途径;

Servlet:小应用程序:生命周期:

  1. tomcat一启动就会启动servlet;需要额外的配置
  2. 第一次访问的时候,会启动servlet;
  3. 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

servlet——2.1Javaee web项目

站在服务器这一端:

  1. Request:唯一个从客户端获取信息的途径
  2. Response:唯一一个向客户端发送信息的途径
  3. 从来都是客户端主动请求服务器端,木有听过服务器端主动推送客户端.

案例(第一个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>

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-27
  • 2021-09-20
  • 2021-05-25
  • 2021-10-17
  • 2021-09-11
  • 2021-06-10
猜你喜欢
  • 2021-12-21
  • 2021-10-23
  • 2022-01-01
  • 2021-08-08
  • 2022-01-22
  • 2021-04-29
相关资源
相似解决方案