Spring MVC 初体验

相信很多搞过Java的人都用过 Struts,或者转到用 Spring 框架后使用的仍然是Struts提供的MVC,那么是否想更多了解一下 Spring 本身的 MVC 呢,其实 Spring 的 MVC 还是很不错的,它×?Struts 中好的东西,还集 WebWork 的拦截器,下面来让我对 Spring MVC 作一个最简单的体验。 

称之谓简单是我觉得要去体验 Spring 的 MVC 的这个例子已经是精小到极致了,应用中没有配置ContextLoaderServlet或者ContextLoaderListener。借鉴于 Struts 的概念,这个实例中的的请求处理过程依次是/helloSpring.unmi->helloSpringController->helloSping.jsp) 阅读全文 >>

为何Java的有包名的类不能引用默认包中的类

有两个java类,源代码如下:

 //没指定包名,也就是在默认包中public class B {
  public void print(){
    System.out.println("Printed By B Class");
  }
}
 package com.unmi;
import B; //引用默认包中的B类
public class A {
  public static void main(String[] args) {
    B b = new B(); //在A中想要引用默认包中的B类
  }
}

先不说在IDE中如何编译它们以及会提示什么语法错误,只是用命令javac来编译它们,先是把它们放在同一个目录下,注意的是,虽然A.java有package unmi.com;声明,我们还是先把它放在下B.java同一目录,希望由javac命令来生成相对应的包目录。 阅读全文 >>

Log4J 输出日志时是如何获知当前方法、行号的

记得最早在项目中用Log4j的时候,也是觉得在每一个要记载日志的类中或者某个上层类中要声明一个Logger属性挺麻烦的

注(2018-06-30):本文所展示的 Log4J 如何定们位置信息可参考 Log4J 1.2.13 的源代码,新代码可能有出入。

或者

于是就写了一个自己的Logger类UnmiLogger,也就是把Log4j的Logger包装一下,直接调用Logger的日志输出方法,info、debug、warn等,只不过在UnmiLogger中把日志输出方法都改为静态的,让在别的代码中方便使用。 阅读全文 >>

运行 Think In Java中的 RMI 示例可能产生的几种异常及解决

在Think In Java里有一个示例 RMI 的代码 PerfectTime, 可是其中并没有把有些执行细节说明了,也就可以造成新手运行它会出某些异常而不知所措。下面将列出可能产生的异常,并说明解决办法,如读者在执行当中还遇到其他未列出的异常,可留言告知,吾将尽力而为。

首先把代码PerfectTime和DisplayPerfectTime 中的//colossus:2005/PerfectTime改为//localhost:2005/PerfectTime ,因为colossus为机器名,所以改为localhost指向本机,不然找不到主机colossus的。

已经用命令 RMIC 生成PerfectTime_Stub.class,并且执行了命令 rmiregistry 2005 阅读全文 >>

JAVA RMI 快速入门实例

本实例为参考多篇文章写就而成,网上及书上各类文章介绍如何使用RMI有多种实例可参考,譬如有:

1. 用命令rmiregistry启动RMI注册服务的
2. 同时创建存根(stub)和骨架(skeleton)的
3. 只创建存根类的(jdk1.2以后版本)
4. 通过RemoteRef和rmi://协议字串方式的
5. 比较少讲到的用LocateRegistry直接在代码上启动RMI注册服务的。

以上描述并非明显分类,比如,你总是可以选择用rmiregistry或者代码LocateRegistry启动RMI注册服务

下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用。

分为以下四个步骤 阅读全文 >>

你应该知道的10件关于Java 6的事情 [转]

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/mustang/beta2.html 一文中描述了你应该知道的10件关于Java 6的事情,下面总结如下

1.Web Services. 优先支持编写 XML web service 客户端程序。你可以用过简单的annotaion将你的API发布成.NET交互的web services. Mustang 添加了新的解析和 XML 在 Java object-mapping APIs中, 之前只在Java EE平台实现或者Java Web Services Pack中提供.

2.Scripting. 现在你可以在Java源代码中混入JavaScript了,这对开发原型很有有用,你也可以插入自己的脚本引擎。 阅读全文 >>

使用Lucene的两段精要代码

Lucene简介:
Lucene是一个基于Java的全文索引工具包。Lucene的发展历程:早先发布在作者自己的www.lucene.com,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:http://jakarta.apache.org/lucene/.
Jive,Eyebrows,Cocoon,Eclipse中都使用了Lucene
全文检索和数据库应用最大的不同在于:让最相关的头100条结果满足98%以上用户的需求

索引过程中可以看到:
    * 语言分析器提供了抽象的接口,因此语言分析(Analyser)是可以定制的,虽然lucene缺省提供了2个比较通用的分析器 SimpleAnalyser和StandardAnalyser,这2个分析器缺省都不支持中文,所以要加入对中文语言的切分规则,需要修改这2个分析器。或者建立自己的语言分析器 阅读全文 >>

拾谈"用最有效率的方法算出2乘以8等於几?"

这是网上流传的"变态级JAVA程序员面试32问"的其中一题(二十八题),然后下面给出来的答案是

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程序员特别喜欢问这种问题。

2 << 3

粗看似乎很在理,大致想来2<<3会是移位操作,在Java的字节码中移位指令是ishl(右移),而在CPU上的硬件指令可能就会是shl(算术右移指令)。其实不然,如果熟悉汇编语言,还考虑过编译优化,2<<3根本不会使用移位操作,而是在编译时就优化计算出16来了。

但如果是写成这样的方式(int i = 2; int j = i<<2;),又是不一样的,大家可以从代码不同写法生成的Java操作指令或汇编指令看出个端倪。 阅读全文 >>

使用JNative,在Java中传递一个C/C++结构参数到动态库中

用C++写的动态库的导出方法的代码如下:

阅读全文 >>