您的位置:首页 > 其它

servlet作用域(session,ServletContext,ServletConfig)和Filter

2017-07-06 18:30 405 查看
ServletRequest :

作用范围是整个一次请求链(包括将此请求转发到的其它页面),也即从客户端发来一次请求开始,到本次服务端响应结束。

对应内置对象是request,EL中可用requestScope取得此对象。

设置该范围属性的写法是:request.setAttribute(string, Object)。

作用域---请求域(HttpServletRequest request)

作用范围:只在一次请求中有效

四个个方法:
void setAttribute(String name,Object obj)

Object getAttribute(String name)

void removeAttribute(String name)

Enumeration getAttributeName():返回request域中所在属性名的枚举。


作用域---会话域(HttpSession session)session代码:HttpSession session=request.getSession();Session的关闭如果要立即销毁整个session可以调用invalidate(),其中各对象也全部清除。session到最大等待时间后,session无效。关闭浏览器后,session无效。关闭服务器的后,session无效Session : 作用范围是一次会话。对应内置对象是session,EL中可用sessionScope取得此对象。设置该范围属性的写法是:session.setAttribute(string, Object)
浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID值如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器浏览器与该服务器开始建立会话服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识再把这个SessionID发给浏览器,浏览器就拥有一个SessionID了当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID值也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID了在会话开始时,服务器会自动分配一个空间(session对象),SessionID就在session对象里

ThreeServlet.java
public class ThreeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
String name=request.getParameter("name");
String password=request.getParameter("password");
name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
password=new String(password.getBytes("ISO-8859-1"),"UTF-8");
request.setCharacterEncoding("UTF-8");

Map<String,String> map=new HashMap<String, String>();

UserDao userDao=UserDao.getInstance();
map.put("name", name);
map.put("password", password);

User user=userDao.getSelect(map);

request.setAttribute("name", name);
request.setAttribute("password", password);

HttpSession session=request.getSession();

System.out.println(session.getId().length());
session.setAttribute("name",name);
session.setAttribute("password",password );

if(user!=null){
request.getRequestDispatcher("/chengong.jsp").forward(request, response);
return;
}else{
request.getRequestDispatcher("/shibai.jsp").forward(request, response);
return;
}
}
ThreeServlet.jsp
<div>
<form action="ThreeServlet" method="post">
用户名:<input type="text" name="name"/>
<br/>
密码:<input type="text" name="password"/>
<br/>
<input type="submit" value="注册"/>
</form>
shibai.jsp
<span style="color:pink; text-align: center; font-size: 100px">${name }登录失败</span>
chengong.jsp
<span style="color:pink; text-align: center; font-size: 100px">${name }登录成功</span>
<img  src="Img/5.jpg">
<%=request.getAttribute("name") %>
<input type="hidden" value="${name } }"/>
<%
int i=1+2;
%>
<%=i %>

<%=session.getAttribute("name")%>
<%=session.getAttribute("password")%>











PageContext 
作用范围是该JSP页面本身,是最小的一个作用范围。

对应内置对象是pageContext,EL中可用pageScope取得此对象。

设置该范围属性的写法是:pageContext.setAttribute(string, Object)。

总结:作用范围从小到大依次为:PageContext,ServletRequest,Session,ServletContext。

ServletContext 
作用范围是整个Web应用。

当Web应用被加载进容器时就会创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。

设置该范围属性的写法是:application.setAttribute(string, Object)。

对应内置对象是application,EL中可用applicationScope取得此对象。


ConfigServlet.java

public class ConfigServlet extends HttpServlet {

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

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ServletConfig config=this.getServletConfig();
// System.out.println(config.getInitParameterNames());
ServletContext application = this.getServletContext();
System.out.println(application.getAttribute("name"));

}

}

ContextServlet.java
public class ContextServlet extends HttpServlet {

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

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application=this.getServletContext();
application.setAttribute("name", "object");

}

}













Filter

filter翻译为过滤器。在web项目中,经常需要在正式处理请求前,做一些特殊的处理或常用的例程,于是就发明了这个filter。

作用:


web.xml
<filter>
<filter-name>FilerServlet</filter-name>
<filter-class>com.yy.servlet.web.servlet.FilerServlet</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilerServlet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


过滤非法文字和信息。
设置统一字符编码。
对用户进行登录验证 。
改变图片文件格式。
对相应内容做压缩处理。
对XML的输出使用XSLT来进行转换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: