您的位置:首页 > Web前端 > JavaScript

JSP基础一

2016-09-13 20:59 459 查看

HttpservletRequest对象

该请求对象是 javax.servlet.http. HttpServletRequest 对象的一个实例。每次客户端请求一个页面时,JSP 引擎就会创建一个新的对象来表示这个请求。请求对象提供方法来获取 HTTP 标题信息,包括表单数据,cookies,HTTP 方法等。

S.N.方法 & 描述
1Cookie[] getCookies()

返回一个数组,其中包含客户端用这个请求发送的所有 Cookie 对象。
2Enumeration getAttributeNames()

返回一个枚举包含此请求可用的属性的名称。
3Enumeration getHeaderNames()

返回一个这个请求包含的所有标题名称的枚举。
4Enumeration getParameterNames()

返回一个字符串对象的枚举,该字符串对象包括包含在此请求中的参数的名称。
5HttpSession getSession()

返回与此请求相关的当前会话,或者如果该请求没有会话,那么就创建一个。
6HttpSession getSession(boolean create)

返回与这个请求相关的当前的HttpSession或,如果没有当前会话并且 create 为真,那么返回一个新的会话。
7Locale getLocale()

返回客户会接受内容的首选区域设置,基于所包含的 accept – language 标题
8Object getAttribute(String name)

作为一个对象返回指定属性的值,如果指定的名称没有属性,返回 null。
9ServletInputStream getInputStream()

使用 ServletInputStream 将请求的主体作为二进制数据检索。
10String getAuthType()

返回用于保护 servlet 的验证方案的名称,例如,“BASIC”或“SSL”,如果 JSP 没有被保护,那么返回 null
11String getCharacterEncoding()

返回在该请求内部使用的字符编码的名称。
12String getContentType()

返回该请求主体的 MIME 类型,如果不知道类型,返回 null。
13String getContextPath()

返回表示请求上下文的请求 URI 的一部分。
14String getHeader(String name)

将指定的请求标题的值作为一个字符串返回。
15String getMethod()

返回生成该请求的 HTTP 方法的名称,比如 GET,POST,或 PUT。
16String getParameter(String name)

将一个请求参数的值作为字符串返回,如果参数不存在,返回 null。
17String getPathInfo()

返回与客户端生成请求时发送的 URL 相关联的任何额外的路径信息。
18String getProtocol()

返回请求协议的名称和版本。
19String getQueryString()

返回在路径后包含在请求 URL 的查询字符串。
20String getRemoteAddr()

返回发送请求的客户端的互联网协议(IP)地址。
21String getRemoteHost()

返回发送请求的客户机的全称。
22String getRemoteUser()

如果用户已经通过身份验证,就返回发出这一请求的登录用户,如果用户没有被验证,那么返回 null。
23String getRequestURI()

从取决于 HTTP 请求首行的查询字符串的协议名称中返回请求 URL 的一部分。
24String getRequestedSessionId()

返回客户端指定的会话 ID。
25String getServletPath()

返回调用 JSP 的请求 URL 的部分。
26String[] getParameterValues(String name)

返回一个字符串对象数组,其中包含所有的给定的请求参数的值,如果参数不存在,那么返回 null。
27boolean isSecure()

返回一个布尔值表示是否使用一个安全通道发出了这个请求,比如 HTTPS。
28int getContentLength()

以字节为单位,返回请求的主体长度并通过输入流使其可用,如果长度是未知的,那么返回 -1。
29int getIntHeader(String name)

作为 int 返回指定请求标题的值。
30int getServerPort()

返回收到这个请求的端口号。


HttpServletResponse 对象

该响应对象是 javax.servlet.http.HttpServletResponse 的一个实例。正如服务器创建请求对象,它也创建了一个对象来表示客户端的响应。
S.N.方法 & 描述
1String encodeRedirectURL(String url)

将指定的 URL 编码用于 sendRedirect 方法,如果不需要编码,则返回的 URL 不变。
2String encodeURL(String url)

编码由包括会话 ID 指定的 URL,或者,如果不需要编码,返回的 URL 不变。
3boolean containsHeader(String name)

返回一个布尔值表明指定的响应标题是否已经设置。
4boolean isCommitted()

返回一个布尔值表明响应是否已经提交。
5void addCookie(Cookie cookie)

将指定的 cookie 添加到响应中。
6void addDateHeader(String name, long date)

添加一个带有给定名称和日期值的响应标题。
7void addHeader(String name, String value)

添加一个带有给定名称和值的响应标题。
8void addIntHeader(String name, int value)

添加一个带有给定名称和整数值的响应标题。
9void flushBuffer()

将缓冲区的内容强行写入到客户端。
10void reset()

清除缓冲区中的全部数据,以及状态码和标题。
11void resetBuffer()

清除响应中没有清除头或状态码的潜在的缓冲区的内容。
12void sendError(int sc)

使用指定的状态代码给客户端发送一个错误响应,并清除缓冲区。
13void sendError(int sc, String msg)

使用指定的状态给客户端发送一个错误响应。
14void sendRedirect(String location)

使用指定的重定向位置 URL 给客户端发送一个临时的重定向响应。
15void setBufferSize(int size)

为响应主体设置首选缓冲区大小。
16void setCharacterEncoding(String charset)

设置将被发送到客户端的响应的字符编码(MIME字符集)例如 UTF-8。
17void setContentLength(int len)

设置 HTTP servlet 中的响应的主体内容的长度,这种方法设置了 HTTP 内容-长度标题。
18void setContentType(String type)

如果响应尚未提交,设置要被发送到客户端的响应的内容类型。
19void setDateHeader(String name, long date)

用给定的名称和日期值设置一个响应标题。
20void setHeader(String name, String value)

用给定的名称和值设置一个响应标题。
21void setIntHeader(String name, int value)

用给定的名称和整数值设置一个响应标题。
22void setLocale(Locale loc)

如果反应尚未提交,设置响应的语言环境。
23void setStatus(int sc)

为响应设置状态码。


HTTP状态码

编码:消息:描述:
100Continue只有一部分的服务器请求已经收到,但只要没有被拒绝,客户端应该继续请求
101Switching Protocols服务器交换了协议。
200OK请求是 OK
201Created请求已经完成,新的资源被创建  
202Accepted请求被接受处理,但是处理还没有完成。
203Non-authoritative Information 
204No Content 
205Reset Content 
206Partial Content 
300Multiple Choices一个链接列表。用户可以选择一个链接然后跳转到那个位置。最多可选择 5 个地址  
301Moved Permanently请求页面已经被移到新的 url 中 
302Found请求页面暂时被移到新的 url 中 
303See Other请求页面可在不同的 url 中找到 
304Not Modified 
305Use Proxy 
306Unused该代码是在前一版本使用的。它已不再使用,但该代码保留下来了。
307Temporary Redirect请求页面被暂时移到新的url中。
400Bad Request服务器没有理解请求。
401Unauthorized请求页面需要用户名和密码
402Payment Required你还不能使用这个代码
403Forbidden不允许访问请求页面
404Not Found服务器找不到请求页面。
405Method Not Allowed在请求中指定的方法不允许使用。
406Not Acceptable服务器只能生成一个不被客户端接收的响应。
407Proxy Authentication Required在这个请求得到服务之前,你必须验证一个代理服务器。
408Request Timeout请求花费的时间比服务器准备等待的时间长。
409Conflict由于冲突请求不能实现。
410Gone请求页面不再可用。
411Length Required"内容-长度" 没有被定义。没有它服务器不会接受请求。
412Precondition Failed服务器给出给定的请求评估的前提为假。
413Request Entity Too Large服务器不会接受请求,因为请求实体太大。
414Request-url Too Long服务器不会接受请求,因为 url 太长。当你把“post”请求转换为带有很长的查询信息的“get”请求时,这种情况就会发生
415Unsupported Media Type服务器不会接受请求因为媒体类型不支持。
417Expectation Failed 
500Internal Server Error请求未完成。服务器遇到了意外情况。
501Not Implemented请求未能完成。服务器不支持所需的功能。
502Bad Gateway请求未能完成。服务器从上游服务器收到无效响应
503Service Unavailable请求未能完成。服务器暂时过载或瘫痪。
504Gateway Timeout网关超时。
505HTTP Version Not Supported服务器不支持“http 协议”版本。
设置状态码

S.N.方法 &描述
1public void setStatus ( int statusCode )

此方法设置一个任意的状态码。setStatus 方法接受一个 int(状态码)作为参数。如果你的响应包含一个特殊的状态码和文档,在实际中用 PrintWriter 返回任何内容之前一定要调用 setStatus。
2public void sendRedirect(String url)

该方法生成一个 302 响应以及一个位置标题给出新文档的 URL。
3public void sendError(int code, String message)

这种方法发送一个状态码(通常是 404)以及一个在 HTML 文档内自动格式化的短消息并发送到客户端。

表单处理

Get方法

格式:
http://www.test.com/hello?key1=value1&key2=value2
Post方法

把信息作为一个单独的消息来发送该消息,不是放在URL上面

处理表单数据:

getParameter(): 调用 request.getParameter() 方法得到一种形式参数的值。

getParameterValues():如果参数出现不止一次,那么就调用这个方法并返回多个值,例如复选框。

getParameterNames():如果你想要在当前请求下得到一个所有参数的完整的列表,那么调用这个方法。

getInputStream(): 调用这个方法读取来自客户端二进制数据流。


过滤器

在请求访问后端资源之前从客户端拦截请求。

在响应发送回客户端之前从服务器操作响应


Servlet 过滤器方法

一个过滤器是一个简单的 Java 类,实现了 javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法:
S.N.方法 & 描述
1public void doFilter (ServletRequest, ServletResponse, FilterChain)

由于客户端在链尾请求响应,每次请求/响应对通过链时,容器会调用此方法。
2public void init(FilterConfig filterConfig)

由 web 容器调用此方法,向过滤器表明它将被放置在服务中。
3public void destroy()

由 web 容器调用此方法,向过滤器表明它将从服务中被去掉。
例子

// Implements Filter class
public class LogFilter implements Filter  {
public void  init(FilterConfig config)
throws ServletException{
// Get init parameter
String testParam = config.getInitParameter("test-param");

//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void  doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException {

// Get the IP address of client machine.
String ipAddress = request.getRemoteAddr();

// Log the IP address and current timestamp.
System.out.println("IP "+ ipAddress + ", Time "
+ new Date().toString());

// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ){
/* Called before the Filter instance is removed
from service by the web container*/
}
}

在web.xml中

<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Cookies

服务器脚本向浏览器发送的一系列cookies。例如姓名、年龄、身份证号码等。

浏览器将这个信息存储在本地机器上,以供将来使用。

下次当浏览器向web服务器发送任何请求时,将这些 cookies 信息发送给服务器,服务器使用这些信息来识别用户或可能用于其他目的。


Servlet Cookies 方法

下面是与 Cookie 对象关联的有用的方法列表,你可以在 JSP 中操作 cookies 时使用:
S.N.方法 & 描述
1public void setDomain(String pattern)

此方法设置了 cookie 适用的领域,例如 tutorialspoint.com。
2public String getDomain()

此方法得到了 cookie 适用的领域,例如 tutorialspoint.com。
3public void setMaxAge(int expiry)

该方法设置了在 cookie 到期之前需要多少时间(以秒为单位)。如果你不设置这个,cookie 只持续到当前会话。
4public int getMaxAge()

该方法返回了最大持续时间的 cookie,以秒为单位指定,默认情况下,-1表示 cookie 会持续到浏览器关闭。
5public String getName()

该方法将返回 cookie 的名称。这个名字创建后不能更改。
6public void setValue(String newValue)

这个方法设置了与 cookie 相关的值。
7public String getValue()

这个方法得到了与 cookie相关的值。
8public void setPath(String uri)

该方法设置了 cookie 应用的路径。如果你不指定路径,那么与当前页面相同的目录以及子目录中的所有 URL都会返回 cookie。
9public String getPath()

该方法获取 cookie 应用的路径。
10public void setSecure(boolean flag)

此方法设置布尔值,该值表明 cookie 是否只能通过加密连接发送(例如 SSL)。
11public void setComment(String purpose)

这种方法指定了描述 cookie 目的的评论。如果浏览器向用户展示了这个 cookie,那么评论是有用的。
12public String getComment()

该方法返回描述 cookie 目的的评论,如果 cookie 没有评论,那么返回 null。


用 JSP 设置 Cookies

用 JSP 设置 Cookies 包括三个步骤:

(1) 创建一个 Cookie 对象: 用 cookie 的名称和值调用 cookie 构造函数,名称和值是字符串。
Cookie cookie = new Cookie("key","value");


记住,这个名字和值都不应该包含空格或任何以下字符:
[ ] ( ) = , " / ? @ : ;


(2) 设置最大持续时间: 使用 setMaxAge 指定 cookie 的有效期是多长时间(以秒为单位)。以下是建立了一个持续 24 小时的 cookie。
cookie.setMaxAge(60*60*24);


(3) 将 cookie 发送到 HTTP 响应标题中: 使用 response.addCookie 在 HTTP 响应标题中添加 cookies,如下所示:
response.addCookie(cookie);


用 JSP 读取 Cookies

想要读取 cookie,你需要通过调用 HttpServletRequest 的 getCookies() 方法创建一个 javax.servlet.http 数组。然后通过数组循环,使用 getName() 和 getValue() 方法来访问每个 cookie 和相关的值。


示例

让我们读取之前例子中设置的 cookies:
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with this domain
cookies = request.getCookies();
if( cookies != null ){
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ",  ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
}else{
out.println("<h2>No cookies founds</h2>");
}
%>
</body>
</html>


用 JSP 删除 Cookies

删除 cookies 非常简单。如果你想删除一个 cookie,那么你只需要按照以下三步来处理:

读取一个已经存在的 cookie 并把它保存在 Cookie 对象中。

使用 setMaxAge() 方法将 cookie 的持续时间设置为 0 来删除一个已经存在的 cookie。

将这个 cookie 添加到响应标题中。

会话跟踪

HTTP 是一个“无状态”协议,这意味着每一次客户端检索 Web 页面时,客户端打开一个单独的
Web 服务器且服务器不会自动连接任何以前的客户端请求的记录

JSP 使用 servlet 提供的 HttpSession 接口,该接口提供了一种方法来识别网站中跨多个页面请求或访问的用户,并存储用户信息。

默认情况下,JSP 为每个新的客户端自动的启用会话跟踪和一个新的被实例化的 HttpSession 对象。禁用会话跟踪需要通过设置页面指令会话属性为 false 显式地关闭它,如下所示:
<%@ page session="false" %>

S.N.方法 & 描述
1public Object getAttribute(String name)

该方法返回会话中与指定的名称绑定的对象,如果没有绑定对象名称,返回 null。
2public Enumeration getAttributeNames()

该方法返回一个字符串对象的枚举,其中包含绑定到这个会话的所有对象的名字。
3public long getCreationTime()

该方法返回创建会话的时间,自GMT时间1970年1月1日凌晨以来,以毫秒为单位。
4public String getId()

该方法返回一个字符串,其中包含分配给这个会话的唯一标识符。
5public long getLastAccessedTime()

该方法返回上次客户端发送与这个会话相关的请求的时间,自GMT时间1970年1月1日凌晨以来,毫秒的数量。
6public int getMaxInactiveInterval()

该方法返回最大时间间隔,以秒为单位,servlet 容器在客户端访问中将打开这个会话。
7public void invalidate()

这个方法使会话无效并解除全部绑定到该会话的对象。
8public boolean isNew(

如果客户端还不知道会话或如果客户选择不加入会话,这个方法返回 true。
9public void removeAttribute(String name)

该方法从会话中删除制定名称的绑定对象。
10public void setAttribute(String name, Object value) 

该方法使用指定的名称解除会话的一个对象。
11public void setMaxInactiveInterval(int interval)

在 servlet 容器使这个会话无效之前,这种方法在客户端请求之间指定了时间,以秒为单位,。


删除会话数据

当你完成了用户会话数据,你有以下几种选择:

删除一个特定的属性: 你可以调用 public void removeAttribute(String name) 方法来删除与特定的键相关的值。

删除整个会话: 你可以调用 public void invalidate() 方法来删除整个会话。

设置会话超时: 你可以调用 public void setMaxInactiveInterval(int interval) 方法分别为每个会话设置超时。

注销用户: 服务器可以支持 servlet 2.4,你可以调用 logout 来注销 Web 服务器的客户端,并使所有属于该的用户的会话无效。

web.xml 配置: 如果你使用的是 Tomcat,除了上述方法外,你还可以在 web.xml文件中设置会话超时,如下所示。
<session-config>
<session-timeout>15</session-timeout>
</session-config>

文件上传

表单 method 的属性应该设置为 POST 方法,不能使用 GET 方法。

表单 enctype 的属性应该设置为 multipart/formdata。

表单 action 的属性应该设置为一个把文件上传到后台服务器的 JSP 文件。下面的例子是使用程序uploadFile.jsp 来上传文件。

为了上传一个单一的文件,你应该使用一个带有属性type="file"的< input .../ >标签。为了允许多个文件上传,包含多个输入标签,它们带有不同的name属性的值。浏览器将浏览按钮与每个输入标签进行关
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<%
File file ;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
ServletContext context = pageContext.getServletContext();
String filePath = context.getInitParameter("file-upload");
// Verify the content type
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try{
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>JSP File upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( filePath +
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
file = new File( filePath +
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + filePath +
fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
}catch(Exception ex) {
System.out.println(ex);
}
}else{
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
}
%>

处理日期

使用 JSP 的一个最重要的优点是,你可以使用核心 Java 中所有有效的方法。使用
Java 提供的 Date类,它在 java.util 包是有效的,这个类封装了当前的日期和时间。

SN方法描述
1boolean after(Date date)

如果调用的 Date 对象包含的日期晚于指定的日期,则返回 true,否则返回 false。
2boolean before(Date date)

如果调用的 Date 对象包含的日期早于指定的日期,则返回 true,否则返回 false。
3Object clone( )

重复调用的 Date 对象。
4int compareTo(Date date)

比较调用的 Date 对象与 date 的值。如果值是相等的,则返回 0。如果调用的 Date 对象比 date 更早,则返回一个负数。如果调用 Date 对象是晚于 date 的,则返回一个正数。
5int compareTo(Object obj)

如果 obj 是 Date 类,则操作与 compareTo(Date) 是同一个,否则抛出 ClassCastException 异常。
6boolean equals(Object date)

如果调用的 Date 对象与指定的日期有相同的时间和日期,则返回 true,否则返回 false。
7long getTime( )

返回从 1970 年 1 月 1 日凌晨 0 点开始至今的毫秒数。
8int hashCode( )

返回调用对象的哈希编码
9void setTime(long time)

由指定的时间设置时间和日期,它表示从 1970 年 1 月 1 日凌晨 0 点开始到指定时间的毫秒数。
10String toString( )

转换调用的 Date 对象到 string 类型,并且返回该结果。
日期格式化

<%@ page import="java.io.*,java.util.*" %>
<%@ page import="javax.servlet.*,java.text.*" %>
<html>
<head>
<title>Display Current Date & Time</title>
</head>
<body>
<center>
<h1>Display Current Date & Time</h1>
</center>
<%
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
out.print( "<h2 align=\"center\">" + ft.format(dNow) + "</h2>");
%>
</body>
</html>


Simple DateFormat 格式化代码

指定时间格式使用一个时间模式字符串。在这个模式中,所有 ASCII 字母被保留为模式字母,它们被定义为如下:
字符描述例子
G时代指示符AD
y四位数的某年2001
M一年中的某月July or 07
d一月中的某日10
hA.M./P.M. (1~12)的某小时12
H一天 (0~23)中的某小时22
m一小时中的某分钟30
s一分钟中的某秒55
S毫秒234
E一周中的某天Tuesday
D一年中的某天360
F一月中的一周的某天2 (second Wed. in July)
w一年中的某周40
W一月中的某周1
aA.M./P.M.标记PM
k一天(1~24)中的某小时24
KA.M./P.M. (0~11)的某小时10
z时区Eastern Standard Time
'消逝的文本Delimiter
"单引号`

页面重定向

转发:request.getRequestDispatcher("/a.jsp").forward(request,response);
重定向:response.sendRediect(request.geContextPath()
+ "/a.jsp");

转发在服务器端完成的;重定向是在客户端完成的

转发的速度快;重定向速度慢

转发的是同一次请求;重定向是两次不同请求

转发不会执行转发后的代码;重定向会执行重定向之后的代码

转发地址栏没有变化;重定向地址栏有变化

转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

点击计数器

一个点击计数器告诉你关于网站某个特定页面的访问量。

<%@ page import="java.io.*,java.util.*" %>

<html>
<head>
<title>Applcation object in JSP</title>
</head>
<body>
<%
Integer hitsCount =
(Integer)application.getAttribute("hitCounter");
if( hitsCount ==null || hitsCount == 0 ){
/* First visit */
out.println("Welcome to my website!");
hitsCount = 1;
}else{
/* return visit */
out.println("Welcome back to my website!");
hitsCount += 1;
}
application.setAttribute("hitCounter", hitsCount);
%>
<center>
<p>Total number of visits: <%= hitsCount%></p>
</center>
</body>
</html>


计数器重置

如果你重新启动你的应用程序如 Web 服务器,这将重置你的应用程序变量,点击计数器将重置为零。为了避免这种损失,你可以用下面专业的方法实现点击计数器:

定义一个带有单一计数的数据库表,我们叫做点击量。设置它的值为 0。

每次点击,读取该表得到点击量的值。

点击量加 1,更新该表中的值。

显示点击计数器的新值作为总页面的点击量。

如果你想计算所有页面的点击量,对所有的页面实现上面的逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: