JVM内存管理和拦截所有JSP业面原理

     首先我们来看一组参数 CATALINA_OPTS="-Xms1024m -Xmx8192m -XX:PermSize=512m -XX:MaxPermSize=1024m"

这个参数是我昨天TOMCAT设置的;被领导骂了;叫我补一下内存的知识;

首先我们来看XMS   XMX  XX这几个参数的意思;   XMS 和XMX分别代表堆内存的初始化空间 和堆内存的最大空间;XX为非堆内存的初始化空间和最大空间;

    堆内存和非堆内存是什么意思呢?

简单的说堆内存就是我们开发人员用来初始化实例和数组这些的;比如:有一个类为class Person{}   那么  new Person();此实例占的内存大小就是分配在堆 内存的;

而非堆内存是JVM使用的;比如加载存储Class这个文件;文件里的结构;方法区;这些代码是放在非堆内存里的;比如上例说到的person.class 这个文件里的所有代码是加载进的非堆里;

    那么XMS和XMX怎么转换的呢:XMS为初始化堆内存大小;当内存大小剩余70%时;内存会降渐渐到XMS这个值;当内存低于40%;内存占用会渐渐升到XMX;同理;XX一样;



拦截所有JSP业面;

此处需要做的是添加一个过滤器;网上很多人都在问Structs2怎么拦截JSp业面;我说明一下;Structs只针对于Action的拦截;不针对JSP业面的拦截;JSP是一个Servlet;所以对它要用过滤器;

此处为:WEB。XML配置

<filter>
		<filter-name>myFilter</filter-name>
		<filter-class>com.cdxt.qhqy.his.filter.RequestFilter</filter-class>
		<init-param>
			<param-name>say</param-name>  <!-- 这个就是在filter里面要获取的参数 -->
			<param-value>hello world !</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>myFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
此处为Servlet的过滤器
package com.cdxt.qhqy.his.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestFilter implements Filter {
	private FilterConfig config; // 这个东西好,可以从配置文件里面读,就是读的filter里面那个参数
	public void destroy() {
		System.out.println("listener destory");
		config = null;
	}
	public void doFilter(ServletRequest paramServletRequest,
			ServletResponse paramServletResponse, FilterChain paramFilterChain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) paramServletRequest;// 强制转换
		System.out.println("do filter");
		System.out.println(request.getServletPath());// 测试拿到的request能不能用
		String sPath = request.getServletPath();
		Object username = request.getSession().getAttribute("userName");
		if(sPath.equals("/index.jsp")
				||sPath.equals("/checkyljg.jsp")
				||sPath.equals("/common.jsp")
				||sPath.equals("/registersuccess.jsp")
				||sPath.equals("/registerwsry.jsp")
				||sPath.equals("/registerwsry2.jsp")
				||sPath.equals("/registeryljg.jsp")
				||sPath.equals("/success.jsp")
			
				||sPath.equals("/ktyy.jsp")) {
			paramFilterChain.doFilter(paramServletRequest, paramServletResponse);// 如果不写这个,那么服务器就不会响应客户端的请求,也就是不会有response产生
		} else 
		if((username == null || username.toString().equals("")) &&sPath .contains(".jsp")) {
			HttpServletResponse response = (HttpServletResponse) paramServletResponse;// 强制转换
			System.out.println(config.getInitParameter("say"));// 从配置文件读取参数为say的值
			response.sendRedirect("/APPWH/index.jsp");// 过滤完之后跳转,这样跳转是从定向,客户端跳转
		} else {
			paramFilterChain.doFilter(paramServletRequest, paramServletResponse);// 如果不写这个,那么服务器就不会响应客户端的请求,也就是不会有response产生
		}
		
		
		
		/**
		 * RequestDispatcher rd = request.getRequestDispatcher("login.jsp");   //request的重定位,服务端跳转
		 * rd.forward(request, response);
		 */
		
	}
	public void init(FilterConfig paramFilterConfig) throws ServletException {
		this.config = paramFilterConfig;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值