JSP内置对象--application对象

application对象是javax.servlet.ServletContext接口的实例化对象。是整个servlet的上下文,代表了整个web容器的操作。

常用方法:

1.java.lang.String getRealPath(java.lang.String path):得到虚拟目录对应的绝对路径;

2. java.util.Enumeration<java.lang.String> getAttributeNames():得到所有属性的名称

3. java.lang.String getContextPath():取得当前的虚拟路径名称

除了以上3个方法外,对属性的增加,取得和删除也有应用,setAttribute(),getAttribute(), removeAttribute()

  • 取得绝对路径

例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%    // http://localhost/mldn/
    String path = application.getRealPath("/") ;
%>
<h3>真实路径:<%=path%></h3>
</body>
</html>

运行结果:

真实路径:D:\Workspace\

这个真实路径就是server.xml里配置的。

需要注意,application的操作本身是ServletContext接口的实例,但是在jsp中有个方法的功能可以完全与之对应,getServletContext();

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%    // http://localhost/mldn/
    String path = this.getServletContext().getRealPath("/") ;
%>
<h3>真实路径:<%=path%></h3>
</body>
</html>

这两个操作的效果完全一样,在正常情况下,所有的方法不是由对象调用么?那为什么这里面没有对象。

如果非要加上一个对象的话,就需要用this表示。

一定要记住,this.getServletContext()非常重要!!!实际使用中替代application操作

因为取得绝对路径,就意味着jsp可以进行文件操作了。

如果要想进行文件操作,一个要通过一个File类找到一个指定的路径。这个路径最好是绝对路径,这个时候,getRealPath()方法就起作用了,因为所有的web目录都是活的。

input_content.htm:

<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="input_content.jsp" method="post">
    输入文件名称:<input type="text" name="filename"><br>
    输入文件内容:<textarea name="filecontent" cols="30" rows="3"></textarea><br>
    <input type="submit" value="保存">
    <input type="reset" value="重置">
</form>
</body>
</html>

input_content.jsp:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    request.setCharacterEncoding("GBK") ;    // 解决乱码问题
    String name = request.getParameter("filename") ;
    String content = request.getParameter("filecontent") ;
    // 要想操作文件必须有绝对路径,那么这个时候getRealPath()
    String fileName = this.getServletContext().getRealPath("/") + "note" + File.separator + name ;    // 保存在note文件夹之中
    File file = new File(fileName) ;    // 实例化File类对象
    if(!file.getParentFile().exists()){
        file.getParentFile().mkdir() ;    // 建立一个文件夹
    }
    PrintStream ps = null ;
    ps = new PrintStream(new FileOutputStream(file)) ;
    ps.println(content) ;
    ps.close() ;
%>
<%
    Scanner scan = new Scanner(new FileInputStream(file)) ;
    scan.useDelimiter("\n") ;
    StringBuffer buf = new StringBuffer() ;
    while(scan.hasNext()){
        buf.append(scan.next()).append("<br>") ;
    }
    scan.close() ;
%>
<%=buf%>
</body>
</html>

网站计数器功能:

1. 网站人数可能很多,需要要用BigInteger完成

2. 用户每次第一次访问的时候才需要计数操作。执行计算前必须使用isNew()判断

3. 更改,保存的时候需要进行同步操作

count.jsp;

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.math.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%!
    BigInteger count = null ;
%>
<%!    // 为了开发简便,将所有的操作定义在方法之中,所有的异常直接加入完整的try...catch处理
    public BigInteger load(File file){
        BigInteger count = null ;    // 接收数据
        try{
            if(file.exists()){
                Scanner scan = new Scanner(new FileInputStream(file)) ;
                if(scan.hasNext()){
                    count = new BigInteger(scan.next()) ;
                }
                scan.close() ;
            } else {    // 应该保存一个新的,从0开始
                count = new BigInteger("0") ;
                save(file,count) ;    // 保存一个新的文件
            }
        }catch(Exception e){
            e.printStackTrace() ;
        }
        return count ;
    }
    public void save(File file,BigInteger count){
        try{
            PrintStream ps = null ;
            ps = new PrintStream(new FileOutputStream(file)) ;
            ps.println(count) ;
            ps.close() ;
        }catch(Exception e){
            e.printStackTrace() ;
        }
    }
%>
<%
    String fileName = this.getServletContext().getRealPath("/") + "count.txt";    // 这里面保存所有的计数的结果
    File file = new File(fileName) ;
    if(session.isNew()){
        synchronized(this){
            count = load(file) ;    // 读取
            count = count.add(new BigInteger("1")) ;    // 再原本的基础上增加1。
            save(file,count) ;
        }
    }
%>
<h2>您是第<%=count==null?0:count%>位访客!</h2>
</body>
</html>
  • 查看属性

application里也存在属性操作,有个方法可以取得全部属性:getAttributeNames()

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    Enumeration enu = this.getServletContext().getAttributeNames() ;    // 取得全部的属性
    while(enu.hasMoreElements()){
        String name = (String) enu.nextElement() ;
%>
        <h4><%=name%> --> <%=this.getServletContext().getAttribute(name)%></h4>
<%
    }
%>
</body>
</html>

通过tomcat配置的第三方jar文件,都是通过application属性设置到服务器上去的,所以在每次配置一个新的开发包的时候,服务器必须重新启动。

总结:

1. application表示上下文的资源环境

2. 实际中可以使用this.getServletContext()方法来代替application的使用

3. 通过getRealPath()方法来取得一个虚拟目录对应的真实路径

时间: 2024-10-10 06:37:05

JSP内置对象--application对象的相关文章

jsp 内置对象(五)

1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以 获取用户提交的信息. 当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理.首先,将获取的 字符串用ISO-8859-1进行编码,并将编码存发岛一个字节数组中,然后再将这个数组转化为字符串对象 即可.如下: String textContent=request.getParameter("boy") byte b[]=textContent.get

JSP内置对象与servlet对应关系

隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletResponse对象 config 转译后对应ServletConfig对象 application 转译后对应ServletContext对象 session 转译后对应HttpSession对象 pageContext

JSP内置对象之------response、session、application

1. 重定向和转发 response.sendRedirect("地址"); a. 页面地址显示最终页面 b. 不可向后传递参数 c. 跳到外部站点 request.getRequestDispatcher("地址").forward(request, response); a. 页面地址显示请求页面 b. 可以向后传递参数 c. 不可以跳到外部站点 通俗的来说两者的区别就是: 重定向:发出两次请求,不能够共享前一次请求中封装的参数信息 转发:   发一次请求 2.

JSP内置对象——application,page,pageContext,config,Exception

application对象application对象实现了用户数据的共享,可存放全局变量.application开始于服务器的启动,终止于服务器的关闭.在用户的前后链接或不同用户之间的连接中,可以对application对象的同一属性进行操作.在任何地方对application对象属性的操作,豆浆影响到其他用户对此的访问.服务器的启动和关闭决定了application对象的生命.application对象是ServletContext类的实例.常用方法如下:void setAttribute(S

Jsp 内置对象

JSP内置对象是 Web 容器创建的一组对象 JSP内置对象的名称是 JSP 的保留字 JSP内置对象是可以直接在 JSP 页面使用的对象,无需使用 “new” 获取实例 -request 对象:用于处理客户端请求,主要方法如下: String getParameter(String name) 根据页面表单组件名称获取页面提交数据 String[ ] getParameterValues(String name) 获取一个页面表单组件对应多个值时的用户的请求数据 void setCharact

JSP内置对象详解

jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request:是javax.servlet.httpservletRequest类型的对象,该对象是用户客户端的请求信息,主要用户接受客户端通过http协议传送到服务器的数据! (包括头部信息.系统信息.请求方式以及请求信息参数),jsp内置对象Web容器所创建的一组对象! 生命周期:jsp发出请求一个requ

jsp内置对象和el表达式

九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真身中的ServletConfig对象 *pageContext 一个顶九个,这个重要 *request HttpServletRequest *response HttpServletResponse *exception Throwable *session HttpSession *applic

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他

JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次都要先创建这些对象,然后再去使用它们,这样就显得十分繁琐了,为了方便使用者,Sun公司在开发JSP的时候,把一些对象设置为内置对象,开发者在JSP页面编程的时候不必声明这些对象就能直接使用,这就是JSP的内置对象. 那么JSP对象有哪些呢? JSP内置对象          对应的类型   备注 R

Jsp内置对象的简单说明

声明 实习森的理解层次,希望有错大家一起纠正 本文主要信息来自网友共享的一个JSPAPI,不是特别全,只是对jsp内置对象进行了简单的介绍,这里我总结了一下 正文 Jsp主要内置了9个对象,分别为:Application.Exception.Out.PageContext.Page.Request.Response.Session以及Config,详细如下: Application对象 基础介绍: Application对象实现了不同用户之间的数据共享,声明周期最长了,服务器启动的时候,Appl