JSP内置对象之application对象

1. 让JSP和Servlet共享数据

        该对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量。application通过setAttribute()方法将一个值放入某个属性,该属性的值对整个Web 应用有效,因此Web 应用的每个JSP 页面或Servlet都可以访问该属性,访问属性的方法为getAttribute 。

        看下面的put-application.jsp页面,该页面仅仅声明了一个整型变量,每次刷新该页面时,该变量值加1,然后将该变量的值放入application 内。下面是页面的代码:

    <%@ page language="java" contentType="text/html; charset=gb2132"  
        pageEncoding="ISO-8859-1"%>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
    <title>APPLICATION测试</title>  
    </head>  
    <body>  
    <!-- JSP声明 -->  
    <%! int i;  
    %>  
    <!-- 将i值自加后放入application的变量内 -->  
    <%application.setAttribute("counter",String.valueOf(++i));%>  
    <!-- 直接输出application变量值 -->  
    <%=application.getAttribute("counter"); %>  
    </body>  
    </html>  


上面代码第13行实现了每次刷新该页面时,该变量都会先自加,并被设为application的counter属性值,即每次application的counter属性值都会加1。

看下面另一个JSP页面:

    <%@ page language="java" contentType="text/html; charset=gb2132"  
        pageEncoding="ISO-8859-1"%>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
    <title>APPLICATION测试2</title>  
    </head>  
    <body>  
    <!-- JSP声明 -->  
    <%! int i;  
    %>  
    <!-- 直接输出application变量值 -->  
    <%=application.getAttribute("counter"); %>  
    </body>  
    </html>  
上面的代码的13行也直接输出application的属性值。虽然这个页面和put-application页面没有任何的关系,但它同样能够访问到application的属性,因为application的属性对于整个Web应用的JSP、Servlet来说都是共享的。

         注意:application不仅可以用于两个JSP页面间进行共享数据。我们可以把application理解成一个Map对象,任何的jsp、servlet对象都可以将某个变量放入application中进行保存,并为之指定一个属性名; 而该应用中的其他JSP、servlet页面就可以根据这个属性名来得到这个变量。如下面的这Servlet代码所示:

    package ppp;  
      
    import java.io.IOException;  
    import java.io.PrintWriter;  
    import javax.servlet.ServletContext;  
    import javax.servlet.http.HttpServlet;  
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
      
    public class GetApplication extends HttpServlet {  
        public void service(HttpServletRequest request, HttpServletResponse response)  
                throws IOException {  
            response.setContentType("text/html;cahrset = gb2132");  
            PrintWriter out = response.getWriter();  
            out.println("<html><head><title>");  
            out.println("测试Application");  
            out.println("</title></head><body>");  
            ServletContext sc = getServletConfig().getServletContext();  
            out.println("application当前的counter值为:");  
            out.println(sc.getAttribute("counter"));  
            out.println("</body></html>");  
        }  
    }  

   在上面的代码中,由于Servlet中并没有application内置对象,所以上面程序第18行代码显示获取了该web应用的ServletContext实例。每个web应用只有一个ServletContext实例,在JSP中只有通过application内置对象访问该实例,而在Servlet中则必须代码获取。

        提示:该Servlet同样要编译成class文件才可以使用,实际上Servlet还需要部署。编译Servlet时可能由于没有添加环境变量出现异常,如果安装Java EE SDK,只需将Java EE SDK路径下的javaee.jar文件添加到ClASSPATH环境变量中去;如果没有安装Java EE SDK,可以将tomcat的lib路径下的jsp-api.jar、servlet-api.jar添加到CLASSPATH环境变量中去。

       最后要指出的是:虽然使用application(即ServletContext实例)可以方便JSP、Servlet共享数据,但不要为了共享数据就将数据放入application对象中!由于application对象代表整个应用,所以通常只应该把web应用的状态数据放入application中。

2. 获得web应用配置参数

        application还有一个重要的用处:可用于web应用的配置参数。请看如下的JSP页面,该页面访问数据,但访问数据所用的驱动、URL、用户名和密码都在web.xml文件中给出。

    <%@ page language="java" contentType="text/html; charset=gb2132"  
        pageEncoding="ISO-8859-1"%>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
    <title>APPLICATION测试</title>  
    </head>  
    <body>  
    <%  
        //从配置参数中获取驱动  
        String driver = application.getInitParameter("driver");  
        //从配置参数中获取数据库URL  
        String url = application.getInitParameter("url");  
        //从配置参数中获取用户名  
        String user = application.getInitParamter("user");  
        //从配置参数中获取密码  
        String pass = application.getInitParamter("pass");  
        //注册驱动  
        Class.forName(driver);  
        //获取数据库连接  
        Connection conn = DriverManager.getParameter("url,user,pass");  
        //创建Statement对象  
        Statement stmt = conn.createStatement();  
        //执行查询  
        ResultSet rs = stmt.executeQuery("Select * from newsinf");  
    %>  
    <table bgcolor="9999dd" border="1" align="center">  
        <%  
            //遍历结果集  
            while (rs.next()) {  
        %>  
        <tr>  
            <td><%=rs.getString(1)%></td>  
            <td><%=rs.getString(2)%></td>  
        </tr>  
        <%  
            }  
        %>  
    </table>  
    </body>  
    </html>  

   上面的程序中第10行至第17行代码使用了application的getInitParameter(String paramName)来获取web应用的配置参数。这些配置参数应该在web.xml文件中使用context-param元素进行配置,每个context-param配置一个参数,该元素下有如下两个子元素:

        (1) param-name:配置web参数名

        (2) param-value:配置web参数值

        为了给web应用配置参数,应该在web.xml文件中增加以下代码:

    <!--配置第一个参数driver-->  
    <context-param>  
            <param-name>driver</param-name>  
            <param-value>com.mysql.jdbc.driver</param-value>  
    </context-param>  
    <!--配置第二个参数url-->  
    <context-param>  
            <param-name>url</param-name>  
            <param-value>jdbc:mysql://localhost:3306/javaee</param-value>  
    </context-param>  
    <!--配置第一个参数user-->  
    <context-param>  
            <param-name>user</param-name>  
            <param-value>root</param-value>  
    </context-param>  
    <!--配置第一个参数pass-->  
    <context-param>  
            <param-name>pass</param-name>  
            <param-value>32147</param-value>  
    </context-param>  
  在浏览器中浏览getWebParam.jsp页面时,可以看到数据库连接、数据查询完全成功。可见,使用application可以访问Web应用的配置参数。 注意:通过这种方式,可以将一些信息放置在web.xml文件中进行配置,避免使用一些硬编码方式写在代码中,从而更好地提高程序的可移植性。


  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值