点点滴滴(Java)

native2ascii
    在WINDOWS平台下编写的资源文件,以GB2312方式编码,在编译时需要转码,以确保在各个平台上的正确性
    编码:
        native2ascii -encoding utf8 temp.properties ApplicationResources_zh_CN.properties
    反编码:
        native2ascii -reverse

Java取内存信息
    Runtime.getRuntime().maxMemory(); // 虚拟机可以控制的最大内存数量
    Runtime.getRuntime().totalMemory(); // 虚拟机当前已经使用的内存数量

JVM设置内存参数
    -Xms<size> set initial Java heap size 设置JVM初始化堆内存大小
    -Xmx<size> set maximum Java heap size 设置JVM最大的堆内存大小
    -Xss<size> set java thread stack size 设置JVM栈内存大小

Tomcat的java调试

    Java的调试功能是JVM自带的,
    新建debug.bat文件, 写入以下内容, 运行该文件启动Tomcat即可与Eclipse远程调试
    set JPDA_ADDRESS=8888
    set JPDA_TRANSPORT=dt_socket
    set JAVA_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n %JAVA_OPTS%
    startup

Jsp下载选项
    // attachment:作为附件下载 | inline:在线打开
    response.setHeader("Content-Disposition", "attachment; filename=/"" + fileName + "/";");
    // 一定要保证没有做过关于禁止浏览器缓存的操作
    // response.setHeader("Pragma", "No-cache");
    // response.setHeader("Cache-Control", "No-cache");
    // response.setDateHeader("Expires", 0);

Java反射判断方法有没有返回值
    method.getReturnType() == void.class // 没有返回值

Java命名规范
    PASCAL命名法, 用于类名, 每个单词的首字母大写, 例如ProductType
    CAMEL命名法, 也叫驼峰命名法, 用于变量,方法名, 首个单词的首字母小写, 其余单词的首字母大写, 例如productType

Java类修饰符(官方顺序)
    public
    protected
    private
    abstract
    static
    final
    transient
    volatile
    synchronized
    native
    strictfp
    interface

Java绘图
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = image.createGraphics();
    graphics.setColor(Color.black);
    graphics.drawLine(x1, y1, x2, y2);
    graphics.fillRect(x, y, width, height);
    graphics.drawString(string, x, y);
    // 设置字体
    Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(foneFileName)); // ttf字体文件名
    font = font.deriveFont(Font.PLAIN, 20);
    graphics.setFont(font);
    graphics.drawString(string, x, y);
    graphics.dispose(); // 完成
    ImageIO.write(image, "jpeg", new File(fileName));

Java图片缩放
    public static void scaledImage1(String src, String dest, int width, int height)
            throws Exception {
        BufferedImage srcImage = ImageIO.read(new File(src));
        BufferedImage destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        destImage.getGraphics().drawImage(srcImage, 0, 0, width, height, null);
        ImageIO.write(destImage, "jpeg", new File(dest));
    }
    public static void scaledImage2(String src, String dest, int width, int height)
            throws Exception {
        BufferedImage srcImage = ImageIO.read(new File(src));
        double ratioX = new Integer(width).doubleValue() / srcImage.getWidth();
        double ratioY = new Integer(height).doubleValue() / srcImage.getHeight();
        AffineTransformOp op =
                new AffineTransformOp(AffineTransform.getScaleInstance(ratioX, ratioY), null);
        BufferedImage destImage = op.filter(srcImage, null);
        ImageIO.write(destImage, "jpeg", new File(dest));
    }

Dom操作
    创建dom节点:
        // <users><user id="10001">Alex</user></users>
        DocumentBuilder domBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document dom = domBuilder.newDocument();
        Element usersNode = dom.createElement("users"); // <users></users>
        dom.appendChild(usersNode);
        Element userNode = dom.createElement("user"); // <user></user>
        userNode.setAttribute("id", "10001"); // <user id="10001"></user>
        userNode.appendChild(dom.createTextNode("Alex")); // <user id="10001">Alex</user>
        usersNode.appendChild(userNode);
    将dom对象保存到文件:
        // 创建文件
        String xmlFileFullPath = "d:/data/user.xml"; // 应确保存在该物理路径, 物理文件可不存在
        File xmlFile = new File(xmlFileFullPath);
        FileOutputStream fileStream = new FileOutputStream(xmlFile);
        // 创建转换器
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty("encoding", "UTF-8");
        // 创建转换源
        DOMSource source = new DOMSource(dom.getDocumentElement());
        // 创建转换目标
        StreamResult result = new StreamResult(fileStream);
        // 转换
        transformer.transform(source, result);
    遍历dom节点:
        Collection userCollection = new Collection();
        DocumentBuilder domBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        // 解析XML文件
        Document dom = domBuilder.parse(xmlFileFullPath);
        if (dom != null && dom.hasChildNodes()) {
            Node usersNode = beansConfigDom.getFirstChild(); // <users>节点
            if (usersNode != null && usersNode.hasChildNodes()) {
                // 遍历dom节点
                Node userNode = usersNode.getFirstChild(); // <user>节点
                while (userNode != null) {
                    if ("user".equals(userNode.getNodeName())) {
                        UserBean userBean = new UserBean();
                        if (userNode.hasChildNodes()) {  // <user>节点的文本
                            Node textNode = node.getFirstChild();
                            userBean.setUserName(textNode == null ? null : textNode.getNodeValue());
                        }
                        if (userNode.hasAttributes()) {  // <user>节点的id属性
                            Node attribute = node.getAttributes().getNamedItem("id");
                            userBean.setUserId(attribute == null ? null : attribute.getNodeValue());
                        }
                        userCollection.add(userBean);
                    }
                    userNode = userNode.getNextSibling(); // 下一个<user>节点
                }
            }
        }

获取工程绝对路径
    假定StrutsDemo工程下有demo.Test类
    1.Test.class.getResource("")
        得到的是当前类Test.class文件的URI目录。不包括自己!
        如: file:/d:/tomcat/webapps/StrutsDemo/WEB-INF/classes/demo/
    2.Test.class.getResource("/")
        得到的是当前的classpath的绝对URI路径。
        如: file:/d:/tomcat/webapps/StrutsDemo/WEB-INF/classes/
    3.Test.class.getClassLoader().getResource("")
        得到的也是当前ClassPath的绝对URI路径。
        如: file:/d:/tomcat/webapps/StrutsDemo/WEB-INF/classes/
    4.Thread.currentThread().getContextClassLoader().getResource("")
        得到的也是当前ClassPath的绝对URI路径。
        如: file:/d:/tomcat/webapps/StrutsDemo/WEB-INF/classes/
    5.ClassLoader.getSystemResource("")
        得到的也是当前ClassPath的绝对URI路径。
        如: file:/d:/tomcat/webapps/StrutsDemo/WEB-INF/classes/

    Web工程通过ServletContext.getRealPath("/")获取工程绝对路径
    public class MyListener implements ServletContextListener {
        private ServletContext context = null;
        public void contextInitialized(ServletContextEvent event)...{
            this.context = event.getServletContext();
            System.out.println(this.context.getRealPath("/"));
        }
        public void contextDestroyed(ServletContextEvent event){
            this.context = null;
        }
    }

Java字符编码
    String str ="汉";
    // 取得GB2312编码的字节
    byte[] bytesGB2312 = str.getBytes("GB2312");
    // 取得平台缺省编码的字节(solaris为ISO8859_1,windows为GB2312)
    byte[] bytesDefault = str.getBytes();
    // 用指定的编码将字节转换成字符串
    String newStrGB = new String(bytesGB2312, "GB2312");
    // 用平台缺省的编码将字节转换成字符串(solaris为ISO8859_1,windows为GB2312)
    String newStrDefault = new String(bytesDefault);
    // 用指定的编码从字节流里面读取字符
    InputStream in = xxx;
    InputStreamReader reader = InputStreamReader(in, "GB2312");
    char aChar = reader.read();
    
    在Tomcat中,由Request.getParameter()获取的参数,编码方式都是ISO8859_1
        在Servlet规范中,可以通过request.setCharacterEncoding("GB2312");来改变获取参数的编码方式
    JSP页面中charset的作用:
        1. JSP文件的编码方式: 在生成JAVA类时,源JSP文件中汉字的编码
        2. JSP输出流的编码方式: 在执行JSP时,往response流里面写入数据的编码方式
    在往response流里面写数据前可以调用response.setContentType()来改变写入数据的编码方式

Tomcat配置虚拟目录映射
    (Tomcat50/conf/server.xml)
    <Context path="/control" docBase="F:/control/web" debug="0" privileged="true" reloadable="true" />

Java文件操作
    try {
        streamIn = file.getInputStream();
        streamOut = new FileOutputStream(dir + "/" + fileName);
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        while ((bytesRead = streamIn.read(buffer,0,8192))!=-1) {
            streamOut.write(buffer, 0, bytesRead);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            streamIn.close();
            streamOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        file.destroy();
    }

拆分字符串
    1. StringTokenizer对于连续的分隔符如||会识别为一个分隔符
    String src = "50001|stephen||1980-12-27";
    StringTokenizer tokenizer = new StringTokenizer(src, "|");
    while(tokenizer.hasMoreTokens()) {
        System.out.println(tokenizer.nextToken());
    }
    2. split的参数是正则表达式
    String src = "50001|stephen||1980-12-27";
    String[] array = src.split("\\|");
    for(int i=0; i < array.length; i++) {
        System.out.println(array[i]);
    }

Request对象的主要方法 
    setAttribute(String name, Object obj): 设置名字为name的request的参数值
    removeAttribute(String name): 删除请求中的一个属性
    getAttribute(String name): 返回由name指定的属性值
    getAttributeNames(): 返回request对象所有属性的名字集合,结果是一个枚举的实例
    getCookies(): 返回客户端的所有Cookie对象,结果是一个Cookie数组
    getCharacterEncoding(): 返回请求中的字符编码方式
    getContentLength(): 返回请求的Body的长度
    getHeader(String name): 获得HTTP协议定义的文件头信息
    getHeaders(String name): 返回指定名字的request Header的所有值,结果是一个枚举的实例
    getHeaderNames(): 返回所以request Header的名字,结果是一个枚举的实例
    getInputStream(): 返回请求的输入流,用于获得请求中的数据
    getMethod(): 获得客户端向服务器端传送数据的方法
    getParameter(String name): 获得客户端传送给服务器端的有name指定的参数值
    getParameterNames(): 获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
    getParameterValues(String name): 获得有name指定的参数的所有值
    getProtocol(): 获取客户端向服务器端传送数据所依据的协议名称
    getQueryString(): 获得查询字符串(只能获取到通过GET方法请求的参数), 如: type=1&operate=0
    getRequestURL(): 获取绝对请求地址, 如: http://127.0.0.1/user/test.jsp
    getRequestURI(): 获取相对请求地址, 如: /user/test.jsp
    getLocalAddr(): 获取服务端的IP地址
    getLocalName():
    getRemoteAddr(): 获取客户端的IP地址
    getRemoteHost(): 获取客户端的名字
    getSession([Boolean create]): 返回和请求相关Session
    getServerName(): 获取服务器的名字
    getServerPort(): 获取服务器的端口号
    getServletPath(): 获取客户端所请求的脚本文件的路径

获取客户端IP
    /*
     * 获取用户IP: request.getRemoteAddr(), 这种方法在大部分情况下都是有效的。
     * 但是在用户使用了Apache,Squid等反向代理软件的情况下,
     * 用户访问某页面, 其实并不是用户浏览器真正访问到了服务器上的页面文件,
     * 而是先由代理服务器去访问页面文件, 再将访问到的结果返回给用户的浏览器,
     * 因此getRemoteAddr()获取到的实际上是代理服务器的IP, 并不是用户真实IP。
     * 但是在转发请求的HTTP头信息中, 增加了类似于x-forwarded-for的信息,
     * 用以跟踪原来的客户端IP地址
     */
    String ip = request.getHeader("x-forwarded-for");
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getRemoteAddr();
    }

JSP文件头编码
    <%@ page contentType="text/html; charset=UTF-8" %>
    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>

随机数
    new java.util.Random().nextInt()使用当前时间即System.currentTimeMillis()作为发生器的种子
    new java.util.Random(long seed).nextInt()使用指定的seed作为发生器的种子
    取得x到y之间的随机数
        如果得到的是int或long型的随机数,则使用公式 random % x + y 取得
        如果得到的是0到1的double型随机数,则使用公式 random * (x - y + 1) + x 取得

正则表达式向左预查
    Pattern splitor = Pattern.compile("(?<!\\\\)\\|"); // 左边不为\的|
    String src = "13900000000|zhaohuihua|abc\\|123";
    String[] ary = splitor.split(src);
    System.out.println(splitor.pattern());
    for(int i = 0; i < ary.length; i++) {
        System.out.println(ary[i]);
    }
    输出:
    (?<!\\)\|
    13900000000
    zhaohuihua
    abc\|123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值