Java Web框架 压力测试 栅栏 CyclicBarrier

package mvc.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

// 压力测试
public class StressTest {

  public static void main(String[] args) {
    
    // 并发线程数
    int count = 5;
    // 创建一个线程池
    ExecutorService exec = Executors.newCachedThreadPool();
    // 创建栅栏
    CyclicBarrier cb = new CyclicBarrier(count);
    
    // 模拟客户端访问
    for (int i = 1; i <= count; i++) {
      final int NO = i;
      Runnable run = new Runnable() {
        public void run() {
          try {
            // 等待
            cb.await();
            System.out.println("Thread:" + NO);
            String url_action = "http://localhost:8080/api/user_edit?user_id=" + String.valueOf(NO);
            System.out.println(url_action);
            
            URL url = new URL(url_action);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line = "";
            String result = "";
            while ((line = in.readLine()) != null) {
              result += line;
            }
            
            System.out.println("第:" + NO + " 个");
            System.out.println(result);
                        
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      };
      
      // 执行任务
      exec.execute(run);
    }
                // 关闭线程池
    exec.shutdown();
  }

}

Java Web框架 静态代码块、构造代码块、构造函数、普通代码块 执行顺序 Decompiler JD-GUI 反编译工具

1、下载jd-gui-windows-1.4.0。
http://jd.benow.ca/

2、通过jd-gui.exe查看.class文件,用于分析类编译过程。
阅读全文

Java Web框架 基础知识 FileItem 文件上传

FileItem类的常用方法:
1、boolean isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。
2、String getName()。getName方法用来获得文件上传字段中的文件名。
3、String getFieldName()。getFieldName方法用来返回表单标签的name属性的值。
4、void write(File file)。write方法将FileItem对象中的内容保存到某个指定的文件中。如果FileItem对象中的内容是保存在某个临时文件中,则该方法完成后,临时文件会被删除。该方法也可以将普通表单字段保存在一个文件中,但最主要的用途是把上传的文件内容保存在本地文件系统中。
5、String getString()。getString()方法将FileItem对象中保存的数据流内容以一个字符串返回。它有两个重载形式。getString()和getString(java.lang.String encodeing)。前者使用缺省的字符集编码将主体内容转换成字符串,后者使用参数指定的字符集编码。如果在读取普通表单字段元素的内容时,出现乱码现象,可以使用第二个方法(传入正确的字符集编码名称)。
6、String getContentType()。此方法用来获得上传文件的类型,即获得字段元素描述头属性“content-type”的值,如image/jpeg。如果FileItem对象对应的是普通的表单字段,则返回null。
7、boolean isInMemory()。判断FileItem对象封装的数据是保存在内存中还是硬盘中。
8、void delete()。此方法用来清空FileItem对象中封装的主体内容,如果内容是被保存在临时文件中,该方法会把临时文件删除。
9、InputStream getInputStream()。以流的形式返回上传文件的主体内容。
10、long getSize()。返回上传文件的大小。

Java Web框架 基础知识 Bean 容器

1、StringUtil.java

package mvc.framework.util;

import org.apache.commons.lang3.StringUtils;

// 字符串工具类
public final class StringUtil {
  // 分割固定格式的字符串
  public static String[] splitString(String str, String separator) {
    return StringUtils.splitByWholeSeparator(str, separator);
  }
  
    // 测试
  public static void main(String[] args) {
    String para = "usercode=9001&username=jzh";
    
    String[] arr = StringUtil.splitString(para, "&");
    for (String temp : arr) {
      System.out.println(temp);
    }
  }
}

2、BeanHelper.java。 阅读全文

Java Web框架 基础知识 反射 reflect Method

1、StringUtil.java。

package mvc.framework.util;

import org.apache.commons.lang3.StringUtils;

// 字符串工具类
public final class StringUtil {
  // 分割固定格式的字符串
  public static String[] splitString(String str, String separator) {
    return StringUtils.splitByWholeSeparator(str, separator);
  }
  
    // 测试
  public static void main(String[] args) {
    String para = "usercode=9001&username=jzh";
    
    String[] arr = StringUtil.splitString(para, "&");
    for (String temp : arr) {
      System.out.println(temp);
    }
  }
}

2、ReflectionUtil.java。 阅读全文