saltfish666 / fileCloud

0 stars 0 forks source link

Tomcat 配置 #1

Open saltfish666 opened 6 years ago

saltfish666 commented 6 years ago

工作原理

google https://juejin.im/post/58eb5fdda0bb9f00692a78fc

saltfish666 commented 6 years ago

目录结构

$ pwd
/usr/local/apache-tomcat-8.5.29

$ tree -L 1
.
├── LICENSE
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── bin
├── conf
├── lib
├── logs
├── saltfish
├── temp
├── webapps
└── work

bin文件夹

存放一些系统脚本

$ /Library/Tomcat/bin/startup.sh  (启动tomcat)
$ /Library/Tomcat/bin/shutdown.sh (关闭tomcat)
saltfish666 commented 6 years ago

conf文件夹

server.xml

HTTP端口

Tomcat 在启动的第三阶段会解析 server.xml文件

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> 

字段决定Tomcat 使用哪个端口接受HTTP请求。

-- 测试 -- 将8080 修改为8088 ,重启。 发现Tomcat监听了http://localhost:8088

shoudown 端口

<Server port="8005" shutdown="SHUTDOWN"> Tomcat 监听8005端口开接受shotdown命令

web目录

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

appBase的值就是web访问的目录/容器.

-- 测试 -- 使appBase="saltfish",在Tomcat根目录下复制webapps文件夹并改名为saltfish,修改saltfish/ROOT/index.jsp,重启Tomcat。果然看到新的内容

web.xml

结尾处有:

<welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

决定默认访问文件,访问某一目录时依次尝试访问。

saltfish666 commented 6 years ago

webapps 文件夹

系统默认提供web服务的文件夹 可在conf/server.xml 中修改

ROOT默认根目录

浏览器访问 http://localhost:8080/ 时,由 conf/server.xml 得知应当连接到 webapps 文件夹, 设计者为了保持webapps的简洁,会将其连接到ROOT文件夹,并根据 conf/web.xml<welcome-file-list> 依次尝试寻找文件。

-- 测试-- 在ROOT下添加index.html,发现index.jsp被覆盖了;在web.xml上调整顺序,发现jsp有覆盖回来了。。

一般APP目录

(发现这里和Django的APP都是指一个顶级子目录)

WEB-INF

每一个APP目录下都要有 WEB-INF 目录 用于存放配置信息

WEB-INF/web.xml

    <servlet>
        <servlet-name>libai</servlet-name>
         <servlet-class>Saltfish</servlet-class>
        <!-- <servlet-class>SessionExample</servlet-class> -->
    </servlet>
    <servlet-mapping>
        <servlet-name>libai</servlet-name>
        <url-pattern>/lishuai</url-pattern>
    </servlet-mapping>

用于将URL映射到相应文件(servlrt) 如果url不存在,就会尝试寻找静态资源。 但是只会查找.html .css .jpg

--测试--

\<url-pattern> 根目录下文件名 访问结果
/lishuai lishuai 1
null lishuai.html 2
/lishuai.html lishuai.html 1
null lishuai.h 无法访问

可见,默认情况下,当用户访问一个url后,Tomcat 优先尝试根据web.xml寻找对应servlet,再尝试寻找一般的静态资源,不允许访问特殊文件后缀。

saltfish666 commented 6 years ago

WEB-INF/classes

当前app的servlet容器。

-- 测试 -- 编写

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Enumeration;
import java.util.ResourceBundle;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import util.HTMLFilter;

public class Saltfish extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private static final ResourceBundle RB = ResourceBundle.getBundle("LocalStrings");

    @Override
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");

        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html><html>");
        out.println("<head>");
        out.println("<meta charset=\"UTF-8\" />");
        String title = RB.getString("sessions.title");
        out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");
        out.println("<h1>hi</h1>");
        out.println("</body>");
        out.println("</html>");
    }

    @Override
    public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        doGet(request, response);
    }
}

通过javac -sourcepath /usr/local/apache-tomcat-8.5.29/webapps/examples/WEB-INF/classes:. -cp /usr/local/apache-tomcat-8.5.29/lib/servlet-api.jar Saltfish.java 编译成.class文件放置在classes中 并在web.xml 配置 url-pattern 就可以看到页面了。 -cp 指明以来的servlet包, -sourcepath指明依赖的util.HTMLFilter文件

saltfish666 commented 6 years ago

参考资料 http://www.blogjava.net/gdws/articles/263153.html

Tomcat目录结构

saltfish666 commented 6 years ago

Image of Yaktocat

这算是所谓的约定吧,痛恨。。。