java web(三):ServletContext、session、ServletConfig、request、response对象
上一篇讲了Servlet:
1)什么是Servlet【servlet本身就是一种Java类,这种Java类提供了web形式的方法,只要实现了servlet接口的类,都是一种servlet资源。】
2)三种方式创建Servlet(继承HTTPServlet使我们使用的)
3)Servlet的生命周期【通过三个成员方法体现】
一:ServletContext对象
ServletContext对象被称作应用/servlet上下文。
生命周期:
启动tomcat服务器被创建
关闭tomcat服务器被销毁【每个web项目有且只有一个ServletConfig对象】
获取方式:this.getServletContext(); this.getServletConfig.getServletContext();request.getServletContext();
作用范围:
在整个项目运行期间,有且只有一个ServletConfig对象,为所有用户共享。
使用:
1)web项目共享数据 setAttribute(String key,Object value); //已键值对存放数据,整个项目运行期间都存在
getAttribute(String key); //通过键获取数据
removeAttribute(String kye); //通过键移除数据
2)全局初始化参数
如果在web.xml中配置
<context-param>
<param-name>id</param-name>
<param-value>11</param-value>
<param-name>name</param-name>
<param-value>jack</param-value>
<param-name>age</param-name>
<param-value>18</param-value>
</context-param>
this.getServletContext().getInitParameter("id"); // 11
this.getServletContext().getInitParameter("name"); // jack
this.getServletContext().getInitParameter("age"); // 18
this.getServletConfig().getInitParameterNames(); //获得全局参数所有<param-name>值
3)获取web项目资源
this.getServletContext().getRealPath("WEB-INF/web.xml"); //获取web项目下指定文件的绝对路径【D:\apache_tomcat\apache-tomcat-7.0.62-windows-x64\apache-tomcat-7.0.62\webapps\StudyServlet\WEB-INF\web.xml】
InputStream getResourceAsStream(java.lang.String path); //获取web项目下指定资源的内容,返回的是字节输入流
浏览器请求一个Servlet,然后通过上面方法把一个html页面写过去。页面代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = this.getServletContext();
//ips.html在webContent目录下
InputStream ips = context.getResourceAsStream("/ips.html");
BufferedReader reader = new BufferedReader(new InputStreamReader(ips));
String str = null;
while((str = reader.readLine()) != null)
response.getWriter().write(str); }
浏览器效果:
效果达到了,但出现???,这是中文乱码问题,后面会通过response解决。
二:HttpSession对象。
HpptSession对象和ServletContent对象类似,不过它的作用范围是一次会话期间,一次会话可以包括对此request请求。
生命周期:第一次调用request.getSession(true);时被创建。【参数boolean类型,true是有session则返回,无则创建一个新的;false则返回一个null如果当前没有有效的session。无参的getSession是调用传入false的该方法】
调用session.invalidate()或自动超时则被销毁。默认超时时间30分钟,超时时间指:【客户端不与服务器进行交互的时间】。【代码设置:session.setMaxInactiveInterval(60*30);单位:秒;web.xml中设置:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
该标签与servlet标签处于同一级别。单位:分钟,必须为整数
】
用途:一般用作一次会话期间保存数据,getAtrribute(),setAttribute(),removeAtrribute()用法和ServletContent对象用法一致。
注意:服务器异常关闭不会销毁session,丢失session。服务器正常关闭不会销毁session,也不会丢失。
三:ServletConfig对象
在Servlet 的配置文件中,可以用一个或多个<init-param>标签为servlet配置一些初始化参数。
当servlet配置了初始化参数之后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给Servlet。进而,程序员通过Servlet对象得到当前servlet的初始化参数信息。
上一篇我们说过,一般会重写无参的init方法,所以通过this.getServletConfig()获得对象。
web.xml中:
servlet中:
@Override
public void init() throws ServletException {
ServletConfig config = this.getServletConfig();
config.getInitParameter("id"); //223
config.getInitParameter("age"); //jack
Enumeration<String> keys = config.getInitParameterNames();
while(keys.hasMoreElements())
System.out.println(keys.nextElement()); }
四:request对象、response对象
request对象的作用范围是一次http请求响应之内,request也可以存放数据,和ServletContent和session对象类似,不过作用范围比它们两个小。
request可以用过方法getParameter(String key):String;获取浏览器传递的参数【不管是在url后拼接参数的get提交方式或参数在请求体的post提交方式都是用该方法】,
getParameterNames():Enumeration<?>;可以获取所有的key值,没有参数则返回一个空的Enumeration。接收数据前可以调用setCharacterEncoding(charset);设置接收格式。
request还可以用于服务器内部跳转【还是一次http请求响应,所以request在N次内部跳转中是同一个】。request.getRequestDispatcher("HelloWorld").forword(request,reponse);
可以跳转到WebContent目录下的一个html页面或者跳转到另一个Servlet请求处理。
response对象作为响应向浏览器发送数据,可以通过setCharacterEncoding(charset)设置编码格式,setContentType("text/html;charset=utf-8")告诉浏览器已html文件解析。
getWriter()可以获得一个字符输入流,该流可以向浏览器写东西。
response还可以用作客户端重定向,sendRedirect(path)。例如:跳转到WebContent目录下的one.html,response.sendRedirect("one.html");
跳转到另一个Servlet,response.sendRedirect("HelloWorld")。【注意:不要加"/"】
"/"在服务器内部跳转和客户端重定向中怎么使用?代表这什么?
内部跳转加不加"/"不影响,客户端重定向不能加。"/"在服务器代表当前web项目【http://ip:port/项目名/】;
在客户端表示当前页面【http://ip:port/】。
注意: 在WebContent下有一个one.html和一个HTML目录,HTML目录下有一个two.html,两个html页面代码一样。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
<a href="HelloWorld">点击超链接进行跳转</a>
</body>
</html>
在浏览器分别访问http://127.0.0.1:7778/StudyServlet/one.html和http://127.0.0.1:7778/StudyServlet/HTML/two.html,然后点击超链接进行跳转。
在two.html中点击超链接发生错误,错误提示【HTTP Status 404 - /StudyServlet/HTML/HelloWorld】,404---没有该资源。为啥呐?因为在客户端页面发送请求是相对于
当前路径的,这可能不方便。可以通过base标签设置。<base href="http://127.0.0.1:7778/StudyServlet/"></base>,这样在一个页面访问另一个资源时就可以相对于base标签设置的了。
等后面学了jsp可以不必限定死协议、ip、port、项目名。
request.getScheme();//获取协议 http
request.getServerName(); //获取ip,127.0.0.1
request.getServerPort(); //获取端口,7778
request.getContextPath(); //获取项目名,StudyServlet
response,response还有很多方法,具体可以查API。request和resonse的具体用法下一篇讲。
总结:
1.SevletContext对象。获取途径,生命周期,作用范围,以及一些该对象的一些用法【存取数据,获取全局配置参数,获取web项目资源】
2.HTTPSession对象。session对象和上面类似,只是作用范围变成了一次会话期间。
3.ServletConfig对象一般用作来获取web.xml中servlet配置中<init-param>...</init-param>里的参数。如果servlet配置了<load-on-startup>正整数</load-on-startup>,
init方法就可以随服务器启动而被调用,继而可以在init中利用该对象做一些初始化配置。
4.request和response对象。一般用来服务器内部跳转和客户端重定向。
当然还有其他用法。下一篇通过一个小项目讲解request和response一些具体用法:比如文件的上传和下载...
java web(三):ServletContext、session、ServletConfig、request、response对象的更多相关文章
- (day20)javaEE三大组件之一Servlet (简介(二)servletconfig,servletContext,session,cookie,request,response,out)
javaEE是服务器编程,javaEE提供了服务器的接口让具体的服务器去创建实现的对象 JavaEE是sun公司为了解决企业级开发定义的一套技术,只提供了规范,具体的实现是由服务器完成的 servle ...
- Java Web Application使Session永不失效(利用cookie隐藏登录)
在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- Java web学习 Cookie&&Session
cookie&&session 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会 话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Coo ...
- JAVA WEB 三器之过滤器(Filter)
过滤器(Filter) 1. 简介 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息,它是 Servlet 技术中最实用的技术,属于系统级别,主要是利用函数的回调实现.对 Jsp, ...
- java web(三) Tomcat虚拟目录映射方式
Tomact服务器虚拟目录的映射方式 web应用开发好后若想被外界访问,需要将web应用所在的目录交给web服务器管理,这个过程称为虚拟目录的映射. 方式一:在server.xml文件的host元素中 ...
- A candidate solution for Java Web Application - current session
Motivation Do it once, resue for ever. Audience myself, Java Web developers Scope 应用案例 图书借阅系统 阶段1需求: ...
- Java Web学习总结(7)——HttpServletRequest对象
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
随机推荐
- Python中的传参是传值还是传址?
传值:在C++中,传值就是把一个参数的值给这个函数,其中的更改不会影响原来的值. 传址:即传引用,直接把这个参数的内存地址传递进去,直接去这个内存地址上进行修改. 但是这些在Python中都没有,Py ...
- 关于Linux时间设置的总结
系统环境:centos Linux的时间有两种,一种是系统时间,一种是硬件时间. 系统时间的查看:#date 系统时间的设置:#date -set 时间同步工具准备 Linux进行时间同步要使用一个工 ...
- SSM excel文件的导入导出
对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错. excel文件导出,用<a><a/&g ...
- java文件上传 关键代码
文件上传 ##前台: form表单submit提交,form增加样式 enctype="multipart/form-data" method="post"; ...
- Oracle组成介绍
Oracle Database 11g是一些特殊文件的集合,这些文件是用数据库配置助手创建的,然后用OEM Grid Control完成相关工作.这些数据库文件是通过一组共享内存进程来进行访问的,这组 ...
- jmeter的学习路线
- Asp.Net Core通过HttpStatusCode状态处理响应结果
在我的一个Asp.Net Core 2.1 的项目中,我们需要通过获得服务器返回的状态,去实现不用的操作,经过多方资料查询和实践,个人总结一种方法 一.修改控制器 在要返回值的控制器Action中,R ...
- linux之特殊字符
特殊字符: 与路径和位置有关的特殊字符: ~ 用户的家目录,超级用户为/root _ 用户(-) 代表上一次用户所在路径 .代表当前目录(. 还有很多其他含义) ..代表上一级目录 通配符 *匹配 ...
- C16记技术服务支持
1.首页笔记:可以通过点击加号添加笔记的分类,还可以查看最近的10条笔记 2.图形:可以通过查看笔记的比例来分析自己最近的状况 3.快速添加笔记:点击添加笔记能够直接进行笔记 4.时间轴:能够通过文字 ...
- 电脑小知识-win10
设置开机自启 一直想设置几个软件开机自启,尤其是文件搜索类和截图软件,不然每次打开电脑都要双击好几个工具,下面就记录一下如何设置开机自启. 1.先打开咱们的任务管理器,看看都有什么是开机自启的: 可以 ...