1.Duplicated Code
代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。
经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题,于是总结了一下如何tomcat下配置jsp、servlet和ben,希望对那些初学者有所帮助。
一、开发环境配置
第 一步:下载j2sdk和tomcat:到sun官方站点(http://java.sun.com/j2se/1.4.2/download.html) 下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.4.2 Documentation,然后到tomcat官方站点(http://www.apache.org/dist/jakarta/tomcat- 4/)下载tomcat(下载最新4.1.x版本的tomcat);
第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可。
使用JSF, Spring, Hibernate构建一个实际的web应用
概要:
使用JSF, Spring, Hibernate构建一个实际的web应用并不是毫无意义的事情。本文向你展示了如何整合JSF, Spring和Hibernate,以及使用这些技术构建实际web应用的最佳实践和设计方针。
作者: Derek Yang Shen
翻译: rongsantang
手工写manifest.mf文件(jar命令自动生成的MANIFEST.MF文件中不会包含Main-Class属性),举例说明:
目录结构:
-src
-test
Test.class
test.Test代码:
2 public class Test {
3 public static void main(String[] args) {
4 System.out.println("HelloWorld!");
5 }
6 }
mymanifest.mf文件内容:
//该属性是创建可执行jar包必需的,指定的Main-Class为全路径类名(且该类必需有main方法)
Main-Class: test.Test
Created-By: wiflish
在src目录下执行:
在命令行执行java -jar test.jar就会得到输出HelloWorld!
这时就完成了基本的创建可执行的jar包。
2、创建要依赖其他包的可执行jar包。
这时只要更改mymanifest.mf文件加入:
//该属性是创建可执行jar包必需的,指定的Main-Class为全路径类名(且该类必需有main方法)
Main-Class: test.Test
//该属性指定依赖包的路径(路径是相对jar包所在路径)
Class-Path: lib/swing-layout-1.0.jar //这里举例说明,随便用的包
Created-By: wiflish
目录结构:
-test
TestDepends.class //假设该类执行依赖于 swing-layout-1.0.jar,具体代码略。
testDepends.jar
-lib
swing-layout-1.0.jar
双击testDepends.jar就能正确执行,如果TestDepends.jar包所在的当前目录下没有lib/swing-layout-1.0.jar的话,如下目录结构:
-test
TestDepends.class //假设该类执行依赖于 swing-layout-1.0.jar,具体代码略。
testDepends.jar
在命令行执行 java -jar testDepends.jar,就会得到找不到TestDepends.class中所依赖的类的错误.
为动态编译的语言(例如 Java)编写和解释性能评测,要比为静态编译的语言(例如 C 或 C++)编写困难得多。在这期的 Java 理论与实践 中,Brian Goetz 介绍了动态编译使性能测试复杂的诸多原因中的一些。请在本文附带的讨论组上与作者和其他读者分享您对本文的看法。 (您也可以选择本文顶部或底部的 讨论 访问论坛。)
http://www.ibm.com/developerworks/cn/java/j-jtp12214/
package word;2

3
import java.io.FileOutputStream;4
import java.io.InputStream;5
import java.net.HttpURLConnection;6

7
public class FileRead {8

9
public static void main(String[] args) {10
java.net.URL urlfile = null; 11
HttpURLConnection httpUrl = null; 12

13
try {14

15
// 连接指定的网络资源,获取网络输入流16
urlfile = new java.net.URL(17
"http://10.142.202.12/ftp/Y0131000000168/D0011000006537.jpg");18
httpUrl = (HttpURLConnection) urlfile.openConnection();19
httpUrl.connect();20
int bytesum = 0;21
int byteread = 0;22
InputStream inStream = httpUrl.getInputStream();23
FileOutputStream fs = new FileOutputStream("c:/1.jpg");24
byte[] buffer = new byte[1444];25
while ((byteread = inStream.read(buffer)) != -1) {26
bytesum += byteread;27
fs.write(buffer, 0, byteread);28
} 29
30
} catch (Exception e) {31

32
} 33
}34
}35

我们一直做httpserver的时候,请求返回html文件的时候,都是得到一个PrintWriter对象,然后在
out.println("<HTML>");
out.println("<HEAD><TITLE>Demo<TITLE><HEAD>");
out.println("<BODY>");
out.println("<H1>Demo Header<H1>");
out.println("<H3>Sub Header:<H3>");
out.println("<FONT SIZE=\"+1\" FACE=\"Times\" COLOR=\"#FFFFFF">);
out.println("The big dog & the little cat chased each other.");
out.println("<FONT>");
out.println("<BODY>");
out.println("<HTML>");
如果返回的html文件中包含的内容比较少,这样做还是可以的.不过一直用out.println,大家没觉得有点太过于陈旧,一直用一种方法.
今天上apache的网站,发现Jakarta ECS可以直接生成一个html对象(在java中一切皆为对象),用起来也是比较简单的.在apache网站中介绍Jakarta ECS(由于本人e文不怎么好,不能给大家翻译)
The Element Construction Set is a Java API for generating elements for various markup languages it directly supports HTML 4.0 and XML, but can easily be extended to create tags for any markup language. It is designed and implemented by Stephan Nagy and Jon S. Stevens.
其实,我们看一个java的第三方jar,重要的是去看的api,看的方法是怎么用以及知道这个jar是用来干什么的.
我把jar包以及api下载了,下载地址:http://apache.mirrors.hoobly.com/jakarta/ecs/binaries/ecs-1.4.2.tar.gz,这里面包括jar以及api.
下载后把jar放到eclipse下,相信导入一个jar到一个工程中大家都应该知道了,牛刀小试.
package ECS;
import org.apache.ecs.HtmlColor;
import org.apache.ecs.html.Body;
import org.apache.ecs.html.Font;
import org.apache.ecs.html.H1;
import org.apache.ecs.html.H3;
import org.apache.ecs.html.Head;
import org.apache.ecs.html.Html;
import org.apache.ecs.html.Title;
public class TestECS {
public static void main(String[] args) {
Html html = new Html()
.addElement(new Head().addElement(new Title("Demo")))
.addElement(
new Body()
.addElement(new H1("Demo Header"))
.addElement(new H3("Sub Header:"))
.addElement(
new Font()
.setSize("+1")
.setColor(HtmlColor.WHITE)
.setFace("Times")
.addElement(
"The big dog & the little cat chased each other.")));
System.out.println(html.toString());
}
}
具体详细的大家可以用apache网站看,或是看api.apache网站关于ECS,地址:http://jakarta.apache.org/ecs/
昨天网上看到别人blog里面写的自己做的万年历不错,down下来看看,发现有些地方不妥。
1。在java中获取指定年月的天数居然还用闰年来判断,感觉这个人java肯定用的不精。Calendar类里面有个方法
isLeapYear(int year)
确定给定的年份是否为闰年。
用这个不就ok么?还像在c中那样做判断,能不能被4整除,被4整除不被100整除的。。。。
获取指定年月的天数
Date date = new Date(year_log, month_log + 1, 1); // now
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -1); // 前个月
month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天2。对java中的ActionEvent不熟,不知道JComboBox等什么时候应该触发什么event。
3。对线程理解不好。

我把改进后的java代码贴上来,大家看看,里面肯定还有不足之处。
主类:MainFrame
package clock;
/**
* MainFrame.java
* Summary 万年历主类
* Created on
* @author
* remark 如有改动请发一份代码给我,邮箱wsh.grxx@163.com
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.util.Calendar;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

class MainFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel panel = new JPanel(new BorderLayout());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel(new GridLayout(7, 7));
JPanel panel3 = new JPanel();
JLabel[] label = new JLabel[49];
JLabel y_label = new JLabel("年份");
JLabel m_label = new JLabel("月份");
JComboBox com1 = new JComboBox();
JComboBox com2 = new JComboBox();
int re_year, re_month;
int x_size, y_size;
String year_num;
Calendar now = Calendar.getInstance(); // 实例化Calendar
MainFrame() {
super("万年历");
setSize(300, 350);
x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());
y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());
setLocation((x_size - 300) / 2, (y_size - 350) / 2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.add(y_label);
panel1.add(com1);
panel1.add(m_label);
panel1.add(com2);
for (int i = 0; i < 49; i++) {
label[i] = new JLabel("", JLabel.CENTER);// 将显示的字符设置为居中
panel2.add(label[i]);
}
panel3.add(new Clock(this));
panel.add(panel1, BorderLayout.NORTH);
panel.add(panel2, BorderLayout.CENTER);
panel.add(panel3, BorderLayout.SOUTH);
panel.setBackground(Color.white);
panel1.setBackground(Color.white);
panel2.setBackground(Color.white);
panel3.setBackground(Color.white);
Init();
com1.addActionListener(new ClockAction());
com2.addActionListener(new ClockAction());
setContentPane(panel);
setVisible(true);
setResizable(false);
}
class ClockAction implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
int c_year, c_month, c_week;
c_year = Integer.parseInt(com1.getSelectedItem().toString()); // 得到当前所选年份
c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1; // 得到当前月份,并减1,计算机中的月为0-11
c_week = use(c_year, c_month); // 调用函数use,得到星期几
Resetday(c_week, c_year, c_month); // 调用函数Resetday
}
}
public void Init() {
int year, month_num, first_day_num;
String log[] = { 

