标签 Java 下的文章

一、生命周期 init()、service()、destory()

  1. 在第一次创建Servlet的时候通过init()初始化,之后不再执行此方法
  2. 通过service()处理HTTP请求,常用doGet()、doPost()
  3. destory()在Servlet结束时执行
    最后由JVM进行垃圾回收.

二、实现方式 implements Servlet、extends GenericServlet、extends HttpServlet

HttpServlet本身就是通过implements Servlet实现的.


三、代码示例: 通过继承HttpServlet实现Servlet


- 阅读剩余部分 -

实现Runnable接口

public class FirstThread implements Runnable {

    @Override
    public void run() {
        System.out.println("first thread run...");
    }
}

new Thread(new FirstThread().start())

继承Thread类

Thread类本身就是实现的Runnable接口: Thread implements Runnable

public class SecondThread extends Thread {

    @Override
    public void run() {
        System.out.println("second thread run...");
    }
}
new Thread(new SecondThread().start())

实现Callable接口来创建Thread线程

- 阅读剩余部分 -

package cn.gl.work;

/**
 * Created by guoli on 2017/9/9 0009.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
public class StringIndexOf {

    public int IndexOf(String source, String target) {
        char[] sources = source.toCharArray();
        char[] targets = target.toCharArray();
        int sourceCount = sources.length;
        int targetCount = targets.length;
        char first = targets[0];
        int max = sourceCount - targetCount;
        for (int i = 0; i <= max; i++) {
            //1. 第一个字符相等
            if (sources[i] != first) {
                while (++i < max && sources[i] != first) {
                    ;
                }
            }
            //2、匹配2到子串
            if (i < max) {//未到最后
                int j = i + 1;
                int end = j + targetCount - 1;
                for (int k = 1; j < end && sources[j] == targets[k]; j++, k++) {
                    ;//子串和原串截取的部分在循环对比
                }
                if (j == end) {//找到了
                    return i;
                }
            }
        }
        return -1;
    }
}

Linux下启动Tomcat报错:

ERROR:java.lang.InternalError: Can't connect to X11 window server using 'localhost:11.0' as the value of the DISPLAY variable.

查询得知是因为linux上没有启动x server。

解决办法

1、 修改tomcat/bin/catalina.sh

在所有的-Dcatalina.home="$CATALINA_HOME" /后面增加-Djava.awt.headless=true \

 -Dcatalina.home="\"$CATALINA_HOME\"" \
 -Djava.awt.headless=true  \

2、export DISPLAY=:0

通俗的解释Java的回调机制:A类调用了B类中的方法C,方法C又反过来调用了A类中的方法D,方法D就是回调方法,这个机制就叫做CallBack.

假设存在计算器类Cal、学生小明类XiaoMing以及老师测试类Tea。

处理流程

  1. 老师布置作业给小明 Question(a,b)
  2. 小明调用计算器 new Cal().add(a,b,this)
  3. 计算器计算 int result = a + b;
  4. 计算器回调小明的Answer(result)方法

1、学生类XiaoMing

public class XiaoMing {

    void Question(int a ,int b){
        new Cal().add(a,b,this);
    }
    void Answer(int result){
        System.out.println("答案是" + result);
    }
}

2、计算器类Cal

public class Cal {
    void add(int a,int b, XiaoMing xiaoMing){
        int result = a + b;
        xiaoMing.Answer(result);
    }
}

3、老师测试类Tea

public class Tea{
    public static void main(String args[]){
        new XiaoMing().Question(2,3);
    }
}

上述例子中,回调函数是Answer(),为了好理解,把学生类和计算器类耦合在一起了,假设小红XiaoHong也需要使用计算器Cal,现在的代码是无法实现的,所以在实际开发中,学生小明类XiaoMing一般是继承某个接口,且回调函数常用接口作为参数,下面的例子是改进后的。

- 阅读剩余部分 -

1、什么Class类,什么是反射

在Java中,任何一个类都是java.lang.Class类的实例对象,Class类只有Java虚拟机可以new出来。

反射指Java运行时,任意一个类都可以知道这个类的所有属性和方法;对于任意一个对象,都可以调用他的方法和属性,这种动态获取信息和动态调用对象方法的功能机制成为反射机制。

2、Class类的3种动态加载

2.1 getClass()

xxObject obj;
Class c1 = obj.getClass();

2.2 Class.forName("className")

Class c2 = Class.forName("java.util.HashMap");

注意className是类的完全限定名,且可能抛出ClassNotFoundException

2.3 T.class

Class c3 = java.util.HashMap.class;

参考资料:getClass()forName()T.class

- 阅读剩余部分 -

A. 注册并加载驱动:使用Class.forName(),驱动类就会注册到DriverManager里面并加载到内存里。
B. 用DriverManager获取连接对象:调用DriverManager.getConnnection()方法并传入数据库连接的URL,用户名及密码,就能获取到连接对象。

Connection con = null;
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/";
String username = "root";
String password = "mysql";
con = DriverManager.getConnection(url,username,password);

最后修改:2016-01-28 16:23

1、 字符串有整型的相互转换

String a = String.valueOf(2); 
int i = Integer.parseInt(a); 

2、 向文件末尾添加内容

BufferedWriter out = null;
try {
    out = new BufferedWriter(new FileWriter("filename", true));
    out.write("aString");
} catch (IOException e) {
    // error processing code 
} finally {
    if (out != null) {
        out.close();
    }
}

3、 得到当前方法的名字

String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();

- 阅读剩余部分 -

案例描述:

使用Struts2实现权限拦截,未登录用户不可以访问后台管理页面,用户已登录则显示后台管理页面。

  1. 新建Web Project,并配置Struts2相关环境
  2. 新建后台管理页面manager.jsp

为了安全manager.jsp所在位置为/WEB-INF/page/

  1. 新建用户登录页面login.jsp
<body>
    <h2>用户登录</h2>
    ${loginError }
    <form action="login.action" method="POST">
        用户名:<input type="text" name="username"> 
        密码:<input type="password" name="password"> 
           <input type="submit" value="登录">
    </form>
</body>

- 阅读剩余部分 -