From e141e8b08003575fc9e031c1930e73e2e01bc190 Mon Sep 17 00:00:00 2001 From: fantj <844072586@qq.com> Date: Sat, 18 May 2019 19:22:14 +0800 Subject: [PATCH 01/44] =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E7=BA=A0=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\217\212java\350\277\236\346\216\245.md" | 8 +++--- ...a-HttpRequest-\350\257\246\350\247\243.md" | 12 +++++---- ...-HttpResponse-\350\257\246\350\247\243.md" | 16 +++++++----- ...a-HttpServlet-\350\257\246\350\247\243.md" | 2 ++ ...a-HttpSession-\350\257\246\350\247\243.md" | 4 ++- ...estDispatcher-\350\257\246\350\247\243.md" | 10 ++++--- ...ervlet-Cookie-\350\257\246\350\247\243.md" | 10 ++++--- ...ervlet-Filter-\350\257\246\350\247\243.md" | 4 ++- ...ervlet-Filter-\350\257\246\350\247\243.md" | 14 +++++----- ...15\347\275\256\350\257\246\350\247\243.md" | 10 ++++--- .../Java-Servlet-\350\257\246\350\247\243.md" | 22 +++++++++------- ...ervletContext-\350\257\246\350\247\243.md" | 4 ++- ...66\345\217\221\351\227\256\351\242\230.md" | 2 ++ ...15\345\260\204\346\225\231\347\250\213.md" | 9 ++++--- ...50\346\200\201\344\273\243\347\220\206.md" | 11 +++++--- ...75\345\222\214\351\207\215\350\275\275.md" | 19 ++++++++------ ...345\260\204---\345\255\227\346\256\265.md" | 15 ++++++----- ...345\260\204---\346\225\260\347\273\204.md" | 16 ++++++------ ...204---\346\226\271\346\263\225-Methods.md" | 11 ++++---- ...04\351\200\240\345\207\275\346\225\260.md" | 13 +++++----- ...345\260\204---\346\263\233\345\236\213.md" | 11 ++++---- ...345\260\204---\346\263\250\350\247\243.md" | 15 ++++++----- ...65\345\222\214\346\226\271\346\263\225.md" | 10 +++---- ...--\347\261\273\345\257\271\350\261\241.md" | 25 +++++++++--------- ...216\267\345\217\226Getters-and-Setters.md" | 5 ++-- ...\226\347\250\213----Atomic\345\214\205.md" | 16 ++++++------ ...50\347\232\204\345\216\237\347\220\206.md" | 26 +++++++++---------- ...11\345\205\250\351\227\256\351\242\230.md" | 8 +++--- ...45\217\257\351\207\215\345\205\245Lock.md" | 12 ++++----- ...le\345\205\263\351\224\256\345\255\227.md" | 12 ++++----- ...10\347\272\247\350\256\276\345\256\232.md" | 8 +++--- ...33\345\273\272\346\226\271\345\274\217.md" | 16 ++++++------ ...00\357\274\211\346\246\202\350\277\260.md" | 12 +++++---- ...211\344\272\213\345\212\241Transaction.md" | 4 ++- ...36\345\210\240\346\224\271\346\237\245.md" | 14 +++++----- ...23\345\205\203\346\225\260\346\215\256.md" | 15 ++++++----- ...21\345\261\225\345\216\206\347\250\213.md" | 10 ++++--- ...aredStatement-\350\257\246\350\247\243.md" | 18 +++++++------ ...07\347\250\213\350\260\203\347\224\250.md" | 16 +++++++----- ...351\207\217\345\244\204\347\220\206sql.md" | 8 +++--- ...\211ResultSet-\350\257\246\350\247\243.md" | 16 +++++++----- .../UDP\345\215\217\350\256\256.md" | 2 +- 42 files changed, 275 insertions(+), 216 deletions(-) diff --git "a/Centos\345\256\211\350\243\205\345\267\245\345\205\267\346\226\207\351\233\206/redis\345\256\211\350\243\205\344\273\245\345\217\212java\350\277\236\346\216\245.md" "b/Centos\345\256\211\350\243\205\345\267\245\345\205\267\346\226\207\351\233\206/redis\345\256\211\350\243\205\344\273\245\345\217\212java\350\277\236\346\216\245.md" index c176769..e0291c8 100644 --- "a/Centos\345\256\211\350\243\205\345\267\245\345\205\267\346\226\207\351\233\206/redis\345\256\211\350\243\205\344\273\245\345\217\212java\350\277\236\346\216\245.md" +++ "b/Centos\345\256\211\350\243\205\345\267\245\345\205\267\346\226\207\351\233\206/redis\345\256\211\350\243\205\344\273\245\345\217\212java\350\277\236\346\216\245.md" @@ -1,9 +1,9 @@ -###1.什么是redis +### 1.什么是redis >Redis是一个开源的使用ANSI [C语言](https://baike.baidu.com/item/C%E8%AF%AD%E8%A8%80)编写、支持网络、可基于内存亦可持久化的日志型、Key-Value[数据库](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93),并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。 -###2.redis用在什么场景 +### 2.redis用在什么场景 简括四个字:读多写少 -###3.Redis安装(Linux) +### 3.Redis安装(Linux) http://download.redis.io/releases/redis-4.0.2.tar.gz ``` $ wget http://download.redis.io/releases/redis-4.0.2.tar.gz @@ -11,7 +11,7 @@ $ tar xzf redis-4.0.2.tar.gz $ cd redis-4.0.2 $ make ``` -###4.redis启动 +### 4.redis启动  启动成功界面:  diff --git "a/Java-Servlet/Java-HttpRequest-\350\257\246\350\247\243.md" "b/Java-Servlet/Java-HttpRequest-\350\257\246\350\247\243.md" index 30d9ac4..3187f45 100644 --- "a/Java-Servlet/Java-HttpRequest-\350\257\246\350\247\243.md" +++ "b/Java-Servlet/Java-HttpRequest-\350\257\246\350\247\243.md" @@ -1,3 +1,5 @@ +本问翻译自:http://tutorials.jenkov.com/java-servlets/index.html + HttpServlet 类需要两个参数HttpRequest和HttpResponse。比如doGet方法 ``` protected void doGet( @@ -12,7 +14,7 @@ HttpRequest对象的目的是代替浏览器把Http请求发送给web应用, HttpRequest对象有很多方法,这里只介绍重要的,剩余的有兴趣的话你可以自己看JavaDoc。 -#####参数 +##### 参数 请求参数是从浏览器连同请求一起发送的参数。 请求参数通常作为URL的一部分(在“查询字符串”中)或作为HTTP请求主体的一部分发送。 例如: ``` www.baidu.com?param1=hello¶m2=world @@ -34,7 +36,7 @@ protected void doGet(HttpServletRequest request,HttpServletResponse response) ``` 通常,如果浏览器发送HTTP GET请求,则参数将包含在URL中的查询字符串中。 如果浏览器发送HTTP POST请求,则参数将包含在HTTP请求的正文部分(form)中。 -#####请求头 +##### 请求头 请求头是浏览器伴随HttpRequest发送的的一个'键值对',请求标题包含关于例如 使用什么浏览器软件,浏览器能够接收哪些文件类型等等。 我们可以使用HttpRequest对象来接受请求头: @@ -43,7 +45,7 @@ String contentLength = request.getHeader("Content-Length"); ``` Content-Length头包含在HTTP请求正文中发送的字节数,以防浏览器发送HTTP POST请求。 如果浏览器发送HTTP GET请求,则不使用Content-Length标头,并且上述代码将返回null。 -#####输入流 +##### 输入流 如果浏览器发送HTTP POST请求,请求参数和其他潜在数据将发送到HTTP请求正文中的服务器。 它不一定是在HTTP请求主体中发送的请求参数。 它可能几乎是任何数据,如文件或SOAP请求(Web服务请求)。 为了可以访问HTTP POST请求的主题内容,我们可以用inputStream。这是一个例子: @@ -52,7 +54,7 @@ InputStream requestBodyInput = request.getInputStream(); ``` 注意:在调用任何getParameter()方法之前,您必须调用此方法,因为在HTTP POST请求上调用getParameter()方法将导致servlet引擎 解析 HTTP请求主体 以 获取参数。 一旦分析完毕,就无法再以原始字节流的形式访问主体。 -#####Session +##### Session 也可以从HttpRequest对象获取Session对象。 Session对象可以在请求之间保存关于给定用户的信息。 因此,如果您在一个请求期间将对象设置为会话对象,则它可供您在同一会话时间范围内的任何后续请求和期间读取。 @@ -61,7 +63,7 @@ Session对象可以在请求之间保存关于给定用户的信息。 因此, ``` HttpSession session = request.getSession(); ``` -#####ServletContext +##### ServletContext 也可以从HttpRequest对象中获取ServletContext对象。ServletContext包含一些web应用信息。例如,能获取到web.xml文件里的一些参数,也能将request请求转发给别的Servlet,也能在ServletContext里存储一些应用参数。 这是获取ServletContext的例子: diff --git "a/Java-Servlet/Java-HttpResponse-\350\257\246\350\247\243.md" "b/Java-Servlet/Java-HttpResponse-\350\257\246\350\247\243.md" index b136276..6ecc4e2 100644 --- "a/Java-Servlet/Java-HttpResponse-\350\257\246\350\247\243.md" +++ "b/Java-Servlet/Java-HttpResponse-\350\257\246\350\247\243.md" @@ -1,3 +1,5 @@ +本问翻译自:http://tutorials.jenkov.com/java-servlets/index.html + HttpServlet 类需要两个参数HttpRequest和HttpResponse。比如doGet方法 ``` protected void doGet( @@ -11,7 +13,7 @@ HttpResponse对象的目的是为了响应浏览器发送给Web应用程序的HT HttpResponse对象有很多方法,我会介绍这里最常用的方法。如果你有兴趣其他方法你可以在JavaDoc中阅读。 -####Writing HTML +#### Writing HTML 你能获取PrintWriter从HttpResponse对象中然后发送html到浏览器。这是个例子: ``` @@ -19,19 +21,19 @@ PrintWriter writer = response.getWriter(); writer.write("
GET/POST response"); ``` -####Headers +#### Headers HttpRequest对象可以获取请求头,那么HttpResponse必须设置这些参数。例如: ``` response.setHeader("Header-Name", "Header Value"); ``` -####Content-Type +#### Content-Type 这个请求头是响应给浏览器说明发送的内容类型。例如,HTML的内容类型是text/html。例如: ``` response.setHeader("Content-Type", "text/html"); ``` -####写文本 +#### 写文本 您可以编写文本回浏览器而不是HTML, ``` response.setHeader("Content-Type", "text/plain"); @@ -39,12 +41,12 @@ response.setHeader("Content-Type", "text/plain"); PrintWriter writer = response.getWriter(); writer.write("This is just plain text"); ``` -####Content-Length +#### Content-Length Content-Length告诉浏览器你的响应信息是多少个字节 ``` response.setHeader("Content-Length", "31642"); ``` -####写二进制数据 +#### 写二进制数据 你也能写二进制数据给浏览器,例如,你能发送一个图片、pdf文件等。 这样的话,contentType 应该是 image/png。 @@ -55,7 +57,7 @@ OutputStream outputStream = response.getOutputStream(); outputStream.write(...); ``` -####URL重定向 +#### URL重定向 你可以从servlet从其中重定向一个不同的URL发送给浏览器,当重定向的时候不能发送任何数据。例如: ``` diff --git "a/Java-Servlet/Java-HttpServlet-\350\257\246\350\247\243.md" "b/Java-Servlet/Java-HttpServlet-\350\257\246\350\247\243.md" index 39ccabf..db84864 100644 --- "a/Java-Servlet/Java-HttpServlet-\350\257\246\350\247\243.md" +++ "b/Java-Servlet/Java-HttpServlet-\350\257\246\350\247\243.md" @@ -1,3 +1,5 @@ +本问翻译自:http://tutorials.jenkov.com/java-servlets/index.html + javax.servlet.http.HttpServlet类是比Simple Servlet示例中显示的GenericServlet稍高级的基类。 HttpServlet类读取HTTP请求,并确定请求是否为HTTP GET,POST,PUT,DELETE,HEAD等,并调用一个相应的方法。 diff --git "a/Java-Servlet/Java-HttpSession-\350\257\246\350\247\243.md" "b/Java-Servlet/Java-HttpSession-\350\257\246\350\247\243.md" index 8ff0830..248cea3 100644 --- "a/Java-Servlet/Java-HttpSession-\350\257\246\350\247\243.md" +++ "b/Java-Servlet/Java-HttpSession-\350\257\246\350\247\243.md" @@ -1,3 +1,5 @@ +本问翻译自:http://tutorials.jenkov.com/java-servlets/index.html + HttpSession 是一个用户的session。session包含了用户信息。 当用户第一次访问网站时,有一个唯一的ID明确他的身份,这个ID保存在cookie或者一个请求参数里。 @@ -22,7 +24,7 @@ String userName = (String) session.getAttribute("userName"); ``` 这些session是保存在servlet容器中。 -####session丢失问题处理 +#### session丢失问题处理 当我们的网站有多个不通的项目服务时,用户请求别的项目服务会存在session找不到的问题,有几个######解决办法: 1. 不使用session。 2. 将session保存到数据库,然后别的服务来获取。 diff --git "a/Java-Servlet/Java-RequestDispatcher-\350\257\246\350\247\243.md" "b/Java-Servlet/Java-RequestDispatcher-\350\257\246\350\247\243.md" index dac7e35..ab64532 100644 --- "a/Java-Servlet/Java-RequestDispatcher-\350\257\246\350\247\243.md" +++ "b/Java-Servlet/Java-RequestDispatcher-\350\257\246\350\247\243.md" @@ -1,3 +1,5 @@ +本问翻译自:http://tutorials.jenkov.com/java-servlets/index.html + RequestDispatcher 让两个servlet相互通信成为可能,就像是浏览器发送request请求一样。所以我们可以从HttpRequest中获取到RequestDispatcher对象 ``` protected void doPost(HttpServletRequest request, HttpServletResponse response) @@ -16,10 +18,10 @@ dispatcher.forward(request, response); dispatcher.include(request, response); ``` -###request.getRequestDispatcher和response.sendRedirct区别 +### request.getRequestDispatcher和response.sendRedirct区别 * getRequestDispatcher是服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页。 * sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页。 -######getRequestDispatcher实例: +###### getRequestDispatcher实例: ``` request.setAttribute("lover", "fantj"); request.getSession().setAttribute("lovered", "fantj"); @@ -41,7 +43,7 @@ dispatcher.include(request, response); ``` 结果显示,地址栏信息仍为http://localhost:8080/Test/second(不变),这三种方式**都可以传值**到第二个Servlet。 -#####sendRedirct实例 +##### sendRedirct实例 ``` //SecondServlet request.setAttribute("lover", "fantj"); @@ -62,7 +64,7 @@ dispatcher.include(request, response); ``` 结果显示,地址栏信息变为http://localhost:8080/Test/third?name=fantj(发生改变),只有request.getAttribute("lover")获取不到值,session范围及url路径后的传值在第二个Servlet都可以获取到值。 -######总结 +###### 总结 其实我们好好想想,他们需要建立的对象不同,一个是request一个是response。 **request**处理可以想象成帮用户再补充一些请求(根据自己项目的业务逻辑),所以它应该要获取到所有request发送过来的数据,并且让用户感觉不到我们有帮他处理一些事情(因为地址栏信息不变)。 diff --git "a/Java-Servlet/Java-Servlet-Cookie-\350\257\246\350\247\243.md" "b/Java-Servlet/Java-Servlet-Cookie-\350\257\246\350\247\243.md" index 548d385..f349e27 100644 --- "a/Java-Servlet/Java-Servlet-Cookie-\350\257\246\350\247\243.md" +++ "b/Java-Servlet/Java-Servlet-Cookie-\350\257\246\350\247\243.md" @@ -1,8 +1,10 @@ +本问翻译自:http://tutorials.jenkov.com/java-servlets/index.html + HTTP Cookies是Web应用程序可以存储在访问Web应用程序的用户的客户机上的一小部分数据。 通常最多4千字节的数据。我将解释如何设置,读取和删除Java Servlet(或JSP)内部的Cookie。 为什么有个或JSP呢,因为Jsp其实是Servlet演变来的,它具备Servlet的所有性质。但是它偏向于做模版引擎。 -###Java Cookie 示例 +### Java Cookie 示例 你能用HttpServletResponse对象来设置cookie。 ``` @@ -12,7 +14,7 @@ response.addCookie(cookie); ``` 这个cookie通过name:myCookie;value:myCookieValue。被识别和鉴定。它的name属性必须是唯一,就像哈希地址一样。只要浏览器访问Web应用程序,它就会将存储在客户机上的Cookie提交给Web应用程序。 仅提交访问的Web应用程序存储的Cookie。 不需要提交来自其他Web应用程序的Cookie。 -###从浏览器发送的数据中获取cookie +### 从浏览器发送的数据中获取cookie ``` Cookie[] cookies = request.getCookies(); ``` @@ -27,7 +29,7 @@ for(Cookie cookie : cookies){ } } ``` -####Cookie 的生命周期 +#### Cookie 的生命周期 cookie的生命周期是干啥用的呢,简单的说:是为了客户安全,你可以设置一个合适的生命周期来保护客户的隐私。 ``` Cookie cookie = new Cookie("uid", "123"); @@ -38,7 +40,7 @@ response.addCookie(cookie); ``` 可以看到,设置了cookie后,需要在response对象上进行添加,它会告诉浏览器。我设置的生命周期是多少,浏览器会按照这个时间对cookie做销毁处理。 -###删除cookie +### 删除cookie 删除cookie是浏览器的任务,上面说到cookie的生命周期,但是总会有一些特殊的情况。比如你想立刻删除该用户的cookie,防止他进行违法操作。那可以给它的生命周期设置为0,如果你想让用户关闭浏览器的一瞬间删掉cookie,那你就给它的生命周期赋值为-1. ``` Cookie cookie = new Cookie("uid", ""); diff --git "a/Java-Servlet/Java-Servlet-Filter-\350\257\246\350\247\243.md" "b/Java-Servlet/Java-Servlet-Filter-\350\257\246\350\247\243.md" index 2285cb5..65d2491 100644 --- "a/Java-Servlet/Java-Servlet-Filter-\350\257\246\350\247\243.md" +++ "b/Java-Servlet/Java-Servlet-Filter-\350\257\246\350\247\243.md" @@ -1,3 +1,5 @@ +本问翻译自:http://tutorials.jenkov.com/java-servlets/index.html + Servlet Filter 可以拦截所有指向服务端的请求。  @@ -69,7 +71,7 @@ throws IOException, ServletException { } ``` -###在web.xml里配置过滤器/拦截器 +### 在web.xml里配置过滤器/拦截器 ```