学习笔记

一,JAR基本用法示例
在 C:新建文件夹叫 Test ,然后新建 HelloWorld.java 文件,内容如下:
package powerwind;
import javax.swing.*;
public class HelloWorld
{
        public static void main(String[]args)throws Exception
        {
                JOptionPane.showMessageDialog(null,"HelloWorld");
        }
}
接着打开命令提示符窗口,输入 cd c:/Test,此时切换到 c:/test目录下。用
开始编译JAVA源文件。

编译成功后,c:/test目录下有个 powerwind 文件夹,该文件夹下有 HelloWorld.class 文件。
此时在 c:/test 目录下新建文件  helloworld.txt ,在此文件输入
Main-Class: powerwind.HelloWorld
注意:在最后一定要有个回车,Main-Class:后面要有空格。
输入
jar -cvfm HelloWorld.jar helloworld.txt powerwind/
命令完成后,生成 HelloWorld.jar 文件,直接双击此文件就可以运行程序了。如果 .jar 文件已经被 WinRAR关联了,可以再新建一个批处理文件 run.bat
start javaw -jar HelloWorld.jar
这样,双击 run.bat 也可以运行程序。

二,ant基本用法示例

程序如一楼的,在c:/test目录下新建 src文件夹,在此文件夹下新建 powerwind 文件夹并把 HelloWorld.java 这个文件放在里面。helloworld.txt 文件放在src文件夹下。最后在c:/test文件夹下新建 build.xml 文件:
<?xml version="1.0"?>
<project name="A simple test" default="compile" basedir=".">
  <property environment="env"/>
  <property name="src.dir" value="${basedir}/src"/>
  <property name="classes.dir" value="${basedir}/classes"/>
  <path id="classpath">
        <pathelement location="${classes.dir}"/>
        <pathelement location="${basedir}"/>
        <pathelement location="${env.CLASSPATH}"/>
  </path>
  <target name="init" >
        <delete dir="${classes.dir}"/>
    <mkdir dir="${classes.dir}"/>
  </target>
  <target name="compile" depends="init">
    <javac srcdir="${src.dir}" destdir="${classes.dir}" includes="**/*.java">
          <classpath refid="classpath"/>
    </javac>
  </target>
  <target name="jar" depends="compile">
    <jar jarfile="${classes.dir}/HelloWorld.jar" manifest="${src.dir}/helloworld.txt">
                <fileset dir="${classes.dir}" includes="**/*.class" />
    </jar>
  </target>
  <target name="run">
    <java classname="powerwind.HelloWorld" fork="yes" dir=".">
      <classpath refid="classpath"/>
    </java>
  </target>
</project>
此时,输入命令 ant 或 ant compile执行编译,完成后输入 ant run ,用 ant jar 还可以打包文件。

PS:前提条件是下载了 ant 这个小工具。

三,由 Hibernate 配置文件生成JAVA代码

文件结构图如下: [attach]4617[/attach]

其中 build.xml 在 Test 目录下,codegen.cfg.xml 文件在 Test/src 目录下,Student.hbm.xml 文件在 Test/src/powerwind 目录下。

Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>

  <class name="powerwind.Student" table="STUDENTS" >
    <meta attribute="class-scope">public</meta>
   
    <id name="id" type="long" column="ID" >
      <meta attribute="scope-set">protected</meta>
      <generator class="native"/>
    </id>

    <property name="name" type="string" >
      <meta attribute="use-in-tostring">true</meta>
      <meta attribute="finder-method">findByName</meta>
      <column name="NAME" length="15" not-null="true" unique="true" />
    </property>
      
    <property name="age" type="int">
      <meta attribute="field-description">How old is the student</meta>
      <meta attribute="use-in-tostring">true</meta>
      <column name="AGE" check="AGE>18" not-null="true"/>
    </property>
   
    <property name="***" type="char" column="***"/>
   
    <property name="info" type="string">
       <meta attribute="use-in-tostring">true</meta>
       <column name="INFO" sql-type="text"/>
    </property>
        
  </class>

</hibernate-mapping>
codegen.cfg.xml
<codegen>
    <generate renderer="net.sf.hibernate.tool.hbm2java.BasicRenderer"/>
    <generate renderer="net.sf.hibernate.tool.hbm2java.FinderRenderer" suffix="Finder"  package="powerwind"/>
</codegen>
build.xml

<?xml version="1.0"?>
<project name="hbm2java" default="hbm2java" basedir=".">

  <property name="source.root" value="${basedir}/src"/>
  <property name="lib.dir" value="E:/java/Hibernate/lib"/>

  <path id="class.path">
      <fileset dir="${lib.dir}" includes="*.jar"/>
  </path>

  <target name="hbm2java">
    <taskdef name="hbm2java"
           classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
           classpathref="class.path"/>
    <hbm2java output="${source.root}" config="${source.root}/codegen.cfg.xml">
      <fileset dir="${source.root}">
        <include name="**/*.hbm.xml"/>
      </fileset>
    </hbm2java>
  </target>

</project>
<property name="lib.dir" value="E:/java/Hibernate/lib"/> 这个要根据 Hibernate 所在目录而设置。

输入 ant 或  ant hbm2java,就可能生成JAVA源文件了。

三(2),由 Hibernate 配置文件生成DDL

在前面的基础上,加上这个文件.
hibernate.properties
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/course
hibernate.connection.username=root
hibernate.connection.password=123456
hibernate.show_sql=true
在 build.xml 里添加两个 target 元素.
<target name="compile">
        <javac srcdir="${source.root}"
                           destdir="${source.root}"
                           debug="on">
                  <classpath refid="class.path"/>
        </javac>
</target>

<target name="schema">
        <taskdef name="schemaexport"
                classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask"
                classpathref="class.path" />
                <schemaexport properties="${source.root}/hibernate.properties"
                                          quiet="no" text="no" drop="no" output="${basedir}/student.sql" delimiter=";">
                <fileset dir="${source.root}" includes="**/*.hbm.xml"/>
                </schemaexport>
</target>
同时还要在原来的  path 元素加上 <pathelement location="${source.root}" />
这样,执行 ant compile后再执行 ant schema 就可能生成DDL文件了:

student.sql
drop table if exists STUDENTS;
create table STUDENTS (
   ID bigint not null auto_increment,
   NAME varchar(15) not null unique,
   AGE integer not null check(AGE>18),
   *** char(1),
   INFO text,
   primary key (ID)
);
有一点很奇怪,没有启动 mysql 数据厍时不能生成DDL。

四,有Spring和没有Spring的 IoC

1、使用 Spring  的简单例子:

IHelloWorldService.java
package powerwind;
public interface IHelloWorldService
{
        public String getHello();
        public void setHello(String hello);
}
HelloWorldService.java
package powerwind;
public class HelloWorldService implements IHelloWorldService
{
        private String hello;
        public String getHello()
        {
                return hello;
        }
        public void setHello(String hello)
        {
                this.hello=hello;
        }
}
HelloWorld.java
package powerwind;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class HelloWorld
{
        private IHelloWorldService iHelloWorld;
        public HelloWorld()
        {
                setService();
        }
        public void setService()
        {
                Resource resource=new ClassPathResource("appcontext.xml");
                BeanFactory factory=new XmlBeanFactory(resource);
                iHelloWorld=(IHelloWorldService)factory.getBean("HelloWorld");
        }
        public IHelloWorldService getService()
        {
                return iHelloWorld;
        }
        public static void main(String[]args)
        {
                HelloWorld helloworld=new HelloWorld();
                System.out.println(helloworld.getService().getHello());
        }
}
配置文件 appcontext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
        <bean id="HelloWorld" class="powerwind.HelloWorldService">
                <property name="hello">
                        <value>Hello,World!This is from spring!</value>
                </property>
        </bean>
</beans>
二,没有Spring的实现

修改 HelloWorld.java 文件
package powerwind;

import java.util.Properties;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class HelloWorld
{
        private IHelloWorldService iHelloWorld;
        public HelloWorld()
        {
                setService();
        }
        public void setService()
        {
                try
                {
                        Properties p=new Properties();
                        InputStream is=getClass().getClassLoader()
                                .getResourceAsStream("appcontext.properties");
                        p.load(is);
                        is.close();
                        String cls=p.getProperty("HelloWorld");
                        iHelloWorld=(IHelloWorldService)Class.forName(cls).newInstance();
                        iHelloWorld.setHello(p.getProperty("hello"));
                }catch(Exception e)
                {
                        System.out.println(e);
                }
        }
        public IHelloWorldService getService()
        {
                return iHelloWorld;
        }
        public static void main(String[]args)
        {
                HelloWorld helloworld=new HelloWorld();
                System.out.println(helloworld.getService().getHello());
        }
        
}
同时配置文件用 appcontext.properties
HelloWorld=powerwind.HelloWorldService
hello=Hello,World!This is not from spring!
这样实现了同样效果,可是Spring的实现不会是这么简单的。

四,有Spring和没有Spring的 AOP

一、使用Spring:AOP的 before advice 简单例子.

IHelloWorldService.java
package powerwind;public interface IHelloWorldService{public String getHello();public void setHello(String hello);}
HelloWorldService.java
package powerwind;
public class HelloWorldService implements IHelloWorldService
{
        private String hello;
        public String getHello()
        {
                return hello;
        }
        public void setHello(String hello)
        {
                this.hello=hello;
        }
}
HelloWorld.java
package powerwind;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;

public class HelloWorld
{
        private IHelloWorldService iHelloWorld;
        public HelloWorld()
        {
                setService();
        }
        public void setService()
        {
                Resource resource=new ClassPathResource("appcontext.xml");
                BeanFactory factory=new XmlBeanFactory(resource);
                iHelloWorld=(IHelloWorldService)factory.getBean("IHelloWorld");
        }
        public IHelloWorldService getService()
        {
                return iHelloWorld;
        }
        public static void main(String[]args)
        {
                HelloWorld helloworld=new HelloWorld();
                System.out.println(helloworld.getService().getHello());
        }
}
BeforeAdvice.java
package powerwind;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;

public class BeforeAdvice implements MethodBeforeAdvice
{
        public void before(Method arg0,Object[]arg1,Object arg2)throws Throwable
        {
                System.out.println("invoke before method ["+arg0+"]");
        }
}
appcontext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

        <bean id="HelloWorld" class="powerwind.HelloWorldService">
                <property name="hello">
                        <value>Hello,World!This is from spring!</value>
                </property>
        </bean>

        <bean id="advice" class="powerwind.BeforeAdvice" />

        <bean id="IHelloWorld" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces">
                <value>powerwind.IHelloWorldService</value>
        </property>
        <property name="target">
                <ref local="HelloWorld" />
        </property>
        <property name="interceptorNames">
                <list>
                        <value>advice</value>
                </list>
        </property>
        </bean>

</beans>
二、没有Spring的时候
HelloWorldService.java 文件内容同上,而 IHelloWorldService.java 初始化变量 private String hello=“HelloWorld,this is not from spring!”,删除BeforeAdvice.java文件,新建叫 HelloWorldFactory.java 的文件
package powerwind;
import java.lang.reflect.*;
import java.util.*;
import java.io.*;

public class HelloWorldFactory implements InvocationHandler
{
        private Object proxyObj;

        public Object getBean(String beanName)throws Exception
        {
                Properties p=new Properties();
                InputStream is=getClass().getClassLoader()
                                .getResourceAsStream("appcontext.properties");
                p.load(is);
                is.close();
                proxyObj=Class.forName(p.getProperty(beanName)).newInstance();

                Class cls=proxyObj.getClass();
                return Proxy.newProxyInstance(cls.getClassLoader(),
                        cls.getInterfaces(),this);
        }

        public Object invoke(Object obj,Method method,Object[]args)throws Throwable
        {
                System.out.println("invoke before method ["+method+"]");
                if(args!=null)
                {
                        for(int i=0;i<args.length;i++)
                        {
                                System.out.println(args+"");
                        }
                }
                return method.invoke(proxyObj,args);
        }
}
HelloWorld.java

package powerwind;
public class HelloWorld
{
        private IHelloWorldService iHelloWorld;
        public HelloWorld()
        {
                setService();
        }
        public void setService()
        {
                try
                {
                        iHelloWorld=(IHelloWorldService)new HelloWorldFactory()
                                .getBean("IHelloWorld");
                }catch(Exception e)
                {
                        System.out.println(e);
                }
               
        }
        public IHelloWorldService getService()
        {
                return iHelloWorld;
        }
        public static void main(String[]args)
        {
                HelloWorld helloworld=new HelloWorld();
                System.out.println(helloworld.getService().getHello());
        }
}
配置文件 appcontext.properties
IHelloWorld=powerwind.HelloWorldService

五、Eclipse 常用快捷键整理

Ctrl + Shift + L 查看所有快捷键
Ctr l+ M ——> 窗口最大化 / 还原

Ctrl + Shift + M ——> 自动导入类包

Ctrl + / ——> 注释 / 取消注释

Ctrl + Shift + / ——> /**/块注释

Ctrl + Shift + / ——> /**/取消块注释

Ctrl + Shift + F ——> 格式化代码

F3 ——> 打开定义

Alt + / ——> 自动补全

六、JSP2.0里的一些好东西

我想,如果JSP够令人满意的话,像struts,JSF之类的东西就不会出现了。JSP的好坏不去说它,现在先把它的一些好东西记录下来。

1、在 web.xml 中配置
<jsp-property-group>
     <url-pattern>/pages/*</url-pattern>
     <el-ignore>false</el-ignore>
    <page-encoding>GB2312</page-encoding>
    <include-prelude>/include/header.jspf</include-prelude>
    <include-coda>/include/copyright.jspf</include-coda>
</jsp-property-group
在 <jsp-config> 插入上面的代码,可以省去在每页写上 <%@page contentType="html/text;charset=GB2312" %>,而且  <include-prelude>/include/header.jspf</include-prelude> 和 <include-coda>/include/copyright.jspf</include-coda>分别设置了页面的页眉和页脚,似乎比 include 包含文件要好。
<filter>
        <filter-name>setCharacterEncoding</filter-name>
        <filter-class>powerwind.filter.SetCharacterEncodingFilter</filter-class>
        <init-param>
                <param-name>encoding</param-name>
                <param-value>GB2312</param-value>
        </init-param>
</filter>

<filter-mapping>
        <filter-name>setCharacterEncoding</filter-name>
        <url-pattern>/pages/*</url-pattern>
</filter-mapping>
JSP的中文一向令初学者心烦,在Tomcat的例子里就有一个 filter,把它拿来用,在 web.xml 的 <web-app> 加入上面的设置,对于中文的表单处理就不用加上<% request.setCharacterEncoding("GB2312");%> 了。

2、使用JSTL
个人比较喜欢JSTL的I18N标签厍。
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setBundle basename="BookStore"  />
<fmt:message key="login.title" />
只要这样使用,所谓的国际化也不过如此。


七、在editplus中使用正则表达式

纯粹写代码的时候还是喜欢用editplus,因为它够小巧,功能强大,应用广泛(呵呵~)。
有时候看电子书,要运行一下书里的例子,又懒得从键盘一字一字地敲入,就想直接Copy书中的例子代码。有些电子书的代码编排得很美观,还加入了行号。比如:
1. public class Test
2.{
3.     private String str=null;
4.     public getStr()
5.    {
6.        return str;
7.     }
8.}
这样的代码可不能直接用啊,难道一行行地删除那些数字吗?其实不用,用editplus的替换功能,只要替换为空字符就等于删除了。替换所有数字,就要用到正则表达式。在替换先项里勾选 正则表达式,输入 ([0-9]+)[/.] ,按全部替换就可以替换掉所有的行号和那个点了。
其实 editplus 在正则表达式方面应该还有很多功能的,正在摸索中。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值