精华内容
下载资源
问答
  • 原因分析: ...1.当访问某个服务时,服务器突然挂掉了 2.客户端读取超时关闭了连接,这时服务器往客户端再写数据就发生了broken pipe异常 解决方案: 使用jps/jstack分析线程栈,是否有线程阻塞...

    原因分析:

    1.当访问某个服务时,服务器突然挂掉了

    2.客户端读取超时关闭了连接,这时服务器往客户端再写数据就发生了broken pipe异常

    解决方案:

    使用jps/jstack分析线程栈,是否有线程阻塞

    展开全文
  • Session

    千次阅读 多人点赞 2019-08-20 21:04:49
    文章目录1. Session 的概念2. Session 的快速入门3....4.2 浏览器不关闭,服务器关闭后,两次获取的 Session 对象是同一个吗?4.3 Session 什么时候被销毁?5. Session 的特点6. Session 与 Cookie 的区别7...

    1. Session 的概念

    服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。

    2. Session 的快速入门

    1. 获取 HttpSession 对象

      HttpSession session = request.getSession();
      
    2. 使用 HttpSession 对象

      1. 获取数据
        • Object getAttribute(String name)
      2. 存储数据
        • void setAttribute(String name, Object value)
      3. 移除数据
        • void removeAttribute(String name)
    3. Session 练习

      在 SessionDemo1 中创建 Session,在 SessionDemo2 获取 Session

      @WebServlet("/SessionDemo1")
      public class SessionDemo1 extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // 获取 Session 对象
              HttpSession session = request.getSession();
              // 存储数据
              session.setAttribute("session1","hello");
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doPost(request, response);
          }
      }
      
      @WebServlet("/SessionDemo2")
      public class SessionDemo2 extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // 获取 Session 对象
              HttpSession session = request.getSession();
              // 获取 session 数据
              Object session1 = session.getAttribute("session1");
              System.out.println(session1);
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doPost(request, response);
          }
      }
      
      

    3. Session 的原理

    在这里插入图片描述

    1. Session 的实现是依赖于 Cookie 的
    2. 在一次会话中,获取的 Session 对象是同一个

    4. Session 的细节

    4.1 浏览器关闭后,服务器不关闭,两次获取的 Session 对象是同一个吗?

    1. 默认情况下,不是同一个。

    2. 如果需要为同一个,则可以创建一个 Cookie,键为 JSESSIONID,设置最大存活时间,让 Cookie 持久化保存。

      @WebServlet("/SessionDemo3")
      public class SessionDemo3 extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // 获取 Session 对象
              HttpSession session = request.getSession();
              System.out.println(session);
      
              // 浏览器关闭后,session 也能相同
              Cookie cookie = new Cookie("JSESSIONID",session.getId());
              cookie.setMaxAge(60*60);
              response.addCookie(cookie);
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doPost(request, response);
          }
      }
      

    4.2 浏览器不关闭,服务器关闭后,两次获取的 Session 对象是同一个吗?

    不是同一个,但是要确保数据不丢失,Tomcat 自动完成以下工作:

    1. Session 的钝化:在服务器正常关闭之前,将 Session 对象序列化到硬盘上
    2. Session 的活化:在服务器启动后,将 Session 文件转化为内存中的 Session 对象。

    注意:

    1. 在 IDEA 中只能完成 Session 的钝化,但重启服务器后会删除 work 目录,由于 Session 文件存储于 work 目录中,所以无法完成 Session 的活化

    2. 但用本地的 Tomcat 部署项目是可以完成 Session 的钝化和活化的

    4.3 Session 什么时候被销毁?

    1. 服务器关闭

    2. Session 对象调用 invalidate() 方法

    3. Session 默认失效时间 30 分钟过后

      1. 选择性配置修改

        在 apache-tomcat-8.5.31\conf\web.xml 中修改

        <session-config>
        	<session-timeout>30</session-timeout>
        </session-config>
        

    5. Session 的特点

    1. Session 用于存储一次会话的多次请求的数据,存储服务器端
    2. Session 可以存储任意类型,任意大小的数据

    6. Session 与 Cookie 的区别

    1. Session 存储数据在服务器端,Cookie 存储数据在客户端
    2. Session 没有数据大小限制,Cookie 有数据大小限制
    3. Session 数据安全,Cookie 相对数据不安全

    7. 验证码登录案例

    1. 需求分析

      1. 访问带有验证码的登录页面 login.jsp
      2. 用户输入用户名,密码以及验证码
        • 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
        • 如果验证码输入有误,跳转登录页面,提示:验证码错误
        • 如果全部输入正确,则跳转到主页 success.jsp,显示:用户名,欢迎您
    2. 概要设计

      在这里插入图片描述

    3. 编码实现

      login.jsp:

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>Title</title>
      </head>
      <script>
          // 页面完成加载在能执行
          window.onload = function () {
              // 获取图片对象
              var img = document.getElementById("checkCode");
              // 获取改变图片对象
              var change = document.getElementById("change");
      
              // img 绑定单击事件
              img.onclick = function () {
                  // 加时间戳,实现切换图片
                  var date = new Date().getTime();
                  img.src = "/checkCodeServlet?time="+date;
              }
              // change 绑定单击事件
              change.onclick = function () {
                  // 加时间戳,实现切换图片
                  var date = new Date().getTime();
                  img.src = "/checkCodeServlet?time="+date;
              }
          }
      </script>
      <body>
      <form action="/LoginServlet" method="post">
          <table>
              <tr>
                  <td>用户名:</td>
                  <td><input type="text" name="username"></td>
              </tr>
              <tr>
                  <td>密码:</td>
                  <td><input type="password" name="password"></td>
              </tr>
              <tr>
                  <td>验证码:</td>
                  <td><input type="text" name="checkCode"></td>
              </tr>
              <tr>
                  <td><img id="checkCode" src="/checkCodeServlet"></td>
                  <td><a id="change" href="javascript:void(0);">看不清换一张</a></td>
              </tr>
              <tr>
                  <td colspan="2"><input type="submit" value="登录"></td>
              </tr>
          </table>
      </form>
      <div><%= request.getAttribute("checkCode_error") == null ? "" : request.getAttribute("checkCode_error")%></div>
      <div><%= request.getAttribute("up_error") == null ? "" : request.getAttribute("up_error")%></div>
      </body>
      </html>
      
      

      CheckCodeServlet:

      package com.zt.servlet;
      
      import javax.imageio.ImageIO;
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.awt.*;
      import java.awt.image.BufferedImage;
      import java.io.IOException;
      import java.util.Random;
      
      @WebServlet("/checkCodeServlet")
      public class CheckCodeServlet extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              
              int width = 100;
              int height = 50;
      
              //1.创建一对象,在内存中图片(验证码图片对象)
              BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
      
      
              //2.美化图片
              //2.1 填充背景色
              Graphics g = image.getGraphics();//画笔对象
              g.setColor(Color.PINK);//设置画笔颜色
              g.fillRect(0,0,width,height);
      
              //2.2画边框
              g.setColor(Color.BLUE);
              g.drawRect(0,0,width - 1,height - 1);
      
              String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
              //生成随机角标
              Random ran = new Random();
      
              StringBuilder stringBuilder = new StringBuilder();
              for (int i = 1; i <= 4; i++) {
                  int index = ran.nextInt(str.length());
                  //获取字符
                  char ch = str.charAt(index);//随机字符
                  stringBuilder.append(ch);
                  //2.3写验证码
                  g.drawString(ch+"",width/5*i,height/2);
              }
              // 将验证码转为 String 类型
              String s = stringBuilder.toString();
              // 将验证码存入 Session
              request.getSession().setAttribute("checkCode_session",s);
      
              //2.4画干扰线
              g.setColor(Color.GREEN);
      
              //随机生成坐标点
      
              for (int i = 0; i < 10; i++) {
                  int x1 = ran.nextInt(width);
                  int x2 = ran.nextInt(width);
      
                  int y1 = ran.nextInt(height);
                  int y2 = ran.nextInt(height);
                  g.drawLine(x1,y1,x2,y2);
              }
      
      
              //3.将图片输出到页面展示
              ImageIO.write(image,"jpg",response.getOutputStream());
      
      
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doPost(request,response);
          }
      }
      

      LoginServlet:

      package com.zt.servlet;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.servlet.http.HttpSession;
      import java.io.IOException;
      
      @WebServlet("/LoginServlet")
      public class LoginServlet extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // 1.设置 request 编码
              request.setCharacterEncoding("utf-8");
              // 2.获取参数
              String username = request.getParameter("username");
              String password = request.getParameter("password");
              String checkCode = request.getParameter("checkCode");
      
              // 3.获取生成的验证码
              HttpSession session = request.getSession();
              String checkCode_session = (String) session.getAttribute("checkCode_session");
              // 删除 checkCode_session,因为页面后退验证码图片不变
              session.removeAttribute("checkCode_session");
      
              // 4.判断用户输入验证码是否与生成的验证码一致
              // 验证码忽略大小写
              if(checkCode_session != null && checkCode_session.equalsIgnoreCase(checkCode)){
                  // 验证码一致
                  // 判断用户名和密码是否一致
                  if("张三".equals(username) && "123".equals(password)){
                      // 用户名和密码一致
                      // 存储 Session 信息
                      session.setAttribute("username",username);
                      // 重定向到 success.jsp
                      response.sendRedirect(request.getContextPath()+"/success.jsp");
                  }else {
                      // 用户名和密码不一致
                      // 存储提示信息到 request
                      request.setAttribute("up_error","用户名或密码不正确");
                      // 转发到登陆页面
                      request.getRequestDispatcher("/login.jsp").forward(request,response);
                  }
              }else {
                  // 验证码不一致
                  // 存储提示信息到 request
                  request.setAttribute("checkCode_error","验证码不正确");
                  // 转发到登陆页面
                  request.getRequestDispatcher("/login.jsp").forward(request,response);
              }
      
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doPost(request, response);
          }
      }
      
      

      success.jsp:

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
          <%= request.getSession().getAttribute("username")%>,欢迎你!
      </body>
      </html>
      
    4. 案例效果

      在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 最近发现后台服务器报错: java.io.IOException: Too many open files at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl....

    最近发现后台服务器报错:

    java.io.IOException: Too many open files
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
        at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:453)
        at java.lang.Thread.run(Thread.java:748)

    文件打开数过多最坏的情况可以使系统崩溃,到时候只能是重起服务器了。

    打开的文件过多,一般来说是由于应用程序对资源使用不当造成,比如没有及时关闭Socket或数据库连接等。但也可能应用确实需要打开比较多的文件句柄,而系统本身的设置限制了这一数量。

    解决思路:

    1.尽量把类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄.
    2.java的垃圾回收不能关闭网络连接打开的文件句柄,如果没有执行close()(例如:java.net.Socket.close())则文件句柄将一直存在,而不能被关闭.你也可以考虑设置socket的最大打开数来控制这个问题.
    3.对操作系统做相关的设置,增加最大文件句柄数量。

    思考自己的系统:

    这个问题连续出现三次,得亏是测试环境。回头搂代码发现,有一个定时刷新配置的任务,每次都会打开一个文件,用完后流没有关闭。又看了下系统的相关配置:

    tomcat配置:发现最多能够打开1000个文件

    系统配置:发现也是1000,命令:ulimit -a

    查看tomcat打开文件的数量:

    1、ps -ef |grep tomcat目录,得到PID

    2、lsof -p 1305 | wc -l,得到已经打开的数量

    发现已经打开的数量未1261个,超过了1000,导致服务停了

    其他的解决方案:

    服务器端修改:

    查看系统允许打开的最大文件数

    #cat /proc/sys/fs/file-max

    查看每个用户允许打开的最大文件数
    ulimit -a
    发现系统默认的是open files (-n) 1024,问题就出现在这里。

    在系统文件/etc/security/limits.conf中修改这个数量限制,在文件中加入内容:

    * soft nofile 65536 
    * hard nofile 65536
    
    修改完成保存,重启服务器

    另外方法:
    1.使用ps -ef |grep java (java代表你程序,查看你程序进程) 查看你的进程ID,记录ID号,假设进程ID为1305
    2.使用:lsof -p 1305 | wc -l 查看当前进程id为1305的 文件操作状况
    执行该命令出现文件使用情况为 1192
    3.使用命令:ulimit -a 查看每个用户允许打开的最大文件数
    发现系统默认的是open files (-n) 1024,问题就出现在这里。
    4.然后执行:ulimit -n 4096
    将open files (-n) 1024 设置成open files (-n) 4096

    这样就增大了用户允许打开的最大文件数

    展开全文
  • 上去看了下打出来的日志,发现报错信息一个是java.net.SocketException,一个是Java.IOException,提示打开的文件过多。 后来去查了查:说是第一个是在错误影响到基础的TCP协议时会抛出,第二个则是在错误影响到I/O...
    应用部署在一台测试机器上(Linux),最近发现服务好像挂了。上去看了下打出来的日志,发现报错信息一个是java.net.SocketException,一个是Java.IOException,提示打开的文件过多。
            后来去查了查:说是第一个是在错误影响到基础的TCP协议时会抛出,第二个则是在错误影响到I/O操作时抛出。
            原因:操作系统中打开文件的最大句柄数受限所致,常常发生在多个用户并发访问服务器时,因为为了执行每一个用户的请求,服务器都要加载很多文件(new一个socket就需要一个文件句柄),这就会导致打开文件的句柄缺乏。
            解决方法:
                    1)尽量将类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄;Java的GC不能关闭网络连接打开的文件句柄,因此如果没有执行close操作,则文件句柄将一直存在,而不能 被关闭,因此也可以设置socket的最大打开数去控制。
                    2)对操作系统做相关的设置,增加最大文件句柄数量。
    下面是第二种方法的步骤:
    步骤:

            1)linux下输入ulimit -a命令,可查看允许打开的最大文件数等各种信息。如图所示: 

    open files这一栏默认的是1024(我的截图是修改过后的,所以变成了65536),我们需要做的就是修改这个数量。
            2)修改这个配置文件,命令:vi /etc/security/limits.conf
            3)在文件中添加以下内容:
                * soft nofile 65536 
                * hard nofile 65536 
             4)重启服务。

    展开全文
  • ajax

    万次阅读 多人点赞 2018-09-28 20:35:38
    1.1 什么是ajax: Ajax即“Asynchronous Javascript And XML”...通过在后台与服务器进行少量数据交换,Ajax可以使用网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新(无刷新...
  • 下面这段代码在程序中运行出现IOException /** * 下载线程 */ private Runnable runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { ...
  • 首先,看服务器日志,主要就是一句话: java.io.IOException: Too many open files 完整的如下: Jul 03, 2019 1:42:28 PM io.netty.channel.DefaultChannelPipeline onUnhandledInboundException WARNING: An ...
  • 今天后台服务器(Linux)tomcat应用报java.io.IOException: Too many open files 在网上查了一些资料 记录如下: 打开的文件过多,一般来说是由于应用程序对资源使用不当造成,比如没有及时关闭Socket或数据库连接等...
  • 在weblogic 集群环境中,启动受管服务器时报错 Multicast socket receive error: java.net.SocketException: Socket closed …… java.io.IOException: Invalid argument  at java.net.PlainDatagramSocketImpl...
  • java.io.IOException: Unable to establish loopback connection at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:94) at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:61) at java.security....
  • 后台服务器(Linux) 在转音源的时候 报java.io.IOException: Too many open files 在网上查了一些资料 记录如下: 打开的文件过多,一般来说是由于应用程序对资源使用不当造成,比如没有及时关闭Socket或数据库...
  • 完整错误信息:org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:396) at org.apache....
  • 报错原因是打包编译将xlsx文件解压缩导致出问题,出现的情况是偶然的,为了避免再次出席那这种问题,在pom文件中加入以下配置即可避免此问题。maven打包时如何去除不需要转码的资源文件 &lt;...
  • 首先,注册功能的实现思路是,将EditText文本框内用户输入的数值取出,接着通过post方法将取出的值发送到服务器端对应的参数上,然后服务器会进行判断,将返回值反馈给客户端,我这里服务器上返回的是一串简单的json...
  • 作者:朱金灿 ...我回忆了一下之前在服务器上做了什么动作,想到最近在服务器上安装了360杀毒,于是把360杀毒卸载了,果然就好了。360杀毒还能禁止tomcat用户启动命令行,这真是一个神奇的杀毒软件!
  • java.io.IOException: Invalid keystore format at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658) at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56...
  • 所以在学习了这部分内容后,就将其以最常见的登录过程为例整理出来,也方便跟我一样的新手能迅速学习上手。 预期效果图如下,输入手机号和密码,点击Login按钮,上传数据到服务器端进行验证,再对结果进行反馈。 ...
  • Log.d(MainActivity.TAG,"启动登录线程"); String msg = ""; try { //初始化URL URL url = new URL(LOGIN_URL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); Log.d(MainActivity....
  • TCP/IP异常 java.io.IOException

    千次阅读 2018-08-30 10:01:07
    org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer 阿里的tcp方式的健康检查为了提高性能,省去挥手交互,直接发送一个RST来终断连接,就会导致服务器端出现...
  • spring boot实现文件上传,刚开始同步实现,没有问题,后来耗时太长,改成异步实现,但是异步实现,在上传过程中发现报错,类似下面的堆栈:java.io.IOException:java.io.FileNotFoundException: /var/private/...
  • Java中 java.io.IOException: Broken pipe

    万次阅读 2020-04-30 13:07:16
    可能原因: 1、客户端请求服务器数据,服务器突然挂了; 2、客户端请求服务端数据,服务端正常返回,凡是客户端由于超时等原因断开。 原因分析: 做了压力测试,发现遇到的情况属于第二种,由于去数据库取数据的...
  • java.io.IOException: Connection reset by peer

    万次阅读 2017-07-12 16:17:56
    .IOException: Connection reset by peer,导致短信提交异常,服务端连接数不断增加 2、问题分析: 查看应用程序发现连接无异常程序报错导致连接断开,查看激活测试消息发现,客户端发送激活测试消息,服务端收...
  • 今天公司技术支持的童鞋报告一个客户的服务不工作了,紧急求助,于是远程登陆上服务器排查问题。 查看采集数据的tomcat日志,习惯性的先翻到日志的最后去查看有没有异常的打印,果然发现了好几种异常信息,但是最多...
  • java.io.IOException: Broken pipe

    千次阅读 2019-06-11 23:17:00
    将此类错误包含在另一个异常,例如java.io.IOException:Broken pipe 解决问题 其实当该异常产生的时候,对于服务端来说,并没有多少影响。因为可能是某个客户端突然中止了进程导致了该错误。但是为了程序能够...
  • 帮忙看看,自己测服务器并发量,其他的接口跑了2000个都没有问题。这个接口跑500个就抱这种错误,每次请求数据量大约从服务器拉3Kb左右 代码的主要逻辑大体上就是从两个数据表了取数据,过滤封装之后给客户端
  • java.io.IOException: recv package size -1 != 10 at org.csource.fastdfs.ProtoCommon.recvHeader(ProtoCommon.java:214) at org.csource.fastdfs.ProtoCommon.recvPackage(ProtoCommon.java:250) at org.csource....
  • 1.自己准备好公众号账号等东西,不懂的可以先百度一波2.建立请求主体,微信会从这个入口来验证,是否... import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; imp...
  • 问题原因:之前一直用root用户登录linux服务器,启动服务也是用root。后来root账号被收回了,给了一个新用户,但是用户权限有好多没有赋到,导致了这个导出功能不能用了。 问题解决:百度了下,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 256,973
精华内容 102,789
关键字:

服务器登录ioexception