1.P132例子
long before = System.currentTimeMillis();
保存filter类作用开始时间,用来显示filter类作用范围
long after = System.currentTimeMillis();
保存filter类作用结束时间,用来显示filter类作用范围
ServletContext context = this.config.getServletContext();
获取ServletContext对象,用于记录日志
HttpServletRequest hrequest = (HttpServletRequest)request;
将ServletRequest请求强制转换成HttpServletRequest请求
System.out.println("Filter已经截获到用户的请求的地址: " +hrequest.getServletPath());
通过.getServletPath()方法返回一个URL对象,得到用户请求的地址,fliler类只是在用户发送请求后将用户请求的地址显示出来
filter用户授权例子
LoginFilter.java
public class LoginFilter implements Filter {
private String permitUrls[] = null;
private String gotoUrl = null;
public void destroy() {
// TODO Auto-generated method stub
permitUrls = null;
gotoUrl = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest res=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse)response;
if(!isPermitUrl(request)){
if(filterCurrUrl(request)){
System.out.println("--->请登录");
resp.sendRedirect(res.getContextPath()+gotoUrl);
return;
}
}
System.out.println("--->允许访问");
chain.doFilter(request, response);
}
public boolean filterCurrUrl(ServletRequest request){
boolean filter=false;
HttpServletRequest res=(HttpServletRequest) request;
User user =(User) res.getSession().getAttribute("user");
if(null==user)
filter=true;
return filter;
}
public boolean isPermitUrl(ServletRequest request) {
boolean isPermit = false;
String currentUrl = currentUrl(request);
if (permitUrls != null && permitUrls.length > 0) {
for (int i = 0; i < permitUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
isPermit = true;
break;
}
}
}
return isPermit;
}
//请求地址
public String currentUrl(ServletRequest request) {
HttpServletRequest res = (HttpServletRequest) request;
String task = request.getParameter("task");
String path = res.getContextPath();
String uri = res.getRequestURI();
if (task != null) {// uri格式 xx/ser
uri = uri.substring(path.length(), uri.length()) + "?" + "task="
+ task;
} else {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("当前请求地址:" + uri);
return uri;
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
String permitUrls = filterConfig.getInitParameter("permitUrls");
String gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls != null && permitUrls.length() > 0) {
this.permitUrls = permitUrls.split(",");
}
}
}
Web.xml
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
<init-param>
<param-name>ignore</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<init-param>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
引用地址:http://www.jb51.net/article/38730.htm
2.session
定义:具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到关闭浏览器所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
用途:Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
session in JEE:
Java Servlet API引入session 机制来跟踪客户的状态,session指的是在一段时间内,单个客户和web服务器之间一连串的交互过程,在一个session中,一个客户可能会多次请求同一个网页,也可能请求多个不同服务器资源,例如:在一个邮件系统应用中,从一个客户登录到邮件系统,到写信,收信和发信等,到最后退出邮件系统,整个过程为一个session;再例如:大家在网上购物的时候,从购物到最后的付款,整个过程也是一个session 。
session对像是jsp中的内置对象,可以直接使用;在Servlet中使用session时,必须先创建出该对象,Servlet中创建session的方法:
HttpSession session=request.getSession();或 HttpSession session=request.getSession(boolean value);
在服务器上,通过session ID来区分每一个请求服务器的用户,用户只要一连接到服务器,服务器就会为之分配一个唯一的不会重复的session ID,session ID由服务器统一管理,人为不能控制
session中的主要方法:
session.getId();//获取session ID,长度为32位
session.isNew();//判断是否是新建立的session
session.getCreationTime();//获取session创建的时间
session.getLastAccessedTime();//获取用户最后操作时间
sesson.setAttribute(String key,Object value);//将对象存到session中
session.getAttribute(String key);//获取session中存的Object对象
session.removeAttribute(String key);//将键值为key的对象从session中删除
session的销毁
web容器关闭或重启,session会死亡
调用session.invalidate();方法,强制session死亡
前后两次请求超过了session指定的生命周期时间,默认为30分钟,我们可以通过在web.xml文件中进行如下配置:
Xml代码
<session-config>
<session-timeout>5</session-timeout>
</session-config>
也可以调用session.setMaxInactiveInterval(int intelval);方法来设置,单位为秒
转载地址: https://blog.csdn.net/u013510614/article/details/50480993
session与cookie的区别:1.Session将信息保存在服务器上,而Cookie保存在客户端上。2.Session比Cookie更安全,Session比Cookie更占资源。3.session使用cookie的机制,如果cookie被禁用,那么session也无法使用,因为session ID是以cookie的形式保存在客户端的内存当中
3.JEETT
异步例子区别:
1.注释时asyncSupported=true,显式指定开启异步调用
2.
request.startAsync()
导致请求被异步处理; 在服务方法结束时,响应不会发送到客户端。
3.acontext.start(new Runnable() {…})
从容器中获取新线程。
4.run()
内部类的方法内的代码在新线程中执行。内部类可以访问异步上下文以从请求读取参数并写入响应。调用complete()
异步上下文的 方法将提交响应并将其发送给客户端。
运行效果不同之处:使用异步处理后的例子在大负载的情况下响应速度变快,服务器吞吐量变大