首先我们来看一组参数 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;
}
}