Web应用配置(web.xml配置、Tomcat管理配置以及JVM内存调优)

web.xml 是web应用的描述文件, 它支持的元素及属性来自于Servlet 规范定义 。 在Tomcat 中, Web 应用的描述信息包括** tomcat/conf/web.xml **中默认配置 以及 Web应用** WEB-INF/web.xml **下的定制配置。

ServletContext初始化参数

我们可以通过 添加ServletContext 初始化参数,它配置了一个键值对,这样我们可以在应用程序中使用 **javax.servlet.ServletContext.getInitParameter()**方法获取参数。

    <!--设置初始化参数-->
    <context-param>
        <param-name>my_init_param</param-name>
        <param-value>我是刘邦</param-value>
    </context-param>

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(this.getClass().getName() + "\tSERVICE ------------->>>>>>");
        String my_init_param = req.getServletContext().getInitParameter("my_init_param");
        System.out.println(my_init_param);
    }

Session会话配置

用于配置Web应用会话,包括 超时时间、Cookie配置以及会话追踪模式。它将覆盖server.xml 和 context.xml 中的配置

	<!--会话配置-->
    <session-config>
		<!--单位是分-->
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JSESSIONID</name>
            <domain>www.baidu.com</domain>
            <path>/</path>
            <comment>Session Config</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>

   @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(this.getClass().getName() + "\tSERVICE ------------->>>>>>");
		//JSESSIONID就是SESSION的ID
        String id = req.getSession().getId();
        System.out.println(id);
    }

配置解析:

  • **session‐timeout **: 会话超时时间,单位 分钟

  • cookie‐config: 用于配置会话追踪Cookie

    • name:Cookie的名称

    • domain:Cookie的域名

    • path:Cookie的路径

    • comment:注释

    • http‐only:cookie只能通过HTTP方式进行访问,JS无法读取或修改,此项可以增加网站访问的安全性。

    • secure:此cookie只能通过HTTPS连接传递到服务器,而HTTP 连接则不会传递该信息。注意是从浏览器传递到服务器,服务器端的Cookie对象不受此项影响。

    • max‐age:以秒为单位表示cookie的生存期,默认为‐1表示是会话Cookie,浏览器关闭时就会消失。

  • **tracking‐mode **:用于配置会话追踪模式,Servlet3.0版本中支持的追踪模式:COOKIE、URL、SSL

    • **COOKIE **: 通过HTTP Cookie 追踪会话是最常用的会话追踪机制, 而且Servlet规范也要求所有的Servlet规范都需要支持Cookie追踪。

    • **URL **: URL重写是最基本的会话追踪机制。当客户端不支持Cookie时,可以采用URL重写的方式。当采用URL追踪模式时,请求路径需要包含会话标识信息,Servlet容器会根据路径中的会话标识设置请求的会话信息。如:**http://www.myserver.com/user/index.html;jessionid=1234567890**

    • **SSL **: 对于SSL请求, 通过SSL会话标识确定请求会话标识。

Servlet配置

Servlet 的配置主要是两部分, servlet 和 servlet-mapping :

    <!--配置servlet访问-->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.edu.controller.HelloServlet</servlet-class>
        <init-param>
            <param-name>servletName</param-name>
            <param-value>牛逼的Servlet</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <enabled>true</enabled>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(this.getClass().getName() + "\tSERVICE ------------->>>>>>");
        String servletName = getInitParameter("servletName");
        System.out.println(servletName);
    }
	
	//配置了load‐on‐startup=1时,则Tomcat启动时初始化加载,否则第一次请求时才初始化加载
    @Override
    public void init() throws ServletException {
        System.out.println(this.getClass().getName()+"\t init()");
    }

配置说明:

  1. servlet‐name : 指定servlet的名称, 该属性在web.xml中唯一。

  2. servlet‐class : 用于指定servlet类名

  3. init‐param: 用于指定servlet的初始化参数, 在应用中可以通过**HttpServlet.getInitParameter **获取。

  4. load‐on‐startup: 用于控制在Web应用启动时,Servlet的加载顺序。 值小于0,web应用启动时,不加载该servlet, 第一次访问时加载。

  5. enabled: true , false 。 若为false ,表示Servlet不处理任何请求。

  6. url‐pattern: 用于指定URL表达式,一个 servlet‐mapping可以同时配置多个 url‐pattern。

Servlet文件上传配置

    <!--Servlet文件上传配置-->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.edu.controller.HelloServlet</servlet-class>
        <multipart-config>
            <location>C:\temp</location>
            <max-file-size>10240</max-file-size>
            <max-request-size>10240</max-request-size>
            <file-size-threshold>0</file-size-threshold>
        </multipart-config>
    </servlet>

  1. location:存放生成的文件地址。

  2. max‐file‐size:允许上传的文件最大值。 默认值为‐1, 表示没有限制。

  3. max‐request‐size:针对该 multi/form‐data 请求的最大数量,默认值为‐1, 表示无限制。

  4. file‐size‐threshold:当数量量大于该值时, 内容会被写入文件。

Listener配置

Listener用于监听servlet中的事件,例如context、request、session对象的创建、修改、删除,并触发响应事件。Listener是观察者模式的实现,在servlet中主要用于对context、request、session对象的生命周期进行监控。在servlet2.5规范中共定义了8中Listener。在启动时,ServletContextListener 的执行顺序与web.xml 中的配置顺序一致, 停止时执行顺序相反。

    <!--监听器配置-->
    <listener>
        <listener-class>com.edu.controller.HelloServlet</listener-class>
    </listener>

Filter配置

filter 用于配置web应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加密、数据转换等操作, 配置如下:

    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>com.edu.controller.HelloServlet</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>myFilterParam</param-name>
            <param-value>123</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>myFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

配置说明:

  1. filter‐name: 用于指定过滤器名称,在web.xml中,过滤器名称必须唯一。

  2. **filter‐class **: 过滤器的全限定类名, 该类必须实现Filter接口。

  3. async‐supported: 该过滤器是否支持异步

  4. **init‐param **:用于配置Filter的初始化参数, 可以配置多个, 可以通过FilterConfig.getInitParameter获取

  5. url‐pattern: 指定该过滤器需要拦截的URL。

欢迎页面配置

welcome-file-list 用于指定web应用的欢迎文件列表。

<!--欢迎页-->
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>welcome.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
</welcome-file-list>

尝试请求的顺序,从上到下。

错误页面配置

error-page 用于配置Web应用访问异常时定向到的页面,支持HTTP响应码和异常类两种形式。

<!--错误页面配置-->
<error-page>
    <error-code>404</error-code>
    <location>/index.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
</error-page>
<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/index.jsp</location>
</error-page>

Tomcat管理配置

从早期的Tomcat版本开始,就提供了Web版的管理控制台,他们是两个独立的Web应用,位于webapps目录下。Tomcat 提供的管理应用有用于管理的Host的host-manager和用于管理Web应用的manager。

host-manager

Tomcat启动之后,可以通过** http://localhost:8080/host-manager/html **访问该Web应用。

host-manager 默认添加了访问权限控制,当打开网址时,需要输入用户名和密码(**conf/tomcat-users.xm**l中配置) 。所以要想访问该页面,需要在**conf/tomcatusers.xml **中配置,并分配对应的角色:

  1. admin-gui:用于控制页面访问权限

  2. admin-script:用于控制以简单文本的形式进行访问

配置如下:


<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="admin123" roles="admin-gui,admin-script"/>
<user username="both" password="admin123" roles="admin-gui,admin-script"/>
<user username="role1" password="admin123" roles="admin-gui,admin-script"/>

登录:

界面

在这里插入图片描述

manager

配置如下:

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<!-- 这个是manager app的权限 -->
<role rolename="manager-script"/>
<!-- 这个是manager app的权限 -->
<user username="tomcat" password="admin123" roles="admin-gui,admin-script,manager-gui,manager-script"/>
<user username="both" password="admin123" roles="admin-gui,admin-script"/>
<user username="role1" password="admin123" roles="admin-gui,admin-script,manager-gui"/>

配置说明:

  • manager-gui:允许访问HTML GUI和状态页

  • manager-script:允许访问文本界面和状态页

  • manager-jmx:允许访问JMX代理和状态页

  • manager-status:只允许访问状态页

界面:


Tomcat-JVM内存调优

最常见的JVM配置当属内存分配,因为在绝大多数情况下,JVM默认分配的内存可能不能够满足我们的需求,特别是在生产环境,此时需要手动修改Tomcat启动时的内存参数分配。

JVM内存模型图

在这里插入图片描述

JVM配置选项

windows平台(Catalina.bat):

set JAVA_OPTS=‐server  ‐Xms2048m  ‐Xmx2048m  ‐XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m ‐XX:SurvivorRatio=8

set JAVA_OPTS=-server -Xms2560m -Xmx10240m -XX:PermSize=560M -XX:MaxPermSize=5120M

Linux平台(Catalina.sh)

JAVA_OPTS="‐server ‐Xms1024m ‐Xmx2048m ‐XX:MetaspaceSize=256m ‐XX:MaxMetaspaceSize=512m ‐XX:SurvivorRatio=8"

参数说明

序 号参数含义
1-Xms堆内存的初始大小
2-Xmx堆内存的最大大小
3-Xmn新生代的内存大小,官方建议是整个堆得3/8。
4-XX:MetaspaceSize元空间内存初始大小, 在JDK1.8版本之前配置为 -XX:PermSize(永久代)
5-XX:MaxMetaspaceSize元空间内存最大大小, 在JDK1.8版本之前配置为 -XX:MaxPermSize(永久代)
6-XX:InitialCodeCacheSize-XX:ReservedCodeCacheSize代码缓存区大小
7-XX:NewRatio设置新生代和老年代的相对大小比例。这种方式的优点是新生代大小会随着整个堆大小动态扩展。如 -XX:NewRatio=3 指定老年代 /新生代为 3/1。 老年代占堆大小的 3/4,新生代占 1/4 。
8-XX:SurvivorRatio指定伊甸园区 (Eden) 与幸存区大小比例。如-XX:SurvivorRatio=10 表示伊甸园区 (Eden)是 幸存区 To 大小的 10 倍 (也是幸存区 From的 10 倍)。 所以, 伊甸园区 (Eden) 占新生代大小的 10/12, 幸存区 From 和幸存区 To 每个占新生代的 1/12 。 注意, 两个幸存区永远是一样大的。

配置之后重启Tomcat。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

five-five

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值