澳门新葡亰平台官网下载-平台游戏app > 前端 >
JSP实现网页访问统计

近年来读书Jave EE 中的jsp网页开拓,需求完结网页访谈量的总计,刚伊始不清楚什么贯彻,后来问了刹那间教授,老师是如此答复自身的:要完成网页访谈的总结,你能够使用application对象来兑现,不能用seesion对象,因为session是归属同一个会话的,关掉浏览器数据就一贯不了,而application是在相似浏览器下的,只若是同三个浏览器,将数据保存在applicaiton对象中,那样就可以保险数据的不改变性。其实那么些小编都懂,小编只是不知道什么样在jsp用代码完毕。后来本身只得上网看看有未有切实可行的缓和方案,搜了十分久,未有小编想要的答案,作者想要完毕的只是轻巧的计算,未有兑现更为积重难返的效应。后来要么在CSDN这里找到了答案,在这里间大致计算一下兑现网页访谈总结的二种办法:
1. 选拔application对象进行总计,拿到的功力是每进来三回该网页就计算贰遍。但成效不怎么好,因为平时总计网页访问量,刷新是不算进总结里的,这里正是这种破绽。
现实落到实处是:

                                       JSP总结

 java 计数器程序 



  这是第个访问者 

静态网页
  在网址设计中,纯粹HTML(标准通用标志语言下的三个利用)格式的网页经常被称为“静态网页”,静态网页是正统的HTML文件,它的文书扩充名是.htm、.html  。静态网页是网址建设的根底,早期的网址常常都以由静态网页制作的。静态网页是相对于动态网页来讲,是指未有后台数据库、不含程序和不足相互的网页。

 2.为了消除地点的标题,有了另生龙活虎种办法,便是同时接纳application对象和session对象来总计,这种办法的规律是从张开浏览器到关闭浏览器算是访问贰遍,刷新、重返等操作不算做三次访谈。但要么有劣点,当jsp服务器从新运营时,数据也被清零了。
下边仍然现实落到实处:

动态网页
  网页文件里含有了程序代码,通过后台数据库与WEB服务器的新闻人机联作,由后台数据库提供实时数据更新和数目查询服务。动态网址反映在网页平日是以asp,jsp,php,aspx等收尾。

 java 计数器程序 



  这是第个访问者 

双面分别
  网页制作使用的成立语言:静态网页使用语言:超文本标记语言(标准通用标志语言的二个用到); 动态网页使用语言:超文本标志语言+ASP或超文本标识语言+PHP或超文本标识语言+JSP等。
  程序是不是在服务器端运营,是注重标识。在劳务器端运转的顺序、网页、组件,归属动态网页,它们会随分歧顾客、不相同一时候间,重回差异的网页, ASP、PHP、JSP、ASPnet、CGI等。运营于客商端的次序、网页、插件、组件,归于静态网页,譬喻html 页、Flash、JavaScript、VBScript等等,它们是长久不改变的。

3. 第三种方法是将总结数据存款和储蓄在本地的文书个中,比方存款和储蓄在一个txt文件在那之中。
那是为了缓慢解决重启服务器之后数据并非忧郁会丢弃。
创立八个类:JSPCount

常用的动态网页能力
  ASP(Active Server Page)
  ASP本事是基于.NET平台的朝气蓬勃种动态网页本事。它有十一分刚劲的后台管理技能,但却有豆蔻梢头对安全性、稳固性、跨平台性的问题。ASP只扶持Windows平台,对Linux、Unix不补助。

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 


public class JSPCount { 
 //写入文件的方法 
 public static void write2File(String filename, long count){ 
  try{ 
   PrintWriter out = new PrintWriter(new FileWriter(filename)); 
   out.println(count); 
   out.close(); 
  } catch (IOException e) { 
   // TODO: handle exception 
   e.printStackTrace(); 
  } 
 } 

 //读文件的方法 
 public static long readFromFile(String filename){ 
  File file = new File(filename); 
  long count = 0; 
  if(!file.exists()){ 
   try { 
    file.createNewFile(); 
   } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
   write2File(filename, 0); 
  } 
  try{ 
   BufferedReader in = new BufferedReader(new FileReader(file)); 
   try{ 
    count = Long.parseLong(in.readLine()); 
   } 
   catch (NumberFormatException e) { 
    // TODO: handle exception 
    e.printStackTrace(); 
   } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
  } catch (FileNotFoundException e) { 
   // TODO: handle exception 
   e.printStackTrace(); 
  } 
  return count; 
 } 
} 

  PHP(Hypertext Preprocessor)
  PHP原始为Personal Home Page的缩写,已经正式更名字为(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预微电脑”)是豆蔻梢头种通用开源脚本语言。语法摄取了C语言、Java的特色,利于学习,使用大面积,首要适用于Web开辟世界。PHP是HTML内嵌式的语言,那一点相像于ASP,并且PHP可以跨平台。但PHP的数据库接口不专门的学业。可是对每个数据库接口的费用都比不上十分大地加强了开荒者的承负,何况缺乏集团级应用的接济。

 在WebRoot目录下建jsp文件:count.jsp

  JSP/Servlet(Java Server Page)
  JSP技能在基于java的平台上海大学规模地选取,是张开Java web开荒的少年老成种基本器件。JSP页面由HTML代码和松开在中间的Java脚本组成。JSP能够三回编写,四处运行。那点JSP比PHP本事更有优势,在不相同的种类平台上运维,代码不用做此外改革。

 java 计数器程序 

什么是JSP
  JSP (Java Server Pages卡塔尔国是java服务页面,能够在HTML中放到Java脚本代码。
  JSP页面成分:
  静态内容:HTML静态文本
  指 令:以"<%@" 开始,以"%>" 结束
  小脚本:<%Java代码%>
  表达式:<%=Java表达式%>
  声明:<%! 方法%>
  注释 :<!-- 顾客端能够查见到-->,<%-- 客商端不能够查看见--%>

程序运转之后会在tomcat下的webapps目录下的对应的web项不熟悉成二个count.txt文本文件

JSP(生机勃勃) 三大指令
  ① page 指令 
    通过安装内部的六本性格定义整个页面包车型大巴性子
    语法:
    <%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>

4.第三种办法,只是保存了寻访的总括数据罢了,但绝非保障刷新页面包车型客车时候不会自增,那样仍然倒霉。当然总会有解决的法子的,日常的消除方案便是构成各类方案的长处。下边是由session对象+application对象+txt文本来实现网址的寻访总计。

  ② include 指令(静态包蕴卡塔尔
    将有个别共性的剧情写入叁个独自的文本中,然后经过include指令引用该公文
    include(静态包括):这种会将五个页面编写翻译成三个class,里面包车型大巴能源可以分享。(先满含再编写翻译)

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.http.HttpServlet; 

public class Counter extends HttpServlet{ 
 //写入文件的方法 
 public static void write2File(String filename, long count){ 
  try{ 
   PrintWriter out = new PrintWriter(new FileWriter(filename)); 
   out.println(count); 
   out.close(); 
  } catch (IOException e) { 
   // TODO: handle exception 
   e.printStackTrace(); 
  } 
 } 

 //读文件的方法 
 public static long readFromFile(String filename){ 
  File file = new File(filename); 
  long count = 0; 
  if(!file.exists()){ 
   try { 
    file.createNewFile(); 
   } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
   write2File(filename, 0); 
  } 
  try{ 
   BufferedReader in = new BufferedReader(new FileReader(file)); 
   try{ 
    count = Long.parseLong(in.readLine()); 
   } 
   catch (NumberFormatException e) { 
    // TODO: handle exception 
    e.printStackTrace(); 
   } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
  } catch (FileNotFoundException e) { 
   // TODO: handle exception 
   e.printStackTrace(); 
  } 
  return count; 
 } 
} 

  ③ taglib 指令
    在JSP页面中程导弹入JSTL标签库,替换JSP中的Java代码片段
    语法:
    <%@taglib uri="" prefix="别名"%>

jsp文件代码:

JavaBean
  JavaBean的优势
    搞定代码重复编写,裁减代码冗余
    成效界别明显
    提升了代码的维护性
  JavaBean 分为: 数据Bean 和 业务Bean 
    数据Bean : 私有的性格,暗中认可的空布局,set、get方法  便是Java中的属性类
    业务Bean : 使用数据Bean。

  java 计数器程序 



 访问人数: 

JSP(二)七大动作
  jsp动作(action)是指在运作期间的下令,屡见不鲜的有:
  jsp:useBean
    jsp:setProperty
    jsp:getProperty
  jsp:include
  jsp:forward
    jsp:param
    jsp:plugin
  ① include
    include 动态富含(分别编写翻译State of Qatar:用jsp:include动作实现,它连接会检讨所含文件中的变化,符合用来蕴含动态页面,况且能够带参数。flush属性: 用true ,表示页面可刷新。默以为false;在采取include命令时独有该命令被施行到,否则它是不会被汤姆cat等JSP Engine编写翻译。
    语法: <jsp: include page="页面路线" flush="true" />

以上各类方式,是每贰次修改才获得的方式,纵然要达成网址访谈计算,当然最后风流浪漫种是最佳的,知识不是青云直上,要求在标题上不断修正,拿到最后的消除方案,当然最后风流倜傥种不肯定是最棒的,实现政策上,借使得以行使数据库也是足以的,但本身以为每一次访谈网址都要读和写数据库,那样效用就跌落了。

  jsp:include(动态蕴涵):这种会编写翻译成五个单身的class,里面包车型大巴资源不可能分享。(先编译再包括)
  include(静态包罗):这种会将四个页面编写翻译成三个class,里面包车型客车能源得以分享。(先满含再编写翻译)
  静态include和动态include的区别?
    相近点:都会将页面引进到另三个页面中。
    不同点:
      静态include会将援引的jsp文件和日前的jsp文件生成为叁个class文件,所以jsp中的变量是足以互相会见,八个页面中应尽量防止命名冲突。
      动态include会生成三个完全差异的class文件,所以jsp中的变量不得以并行拜望。
      静态满含不能够传参
    适用途合:
      静态include不会检查所含文件的调换,适用于含有静态页面,直接将内容先包罗后管理。
      动态include总是会检查所含文件中的变化,相符用于包罗动态页面,并且能够带参数,先编写翻译之后再拓宽管理。

  ② useBean
    useBean动作(jsp页面使用javaBean的第两种方式卡塔尔(قطر‎,功用域默以为page(本页面有效卡塔尔(قطر‎
    语法: <jsp:useBean id="对象名" class="包名.类名" scope="效用范围(page/request/application/session卡塔尔"/>
    scope属性用于钦赐JavaBean实例对象所蕴藏的域范围,其取值只可以是page、request、session和application多少个值中的三个,其暗许值是page。

  ③ getProperty
    getProperty动作(name为useBean动作中的id卡塔尔.从目的中抽出属性值:
    语法: <jsp:getProperty name="javaBean对象" property="javaBean对象属性名" />

  ④ setProperty
    setProperty动作(name为useBean动作中的idState of Qatar:
    为目的设置属性值:
    语法: <jsp:setProperty name="javaBean对象" property="javaBean对象属性名" value="值"/>

  ⑤ param
    param动作:传递参数,达到跳转页面能够经过 request.getParameter("参数名"卡塔尔国形式抽取参数值
    语法: <jsp:include page="转向页面包车型地铁url" >
           <jsp:param name="参数名1" value="参数值1"></jsp:param>
           <jsp:param name="参数名2" value="参数值2"></jsp:param>
      </jsp:include>
    或者: 
      <jsp:forward page="转向页面包车型客车url">
            <jsp:param name="参数名1" value="参数值1"></jsp:param>
           <jsp:param name="参数名2" value="参数值2"></jsp:param>
      </jsp:forward>

   ⑥ forward 动作:转载页面
    语法: <jsp:forward page="login.jsp" />  也正是request.getRequestDispatcher("转发页面"卡塔尔(قطر‎.forward(request,response卡塔尔国;

   ⑦ plugin
    plugin动作:<jsp:plugin>:用于钦赐在顾客端运营的插件,有时用

JSP(三)九大内置对象
   JSP内置对象是 Web容器创立的朝气蓬勃组对象
   JSP内置对象的名目是JSP的保留字,JSP内置对象是能够直接在JSP页面使用的对象,不须要使用“new”,直接行使。
   JSP中总共预先定义了9个如此的靶子,分别为:request、response、session、application、out、pagecontext、config、page、exception。
  ①  request 对象 (功能域: 一遍倡议State of Qatar
    request 对象是 javax.servlet.httpServletRequest 类型的靶子。 该对象表示了顾客端的呼吁新闻,首要用来选取通过HTTP合同传送到服务器的多寡。(富含头音信、系统音讯、要求方式以至呼吁参数等)。request对象的功用域为叁次倡议。
   常用艺术:  
    String getParameter(String nameState of Qatar 遵照表单组件名称获取提交数据
    String[] getParameterValues(String name卡塔尔国获取表单组件对应多少个值时的诉求数据
    void setCharacterEncoding(String charsetState of Qatar 钦定每一种供给的编码
    RequestDispatcher getRequestDispatcher(String path)重返三个RequestDispatcher对象,该目标的forward( 卡塔尔国方法用于转发呼吁
    void setAttribute(String key,Object value卡塔尔国 设置键对应属性值
    Object getAttribute(String key卡塔尔 获取键对应属性值

  ②  response 对象
    response 对象是 javax.servlet.http.httpServletResponse 类型的指标。response 代表的是对客商端的响应,首假诺将JSP容器管理过的靶子传回到顾客端。response对象也许有着效能域,它只在JSP页面内行之有效。
    常用方法: 
      void sendRedirect (String location卡塔尔国将须求重新定位到叁个不等的ULacrosseL,即页面重定向

  页面包车型客车转会
  转载的机能:在七个页面人机联作进程中得以完结央浼数据的分享
  转载的贯彻:RequestDispatcher对象.forward(卡塔尔(قطر‎方法

  重定向与转变的差别
  区别一:
    重定向时浏览器上的网站更动
    转载是浏览器上的网站不变
  区别二:
    重定向实际上产生了若干回呼吁
    转载只一次号令
    重定向:发送必要-->服务器运营-->响应央浼,再次来到给浏览器三个新之处与响应码-->浏览器依据响应码,判别该响应大旨定向,自动发送贰个新的乞请给服务器,伏乞地址为事情发生前再次回到之处-->服务器运维-->响应乞请给浏览器
    转载:发送央浼-->服务器运维-->进行呼吁的再度安装,比如通过request.setAttribute(name,value卡塔尔-->依照转载的地点,获取该地方的网页-->响应乞请给浏览器
  区别三:
  重定向时的网站能够是别的网站

  转载的网站必得是本站点的网址

  转发
    转载是在劳动器端发挥功效,通过forward(卡塔尔国将送交音信在几个页面间开展传递
    客商端浏览器的地点栏不会显示出转向后的地点
    转载能够传递参数
    语法: request.getRequestDispatcher("转载网站"State of Qatar.forward(request,responseState of Qatar;
  重定向
    重定向是在顾客端发挥功用,通过诉求新之处完成页面转向
    在地点栏中得以显得转向后的地址
    重定向不能够实行参数字传送递
    语法: response.sendRedirect("重定向网站"卡塔尔;

  ③ session 对象(作用域: 三回对话卡塔尔(قطر‎
    session 对象是 javax.servlet.http.HttpSession 类型的对象。session 对象是由服务器自动创设的与顾客乞请相关的靶子。服务器为各样顾客都生成二个session对象,用于保存该客户的音讯,追踪客户的操作景况。session对象内部使用Map类来保存数据,因而保存数据的格式为 “Key/value”。 session对象的value能够使复杂的目的类型,而不只有局限于字符串类型。
    常用方法:
      void setAttribute(String key,Object value)以key/value的款式保留对象值
      Object getAttribute(String key卡塔尔 通过key获取对象值
      void invalidate(卡塔尔国 设置session对象失效
      String getId() 获取sessionid
      void setMaxInactiveInterval(int interval)设定session的非活动时间
      int getMaxInactiveInterval(State of Qatar获取session的管事非活动时间(以秒为单位卡塔尔
       void removeAttribute(String key卡塔尔从session中删除钦点名称(key卡塔尔国所对应的靶子

  ④ application 对象(作用域: 二遍服务卡塔尔国
    application 对象是 javax.servlet.ServletContext 类型的目的。application 对象可将新闻保存在服务器中,直到服务器关闭,不然application对象中保存的音讯会在任何应用中都有效。与session对象比较,application对象生命周期更加长,相通于系统的“全局变量”。
    常用方法: 
      void setAttribute(String key,Object value卡塔尔以key/value的样式保留对象值
      Object getAttribute(String key卡塔尔国 通过key获取对象值
      void removeAttribute(String name)依照属性名称删除相应的习性
      String getRealPath(String path卡塔尔(قطر‎ 返拒却对路线的真实路线
      Enumeration getAttributeNames(卡塔尔 获取所的属性名称
      String getContextPath(卡塔尔 获取当前Web应用程序的根目录
      String getInitParameter(String nameState of Qatar依照起初化参数名称,获取初叶化参数值

  ⑤ out 对象
    out 对象是 javax.servlet.jsp.JspWriter 类型的对象。out 对象用于在Web浏览器内输出音讯,而且管理应用服务器上的出口缓冲区。在应用 out 对象输出数据时,能够对数码缓冲区进行操作,及时消逝缓冲区中的余留数据,为任何的出口让出缓冲空间。待数额输出完成后,要立即关门输出流。

  ⑥ pageContext 对象
    pageContext 对象是 javax.servlet.jsp.PageContext 类型的对象。pageContext 对象的成效是赢得其余节制的参数,通过它能够赢得 JSP页面包车型客车out、request、reponse、session、application 等指标。pageContext对象的制造和开首化都以由容器来成功的,在JSP页面中得以一向利用 pageContext对象。
    常用方法: 
      void setAttribute(String key,Object value卡塔尔(قطر‎ 设置属性值
      Object getAttribute(String key卡塔尔(قطر‎ 获取属性值
      void removeAttribute(String key卡塔尔(قطر‎ 移除内定属性
      pageContext 本人也是三个域对象,能够操作其余三个域对象(request,response,application卡塔尔的多寡
    操作别的域对象的章程:
      void setAttribute(String key,Object value,int Scope)
      Object getAttribute(String key,int Scope)
      void removeAttribute(String key,int Scope)
      Scope:
        PageContext.PAGE_SCOPE;
        PageContext.REQUEST_SCOPE;
        PageContext.SESSION_SCOPE;
        PageContext.APPLICATION_SCOPE;

  ⑦ config 对象
    config 对象是 javax.servlet.ServletConfig 类型的目的。config 对象的根本意义是得到服务器的布署新闻。通过 pageConext对象的 getServletConfig(卡塔尔(قطر‎ 方法能够得到叁个config对象。当三个Servlet 初叶化时,容器把一些音讯透过 config对象传递给这些 Servlet。 开垦者能够在web.xml 文件中为应用程序意况中的Servlet程序和JSP页面提供起头化参数。   

  ⑧ page 对象(功用域: 贰个页面卡塔尔国
    page 对象是 java.lang.Object 类型的对象。page 对象表示JSP本身,独有在JSP页面内才是法定的。 page隐含对象本质上含蓄当前 Servlet接口援用的变量,相符于Java编制程序中的 thi  ⑨ exception 对象

*    exception 对象是 java.lang.Throwable 类型的靶子。exception 对象的功用是展现至极消息,独有在含蓄 isErrorPage="true" 的页面中才方可被应用,在相同的JSP页面中使用该对象将不能够编译JSP文件。
    常用方法: 
      String getMessage(卡塔尔 再次回到描述相当的新闻
      String toString(卡塔尔国 重临关于那么些的简易描述音信
      void printStackTrace(卡塔尔国 显示极度及其栈轨迹
      Throwable FillInStackTrace(卡塔尔国 重写相当的实践栈轨迹

  在页面设置协理汉语字符的字符集
    乱码管理方式后生可畏(以GET方式提交数据时)
      <%
            //读取客户名和密码
           String name = request.getParameter("name");
            //对乞求数据实行字符编码
            name = new String(name.getBytes("ISO-8859-1"), "utf-8");
             %>

    乱码处理方式二(以POST情势提交数据时)
      <%    
           //设置读取需要消息的字符编码为UTF-8
           request.setCharacterEncoding("utf-8");  
           //读取顾客名和密码
           String name = request.getParameter("name");
            String pwd = request.getParameter("pwd");
          %>

    乱码管理方式三(以GET方式交给数据时)
      <!--在汤姆cat目录构造confserver.xml中装置字符集-->
         <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
*

cookie的简介

  cookie是Web服务器保存在顾客端的意气风发两种文件音讯
  cookie的作用
    对一定目的的寻踪
    总计网页浏览次数
    简化登入
  安全质量:轻松消息外泄
  在JSP中使用cookie
    创建cookie对象
      Cookie newCookie = new Cookie(String key,Object value);
    写入cookie
      response.addCookie(newCookie);
    读取cookie
      Cookie[] cookies = request.getCookies();
    常用方法:
      void setMaxAge(int expiryState of Qatar 设置cookie的保藏期,以秒为单位
      void setValue(String valueState of Qatar在cookie创建后,对cookie进行赋值
      String getName() 获取cookie的名称
      String getValue() 获取cookie的值
      String getMaxAge(卡塔尔国 获取cookie的管用时间,以秒为单位

  Session和cookie的区分与联系
     cookie是把客户的多寡写在客商本地浏览器上, 其余网站也得以扫描使用你的cookie,轻松走漏风声自个儿网址客户的有口难分,何况经常浏览器对单个网址站点有cookie数量与大小的限量。
     Session是把顾客的数目写在顾客的独自据有session上,存款和储蓄在服务器上,日常只将session的id存款和储蓄在cookie中。但将数据存款和储蓄在服务器对服务器的工本会高。
     session是由服务器成立的,开垦人士能够在服务器上经过request对象的getsession方法得到session
     平常景色,登陆音讯等关键新闻囤积在session中,其余音信存款和储蓄在cookie中

session的兑现原理

    服务器会为每三个拜候服务器的顾客成立二个session对象,并且把session对象的id保存在当地cookie上,只要客商再度做客服务器时,带着session的id,服务器就可以同盟客户在服务器上的session,遵照session中的数据,还原顾客上次的浏览状态或提供任哪个人性化服务。

cookie与session的对比
  session
    保存在劳务器端顾客消息
    session中保存的是Object类型
    随会话的截至而将其储存的数目销毁
    保存主要的音信
  cookie
    在客商端保存顾客音信
    cookie保存的是 String类型
    cookie能够长时间保存在顾客端
    保存不首要的客户消息

---------------------------------------------------------------JSP完结-----------------------------------------------------------

下一篇:没有了