java中的Cookie是什么_第74节:Java中的Cookie和Session
第74節:第74節:Java中的Cookie和Session
ServletContext:
什么是ServletContext,有什么用哦,怎么用呢?
啟動服務器后,會給每個應用程序創建一個ServletContext,并且這個ServletContext對象只有一個。可以用于獲取全局參數,工程下的資源,和存取數據,共享數據。
例子,如何獲取全局參數,如何獲取工程下的資源,如何進行存取數據,用例子代碼進行展示。
getServletContext().getInitParams();和getServletConfig().getInitParams();
getServletContext().getRealPath()
getServletContext().getReasourceAsStream()
InputStream is = getClass().getClassLoader().getReasourceAsStream();
相對路徑和絕對路徑
getServletContext().setAttribute()
getServletContext().getAttribute()
獲取登錄成功次數
HttpServletRequest:
請求對象,用于封裝客戶端提交過來的數據或者信息。
可以獲取頭信息,提交過來的數據:
`request.getParameter("name"); // dashucoding url連接拼接
中文亂碼情況
HttpServletResponse:
響應對象,服務器要返回給客戶端的數據
跳轉頁面:
response.setStatus(302);
response.setHeader("Location","success.html");
文件下載:輸出流和輸入流的對接
下載中文名字的資源:
// index.html
Insert title here默認servlet去下載
aa.jpg
bb.txt
cc.rar
手動下載
aa.jpg
bb.txt
cc.rar
達叔.png
// Demo01.java
package com.dashucoding.servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 獲取要下載的文件名字
String fileName = request.getParameter("filename");
// 獲取這個文件在tomcat里面的絕對路徑地址
String path = getServletContext().getRealPath("download/"+fileName);
// 用于用戶下載
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
// 轉化成輸入流
InputStream is = new FileInputStream(path);
OutputStream os = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while( (len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close();
is.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
瀏覽器
// Demo01.java
package com.dashucoding.servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 獲取要下載的文件名字
String fileName = request.getParameter("filename");
// get請求有中文
//byte[] bytes = fileName.getBytes("ISO-8859-1");
//new String(bytes, "UTF-8");
fileName = new String(fileName.getBytes("ISO-8859-1"), "UTF-8");
System.out.println("fileName="+fileName);
// 獲取這個文件在tomcat里面的絕對路徑地址
String path = getServletContext().getRealPath("download/"+fileName);
// 對中文的名字進行編碼處理
// 獲取來訪客戶端的類型
String clientType = request.getHeader("User-Agent");
if (clientType.contains("Firefox")) {
fileName = DownLoadUtil.base64EncodeFileName(fileName);
}else {
fileName = URLEncoder.encode(fileName, "UTF-8");
}
// 用于用戶下載
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
// 轉化成輸入流
InputStream is = new FileInputStream(path);
OutputStream os = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while( (len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close();
is.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
// DownLoadUtil
package com.dashucoding.servlet;
import java.io.UnsupportedEncodingException;
import sun.misc.BASE64Encoder;
public class DownLoadUtil {
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
登錄
// LoginServlet
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// public void setContextType(String type)
// 設置將發送到客戶端的響應的內容類型,如果該響應尚未提交,給定內容類型可能包含字符編碼規范,例如
// text/html;charseet=UTF-8,如果在調用 getWriter之前調用此方法,則只根據給定內容類型設置響應的字符編碼
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)) {
response.getWriter().write("登錄成功");
}else {
response.getWriter().write("登錄失敗");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
// web
RequestRedirctionDemo
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
LoginServlet
LoginServlet
com.dashucoding.servlet.LoginServlet
LoginServlet
/login
// login
Insert title here賬號:
密碼:
// LoginServlet
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// public void setContextType(String type)
// 設置將發送到客戶端的響應的內容類型,如果該響應尚未提交,給定內容類型可能包含字符編碼規范,例如
// text/html;charseet=UTF-8,如果在調用 getWriter之前調用此方法,則只根據給定內容類型設置響應的字符編碼
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)) {
// response.getWriter().write("登錄成功");
response.setStatus(302);
response.setHeader("Location", "login_success.html");
}else {
response.getWriter().write("登錄失敗");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Insert title here登錄成功!!!
重定向
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// public void setContextType(String type)
// 設置將發送到客戶端的響應的內容類型,如果該響應尚未提交,給定內容類型可能包含字符編碼規范,例如
// text/html;charseet=UTF-8,如果在調用 getWriter之前調用此方法,則只根據給定內容類型設置響應的字符編碼
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)) {
// response.getWriter().write("登錄成功");
/*response.setStatus(302);
response.setHeader("Location", "login_success.html");*/
// 重定向寫法,重新定位方向
// response.sendRedirect("login_success.html");
// 請求轉發的寫法
request.getRequestDispatcher("login_success.html").forward(request, response);
}else {
response.getWriter().write("登錄失敗");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Cookie
用于自動登錄,瀏覽記錄等,是服務器給客戶端的.
Cookie cookie = new Cookie("a","b");
// 響應
response.addCookie(cookie);
獲取Cookie
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Cookie的簡單使用。
//cookie 發送給客戶端,并且保存在客戶端上的一份小數據
response.setContentType("text/html;charset=utf-8");
//發送cookie給客戶端
Cookie cookie = new Cookie("aa", "bb");
//給響應,添加一個cookie
response.addCookie(cookie);
response.getWriter().write("請求成功了...");
//獲取客戶端帶過來的cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
for (Cookie c : cookies) {
String cookieName = c.getName();
String cookieValue = c.getValue();
System.out.println(cookieName + " = "+ cookieValue);
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Cookie是一份小數據,是服務器給客戶端,存儲在客戶端上的一份小數據.
http請求是無狀態的.
在響應的時候添加Cookie
Cookie cookie = new Cookie("name", "value");
// 添加cookie
response.addCookie(cookie);
在客戶端信息里,響應頭中多了Set-Cookie
獲取客戶端帶來的Cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie c : cookies){
String cookieName = c.getName();
String cookieValue = c.getValue();
System.out.println(cookieName + " = " + cookieValue);
}
}
cookie過期
public int getMaxAge()
返回以秒為單位指定的cookie的最大生存時間.
public void setMaxAge(int expiry)
設置cookie的最大生存時間,以秒為單位.
如何顯示上次登錄時間
可以進行判斷賬號密碼,如果上次有登錄過,那么顯示上次的登錄時間.這里分兩種情況,獲取帶過來的cookie進行判斷,第一種是沒有cookie的,第一次登錄,輸出登錄成功或者失敗,然后給客戶端添加cookie,new Cookie(),第二種的登錄過的,還是要輸出登錄成功或者是失敗,獲取以前的cookie.時間戳要重置怎么理解?
package com.dashucoding.servlet;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dashucoding.util.CookieUtil;
/**
* Servlet implementation class Demo03
*/
public class Demo03 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)){
//獲取cookie last-name --- >
Cookie [] cookies = request.getCookies();
//從數組里面找出我們想要的cookie
Cookie cookie = CookieUtil.findCookie(cookies, "last");
//是第一次登錄,沒有cookie
if(cookie == null){
Cookie c = new Cookie("last", System.currentTimeMillis()+"");
c.setMaxAge(60*60); //一個小時
response.addCookie(c);
response.getWriter().write("歡迎您, "+userName);
}else{
//1. 去以前的cookie第二次登錄,有cookie
long lastVisitTime = Long.parseLong(cookie.getValue());
//2. 輸出到界面,
response.getWriter().write("歡迎您, "+userName +",上次來訪時間是:"+new Date(lastVisitTime));
//3. 重置登錄的時間
cookie.setValue(System.currentTimeMillis()+"");
response.addCookie(cookie);
}
}else{
response.getWriter().write("登陸失敗 ");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
如何顯示商品瀏覽記錄
獲取提交過來的id,把id放入到cookie里,跳轉界面.
servlet?id=1;
servlet?id=2;
獲取cookie 1
1#2
setValue("1#2");
jsp
// index.jsp
pageEncoding="ISO-8859-1"%>
Insert title here
---------1------------
---------2------------
---------3------------
瀏覽記錄
package com.dashucoding.util;
import javax.servlet.http.Cookie;
public class CookieUtil {
/**
* 從一個cookie數組中找到具體我們想要的cookie對象
* @param cookies
* @param name
* @return
*/
public static Cookie findCookie(Cookie[] cookies , String name){
if(cookies != null){
for (Cookie cookie : cookies) {
if(name.equals(cookie.getName())){
return cookie;
}
}
}
return null;
}
}
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtil.findCookie(cookies, "history");
// 如果cookie是空,表明沒有瀏覽商品
if(cookie == null){
%>
您還沒有瀏覽任何商品!
}else{
// 不是空,表明有瀏覽記錄
String[] ids = cookie.getValue().split("#");
for(String id : ids){
%>
}
}
%>
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dashucoding.util.CookieUtil;
public class ProductInfoServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtil.findCookie(cookies, "history");
if (cookie==null) {
Cookie cook = new Cookie("history", id);
cook.setMaxAge(60*60*24*7);
response.addCookie(cook);
}else{
String id2 = cookie.getValue();
cookie.setValue(id+"#"+id2);
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}
response.sendRedirect("product_info.htm");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
清除瀏覽記錄
清除cookie
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ClearHistory
*/
public class ClearHistory extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 清除cookie
Cookie c = new Cookie("history", "");
c.setMaxAge(0);
//c.setPath("/demo1");
response.addCookie(c);
response.sendRedirect("product_list.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
獲取cookie,添加cookie
request.getCookie();
response.addCookie();
Cookie分類
cookie.setMaxAge(0); // 刪除
cookie.setMaxAge(100); // 100秒
Cloneable
創建一個cookie,cookie是servlet發送到web瀏覽器中的少量信息,這些信息是由瀏覽器保存,然后發送回到服務器中.
cookie的值是唯一標識客戶端的,可以用于cookie會話管理.一個cookie擁有一個名,值,可以有一些可選屬性.但又cookie也存在一些問題.瀏覽器支持每個web服務器又20個cookie,共有300個cookie,每個限制在4KB.
安全隱患,大小與個數限制.
Session
會話,Session是基于Cookie的一種會話機制.Cookie是服務器返回一部分小數據在客戶端,存放在客戶端上.
Session是把數據存放在服務端.
interface httpsession
public interface httpSession
常用的方法
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
// 得到會話ID
session.getId();
// 存值
session.setAttribute(name, value);
// 取值
session.getAttribute(name);
// 移植
session.removeAttribute(name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
// web.xml
SessionDemo02
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
LoginServlet
LoginServlet
com.dashucoding.servlet.LoginServlet
LoginServlet
/login
// LoginServlet
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("收到請求了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
// login.jsp
pageEncoding="UTF-8"%>
Insert title here賬號:
密碼:
session創建與銷毀
創建 request.getSession();
銷毀 Redis session 存放在服務器內存中的數據
session關閉服務器銷毀
session會話時間過期
// 可以改的 conf\web.xml 有效期30分鐘
30
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
String sessionid = request.getSession().getId();
System.out.println("sessionid="+sessionid);
// cookid id -> sessionid
response.getWriter().write("收到請求了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
session分析
商品列表添加商品,點擊商品添加到購物車,到servlet.
獲取點擊商品標識id,存儲到購物車,跳轉界面.
判斷購物車是否有商品,有數量加1,沒有數量等于1.
購物車
package com.dashucoding.servlet;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CarServlet
*/
public class CarServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
// 獲取添加到購物車的商品id
int id = Integer.parseInt(request.getParameter("id"));
// cat dog big pig
String [] names = {"cat","dog","big","pig"};
// 取到id對應商品
String name = names[id];
// 獲取購物車存放東西的session
// 把一個map 對象存放到session里面去,保證只有一次
Map map = (Map) request.getSession().getAttribute("cat");
if(map == null) {
// value -> map
map = new LinkedHashMap();
request.getSession().setAttribute("cat", map);
}
// 判斷購物車里有沒有該商品
if(map.containsKey(name)) {
// 在原來基礎上 +1
map.put(name, map.get(name)+1);
}else {
map.put(name, 1);
}
response.getWriter().write("
繼續購物
");response.getWriter().write("
去購物車結算
");}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
pageEncoding="UTF-8"%>
Insert title herecat
dog
big
pig
// cart.jsp
pageEncoding="UTF-8"%>
Insert title here您的購物車商品如下:
// 獲取到map
Map map = (Map)session.getAttribute("cat");
// 遍歷
if(map != null){
for(String key : map.keySet()){
int value = map.get(key);
// key:商品名稱 value:商品名稱
//
名稱: 數量:
%>
名稱: 數量:
}
}
%>
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class ClearCartServlet
*/
public class ClearCartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
// cat購物車
session.removeAttribute("cat");
response.sendRedirect("cart.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
pageEncoding="UTF-8"%>
Insert title here您的購物車商品如下:
// 獲取到map
Map map = (Map)session.getAttribute("cat");
// 遍歷
if(map != null){
for(String key : map.keySet()){
int value = map.get(key);
// key:商品名稱 value:商品名稱
//
名稱: 數量:
%>
名稱: 數量:
}
}
%>
清空購物車
public void invalidate()
使用,會話無效,取消對任何綁定到它的對象.
// 強制干掉會話
// session.invalidate();
小結
cookie和session
Cookie
獲取上一次訪問時間,獲取瀏覽記錄,數據存放在客戶端
Session
會話技術,數據存放在服務端
setAttribute 存放數據
getAttribute 取數據
removeAttribute 移除
getSessionId() 獲取會話id
invalidate() 讓會話失效
response.addCookie(new Cookie())
request.getSession 創建
如果看了覺得不錯
點贊!轉發!
達叔小生:往后余生,唯獨有你
You and me, we are family !
90后帥氣小伙,良好的開發習慣;獨立思考的能力;主動并且善于溝通
簡書博客: 達叔小生
https://www.jianshu.com/u/c785ece603d1
結語
下面我將繼續對 其他知識 深入講解 ,有興趣可以繼續關注
小禮物走一走 or 點贊
總結
以上是生活随笔為你收集整理的java中的Cookie是什么_第74节:Java中的Cookie和Session的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 键盘按下某键 停止运行java_实现按下
- 下一篇: java输出文件中匹配的字段_Java如