首页 文章 精选 留言 我的

精选列表

搜索[Java框架],共10000篇文章
优秀的个人博客,低调大师

Java并发-ForkJoin

主要用于并行计算中,和 MapReduce 原理类似,都是把大的计算任务拆分成多个小任务并行计算。 public class ForkJoinExample extends RecursiveTask<Integer> { private final int threhold = 5; private int first; private int last; public ForkJoinExample(int first, int last) { this.first = first; this.last = last; } @Override protected Integer compute() { int result = 0; if (last - first <= threhold) { // 任务足够小则直接计算 for (int i = first; i <= last; i++) { result += i; } } else { // 拆分成小任务 int middle = first + (last - first) / 2; ForkJoinExample leftTask = new ForkJoinExample(first, middle); ForkJoinExample rightTask = new ForkJoinExample(middle + 1, last); leftTask.fork(); rightTask.fork(); result = leftTask.join() + rightTask.join(); } return result; } } public static void main(String[] args) throws ExecutionException, InterruptedException { ForkJoinExample example = new ForkJoinExample(1, 10000); ForkJoinPool forkJoinPool = new ForkJoinPool(); Future result = forkJoinPool.submit(example); System.out.println(result.get()); }

优秀的个人博客,低调大师

Java集合小记

Collection下集合 List 是一个 有序集合,维持的顺序是元素插入的顺序, 允许元素重复 1.ArrayList: 数组,查找元素很快,但删除元素和添加元素的效率相对较差, 默认大小是 10 个元素 2.LinkedList: 双向链表,删除、添加元素的效率很高,但查找元素的的效率较差 3.Vector: 线程安全的按顺序存放的数组,大部分public方法都由synchronized修饰 Set 不与许重复元素 1. HashSet: 实现是HashMap,按照key的哈希值存储,无序 2. TreeSet: 值有序,按照元素值大小排序,实现是NavigableMap(SortedMap子类/TreeMap) 3. SortedSet接口 : 有序,自己实现 comparator方法来排序 4. LinkedHashSet: 维持的顺序是元素插入的顺序 不属于collection,但与set超有关系的... ... Map 1. HashMap : 元素无序,允许一个null key, 默认大小是 16 个元素 2. TreeMap : 使用红黑树实现 3. SortedMap接口 : 需自己实现 comparator方法实现排序 4. LinkedHashMap : 维持的顺序是元素插入的顺序 /** * The iteration ordering method for this linked hash map: <tt>true</tt> * for access-order, <tt>false</tt> for insertion-order. */ // 如果为true,则按照访问顺序;如果为false(default),则按照插入顺序。 private final boolean accessOrder; /** * 双向链表的表头元素。 */ private transient Entry<K,V> header; /** * LinkedHashMap的Entry元素。 */ // 继承HashMap的Entry元素,又保存了其上一个元素before和下一个元素after的引用 private static class Entry<K,V> extends HashMap.Entry<K,V> { Entry<K,V> before, after; …… } 5. Hashtable : 是同步的,比较慢, 几乎所有的 public 的方法都是 synchronized 的,而有些方法也是在内部通过 synchronized 代码块来实现 , 不允许有个空的 key

优秀的个人博客,低调大师

java List排序

private void sortListByPriority(List resultList) { if (null != resultList && resultList.size() > 0) { Collections.sort(resultList, new Comparator<JSONObject>() { public int compare(JSONObject p1, JSONObject p2) { int returnNum = 0; if (null != p1 && null != p2) { String priority1 = (String) p1.get("priority"); String priority2 = (String) p2.get("priority"); if (StringUtils.isNotBlank(priority1) && StringUtils.isNotBlank(priority2)) { int tempP1 = Integer.parseInt(priority1); int tempP2 = Integer.parseInt(priority2); returnNum = tempP2 - tempP1; } } return returnNum; } }); } }

优秀的个人博客,低调大师

java随机流

当我们需要在指定位置读取文件,或者写入文件时,使用普通的流读写实现是比较麻烦的,jdk为我们提供了随机流api,可以让我们在任意位置读取或写入文件内容。 public class RandomStreamTest { public static void main(String[] args) throws Exception { randomWrite(); System.out.println(randomRead()); } public static void randomWrite() throws Exception{ RandomAccessFile write = new RandomAccessFile("E:\\1.txt","rw"); write.seek(0); write.write("hello".getBytes()); write.seek(6); write.write("world".getBytes()); write.close(); } public static String randomRead() throws Exception{ RandomAccessFile read = new RandomAccessFile("E:\\1.txt","r"); read.seek(6); byte[] buf = new byte[1024]; int len = read.read(buf); String str = new String(buf,0,len); read.close(); return str; } } 对于创建RandomAccessFiledui'xia对象,第二个参数共有4种: r:只读 rw:可读可写 rws:在rw的基础上,要求对文件的内容或元数据的修改同步到底层存储设备上 rwd:在rw的基础上,要求对文件的内容的修改同步到底层存储设备上 当我们对一个超大文件进行校验的时候,我们也可以使用随机流对文件进行分段读取操作。

优秀的个人博客,低调大师

Java ServletContext 详解

ServletContext是一个获取web应用信息的对象,我们可以通过HttpRequest对象来得到它: ServletContext context = request.getSession().getServletContext(); Context Attributes 就像session对象一样,你可以存储一些属性在servlet容器里。 context.setAttribute("someValue", "aValue"); 获取到属性 Object attribute = context.getAttribute("someValue"); 存储在ServletContext中的属性可用于应用程序中的所有Servlet以及request和session之间。 这意味着,这些属性可用于Web应用程序的所有访问者。 session属性仅供单个用户使用。 ServletContext属性仍然存储在servlet容器的内存中。 这就存在与服务器群集中的session属性相同的问题。

优秀的个人博客,低调大师

Java HttpServlet 详解

javax.servlet.http.HttpServlet类是比Simple Servlet示例中显示的GenericServlet稍高级的基类。 HttpServlet类读取HTTP请求,并确定请求是否为HTTP GET,POST,PUT,DELETE,HEAD等,并调用一个相应的方法。 为了响应例如 仅HTTP GET请求,您将扩展HttpServlet类,并仅覆盖doGet()方法。 比如: public class SimpleHttpServlet extends HttpServlet { protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("<html><body>GET response</body></html>"); } } HttpServlet类也可以覆盖每个HTTP方法(GET,POST等)的方法。所有方法如下: doGet() doPost() doHead() doPut() doDelete() doOptions() doTrace() 大多数情况下,我们只想响应HTTP GET或POST请求,因此只需重写这两种方法。并且二者可以相互调用: public class SimpleHttpServlet extends HttpServlet { protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("GET/POST response"); } } 我们尽可能使用HttpServlet而不是GenericServlet。 HttpServlet比GenericServlet更容易使用,并且有更多的便捷方法。

优秀的个人博客,低调大师

Java HttpRequest 详解

HttpServlet 类需要两个参数HttpRequest和HttpResponse。比如doGet方法 protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } 那我在这先介绍HttpRequest。 HttpRequest对象的目的是代替浏览器把Http请求发送给web应用,因此,任何浏览器能发送的,HttpRequest都可以接受到。 HttpRequest对象有很多方法,这里只介绍重要的,剩余的有兴趣的话你可以自己看JavaDoc。 参数 请求参数是从浏览器连同请求一起发送的参数。 请求参数通常作为URL的一部分(在“查询字符串”中)或作为HTTP请求主体的一部分发送。 例如: www.baidu.com?param1=hello&param2=world 在这个URL中,有两个参数 param1=hello param2=world 你可以用HttpRequest访问这些参数,例如: protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { String param1 = request.getParameter("param1"); String param2 = request.getParameter("param2"); } 通常,如果浏览器发送HTTP GET请求,则参数将包含在URL中的查询字符串中。 如果浏览器发送HTTP POST请求,则参数将包含在HTTP请求的正文部分(form)中。 请求头 请求头是浏览器伴随HttpRequest发送的的一个'键值对',请求标题包含关于例如 使用什么浏览器软件,浏览器能够接收哪些文件类型等等。 我们可以使用HttpRequest对象来接受请求头: 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。这是一个例子: InputStream requestBodyInput = request.getInputStream(); 注意:在调用任何getParameter()方法之前,您必须调用此方法,因为在HTTP POST请求上调用getParameter()方法将导致servlet引擎 解析 HTTP请求主体 以 获取参数。 一旦分析完毕,就无法再以原始字节流的形式访问主体。 Session 也可以从HttpRequest对象获取Session对象。 Session对象可以在请求之间保存关于给定用户的信息。 因此,如果您在一个请求期间将对象设置为会话对象,则它可供您在同一会话时间范围内的任何后续请求和期间读取。 这里是如何获取Session对象: HttpSession session = request.getSession(); ServletContext 也可以从HttpRequest对象中获取ServletContext对象。ServletContext包含一些web应用信息。例如,能获取到web.xml文件里的一些参数,也能将request请求转发给别的Servlet,也能在ServletContext里存储一些应用参数。 这是获取ServletContext的例子: ServletContext context = request.getSession().getServletContext(); 可以看到,我们要先获取Session对象,再获取ServletContext。

优秀的个人博客,低调大师

Java RequestDispatcher 详解

RequestDispatcher 让两个servlet相互通信成为可能,就像是浏览器发送request请求一样。所以我们可以从HttpRequest中获取到RequestDispatcher对象 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher=request.getRequestDispatcher("/servlet2"); } 通过上面的代码,我们能获取到一个映射到/servlet2(URI) 的Servlet的 RequestDispatcher。 然后可以使用include()或者forward()方法来调用RequestDispatcher dispatcher.forward(request, response); dispatcher.include(request, response); request.getRequestDispatcher和response.sendRedirct区别 getRequestDispatcher是服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页。 sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页。 getRequestDispatcher实例: request.setAttribute("lover", "fantj"); request.getSession().setAttribute("lovered", "fantj"); request.getRequestDispatcher("/third?name=fantj").forward(request, response); 或 request.getRequestDispatcher("third?name=fantj").forward(request, response); 或 this.getServletContext().getRequestDispatcher("/third?name=fantj").forward(request, response); //ThirdServlet PrintWriter out = response.getWriter(); String name = request.getParameter("name"); out.println(request.getContextPath()+"<hr/>"); out.println("name="+name+"<hr/>"); out.println("lover="+request.getAttribute("lover")+"<hr/>"); out.println("lovered="+request.getSession().getAttribute("lovered")+"<hr/>"); 结果显示,地址栏信息仍为http://localhost:8080/Test/second(不变),这三种方式都可以传值到第二个Servlet。 sendRedirct实例 //SecondServlet request.setAttribute("lover", "fantj"); request.getSession().setAttribute("lovered", "fantj"); response.sendRedirect("third?name=fantj"); 或 response.sendRedirect(request.getContextPath()+"/third?name=fantj"); //ThirdServlet PrintWriter out = response.getWriter(); String name = request.getParameter("name"); out.println(request.getContextPath()+"<hr/>"); out.println("name="+name+"<hr/>"); out.println("lover="+request.getAttribute("lover")+"<hr/>"); out.println("lovered="+request.getSession().getAttribute("lovered")+"<hr/>"); 结果显示,地址栏信息变为http://localhost:8080/Test/third?name=fantj(发生改变),只有request.getAttribute("lover")获取不到值,session范围及url路径后的传值在第二个Servlet都可以获取到值。 总结 其实我们好好想想,他们需要建立的对象不同,一个是request一个是response。 request处理可以想象成帮用户再补充一些请求(根据自己项目的业务逻辑),所以它应该要获取到所有request发送过来的数据,并且让用户感觉不到我们有帮他处理一些事情(因为地址栏信息不变)。 response可以说是响应给用户一个新的东西,它不会在意request给它发送了什么参数,除非request把数据写在同一个容器下的session中或者url中。这也是response.sendRedirct可以给用户返回容器以外的URL(比如www.baidu.com)的原因。

优秀的个人博客,低调大师

Java HttpResponse 详解

HttpServlet 类需要两个参数HttpRequest和HttpResponse。比如doGet方法 protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } 我在这先介绍HttpResponse。 HttpResponse对象的目的是为了响应浏览器发送给Web应用程序的HTTP请求,表示Web应用程序发送回浏览器的HTTP响应。 HttpResponse对象有很多方法,我会介绍这里最常用的方法。如果你有兴趣其他方法你可以在JavaDoc中阅读。 Writing HTML 你能获取PrintWriter从HttpResponse对象中然后发送html到浏览器。这是个例子: PrintWriter writer = response.getWriter(); writer.write("<html><body>GET/POST response</body></html>"); Headers HttpRequest对象可以获取请求头,那么HttpResponse必须设置这些参数。例如: response.setHeader("Header-Name", "Header Value"); Content-Type 这个请求头是响应给浏览器说明发送的内容类型。例如,HTML的内容类型是text/html。例如: response.setHeader("Content-Type", "text/html"); 写文本 您可以编写文本回浏览器而不是HTML, response.setHeader("Content-Type", "text/plain"); PrintWriter writer = response.getWriter(); writer.write("This is just plain text"); Content-Length Content-Length告诉浏览器你的响应信息是多少个字节 response.setHeader("Content-Length", "31642"); 写二进制数据 你也能写二进制数据给浏览器,例如,你能发送一个图片、pdf文件等。 这样的话,contentType 应该是 image/png。 为了发送二进制数据,你就不能从response.gtWriter()方法中获取Writer了,因为它只是发送text类型的。 你能用OutputStream 从response.getOutputStream()方法中获取 输出流。例如: OutputStream outputStream = response.getOutputStream(); outputStream.write(...); URL重定向 你可以从servlet从其中重定向一个不同的URL发送给浏览器,当重定向的时候不能发送任何数据。例如: response.sendRedirect("http://www.baidu.com");

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册