JAVA学习

资料:http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/index.html 照葫芦画瓢完成的内容。


这下好了,有一个这么完整的实例了,有东西看得了。不懂的东西实在是太多了,就不好意思提问了。资料里的内容除了“PropertySelection 组件”没实践一下外,都顺利走通了,很神奇的框架,开始有点迫不及待想了解详细详细内容了。
meiking   2008-06-21 21:31:37 阅读:22  评论:0  引用:0

两个月前hofman就建议我去看看appfuse,英文不好一直没什么信心,最近几天研究spring一直没有进展就反思了下,越想越觉得窝囊憋气,感觉基本上都是英文不好导致的效率如此低下,因为一直是在看网上到处转载的文章,官方的文档不太敢看。再加上开发环境不熟,结果就一次一次的碰壁。

于是决定尝试一下其他的方法,就想到了appfuse了,弄了一整天了,还好没有什么中文的文档,于是只好开着“谷歌金山词霸合作版”来读官方文档了。文档在这里:AppFuse QuickStart,比我想象中要容易懂的多,其实一直不怎么敢看,硬这头皮还是能看懂不少的,另一篇讲使用eclipse安装appfuse plugin 的文章更容易懂,不过没有什么实例。

视频教程:http://appfuse.org/display/APF/Demos+and+Videos,项目可以用Eclipse, IDEA or NetBeans打开,视频里使用的是IDEA,我用的是 eclipse。

and my half product right here.  等实际项目出来是补教程,现在睡觉。


meiking   2008-06-21 00:48:20 阅读:25  评论:0  引用:0
这篇文章其实早在四年前就应该写的,现在补上,没有任何技术难点,只是如果有人在这上面浪费时间就太没必要了。

首先下载必须的软件:
Tomcat6.0: http://tomcat.apache.org/download-60.cgi
Windows Service Installer

Jdk: http://java.sun.com/javase/downloads/index.jsp
你可以选择带有 jre 的安装文件或者你机器里现在有 jre 环境则只需要下载 JDK.
Java SE 6 Update 10 Beta  (不带JRE)
JDK 6 Update 6 (带JRE)
Java Runtime Environment (JRE) 6 Update 6 (JRE)


下面按步骤来:
1.安装JDK和JRE
一直下一步到安装完成,记住JDK安装的路径。



2.设置JDK相关的环境变量

1).切换到桌面,右键点击“我的电脑” -> 属性 -> 高级 -> 如图 建立一个 JAVA_HOME 环境变量,变量值为JDK的根目录。

2).和上面一样的操作,建立 环境变量 CLASSPATH,值为 “.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar”

3).还是操作环境变量但不是新建,而是编辑。编辑 Path 变量,最变量值最后面加上 ;%JAVA_HOME%\bin;


3.安装Tomcat
1).一直下一步,中间需要选择安装路径和 JVM 目录,如果JDK和JRE安装没问题,这里他应该能自动找得到,否则需要你手动指定一下。 中间什么也不用管,有一部让你设置端口,不用动,保持默认的就行了。


2).新增一个 CATALINA_HOME 环境变量,变量值为你TOMCAT安装时的根目录。


3.测试运行服务器

进入Tomcat 下的 bin目录,你可以发现两个可执行文件,分别是 tomcat6.exe(外挂形式启动) tomcat6w.exe(当成服务启动) ,推荐使用 tomcat6.exe 来启动,如果你会DOS的话,最好开一个DOS窗口去运行 tomcat6.exe,这样如果出错了则能及时的看到错误提示。  需要注意的是如果启动失败最大的可能就是服务已经启动了,你需要在DOS下运行 “net stop tomcat6”先关闭服务。


4.编写程序测试下Tomcat环境是否能运行
进下Tomcat下的 webapps 目录,新建一个自己的目录,例如 samples1。
进入samples1
1).新建文件 index.jsp
2).新建目录WEB-INF
3).进入WEB-INF目录新建文件 web.xml


index.jsp 文件代码:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>我的第一个JSP页面。</title>
  </head>
  <body>
    Hello world! <br>
    <%
        String name = "meiking";
        out.println(name);
    %>
  </body>
</html>

web.xml 文件代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

5.重启 tomcat 后运行刚刚的程序




那么你的环境是否配置好了呢?如果你还没有配置成功请对照上面的步骤,或者留言把你遇到的问题描述尽可能的清楚一些。
meiking   2008-05-24 22:21:33 阅读:193  评论:2  引用:0
实在找不到原因了,今天弄了一天了,中间除了现在 "It is indirectly referenced from required .class files" 问题上也浪费不少时间,hofman有空的帮看一眼吧。 另外我连数据库时加上 ?useUnicode=true&characterEncoding=UTF-8 后中文问题依旧,不过这个不重要,可能是其它方面出的问题。

先贴我的 action 类,已经精简到单元测试了,在用hibernate直接操作时都是没有问题的:
CategoryAction.java
package com.blog.struts.action;

import "<struts>";

import com.blog.WpTerms;
import com.blog.WpTermTaxonomy;
import com.blog.WpTermsDAO;
import com.blog.WpTermTaxonomyDAO;

public class CategoryAction extends Action {

    private WpTermsDAO wpTerms;
    private WpTermTaxonomyDAO wpTermTaxonomy;

    public void setWpTerms(WpTermsDAO wpt) {
        this.wpTerms = wpt;
    }

    public void setWpTermTaxonomy(WpTermTaxonomyDAO wptTax) {
        this.wpTermTaxonomy = wptTax;
    }

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        CategoryForm cf = (CategoryForm) form;
        // stub
        String name = cf.getCatName();
        ......

        try {
            WpTerms wpt = new WpTerms();
            ......

            wpTerms.save(wpt);

            System.out.println("新目录创建成功: " + wpt.getTermId());
            return mapping.findForward("createSuccess");
        } catch (Exception e) {
            e.printStackTrace();
            request.setAttribute("errorMessage", "保存目录信息时出错,错误代码:01。");
        }

        return mapping.findForward("createFailed");
    }
}

WpTermsDAO.java
package com.blog;

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class WpTermsDAO extends HibernateDaoSupport {

    protected void initDao() {
        // do nothing
    }

    public void save(WpTerms transientInstance) {
        System.out.println("============================");
        //单无测试只剩这些了,本来应该有不少方法的
    }
}

hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="connection.url">jdbc:mysql://localhost:3306/home_wp_blog?useUnicode=true&amp;characterEncoding=UTF-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="myeclipse.connection.profile">
            com.mysql.jdbc.Driver
        </property>
        <mapping resource="com/blog/WpTerms.hbm.xml"></mapping>
        <mapping resource="com/blog/WpTermTaxonomy.hbm.xml"></mapping>

    </session-factory>

</hibernate-configuration>

applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml">
        </property>
    </bean>
    <bean id="WpTermsDAO" class="com.blog.WpTermsDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory"></ref>
        </property>
    </bean>
    <bean id="WpTermTaxonomyDAO" class="com.blog.WpTermTaxonomyDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory"></ref>
        </property>
    </bean>

    <bean name="/category" class="com.blog.struts.action.CategoryAction"
        singleton="false">
        <property name="wpTerms">
            <ref bean="WpTermsDAO" />
        </property>
        <property name="wpTermTaxonomy">
            <ref bean="WpTermTaxonomyDAO" />
        </property>
    </bean>

</beans>

错误信息:
java.lang.NullPointerException
    at com.blog.struts.action.CategoryAction.execute(CategoryAction.java:74)
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
meiking   2008-05-11 23:54:10 阅读:80  评论:7  引用:0

我"project"是UTF-8中文编码,用的IDE是eclipse3.3,页面全保持UTF-8,但Mysql 插入的中文值全变成了乱码,mysql也是UTF-8字符集,所以怀疑是hibernate连接时需要加个参数。

  • 想请问下hofman等各位大大怎么设置这个连接,或者我的问题不是出在这儿的,那么又会是什么问题呢?

另外为什么我看到别人在调用 session.save或update方法时只需要flush一下就能保存,而我一定要再追加上Transaction的commit方法才行。 直接flush也不报错,但数据库里就是没有内容。

  • flush和commit的关系是怎么回事?
    可能是我没有查阅资料或者没有系统的学习原因吧,有没有需要系统的学习一下呢? 我现在还是入门,学会了用。 如果你没理解看下面的代码: 
CategoryForm cf = (CategoryForm) form;// TODO Auto-generated method
// stub
String name = cf.getCatName();
  ...

Session session = null;
try {
    session = HibernateSessionFactory.getSession();
    WpTerms wpt = new WpTerms();       //wp_terms表的对象。
    wpt.setName(name);
      ...

    session.save(wpt);
    session.flush();

    System.out.println("新目录创建成功: " + wpt.getTermId());

    try {
        WpTermTaxonomy wptt = new WpTermTaxonomy();  //wp_term_taxonomy表对象
        wptt.setTermId(wpt.getTermId());
          ...

        session.save(wptt);
        session.flush();

        request
                .setAttribute("resultMessage", "目录建立成功:"
                        + wpt.getName());
        return mapping.findForward("createSuccess");

    } catch (Exception e) {
        e.printStackTrace();
        request.setAttribute("errorMessage", "保存目录信息时出错,错误位置:02。");
    } finally {

        //就是这里,不用使用事物就保存不了,开始以为处理两个或更多表才就要用到,但一个表时也需要commit!
        Transaction t = session.beginTransaction();
        t.commit();
        session.close();
    }
} catch (Exception e) {
    e.printStackTrace();
    request.setAttribute("errorMessage", "保存目录信息时出错,错误位置:01。");
}

return mapping.findForward("createFailed");

最后还有个简单的问题
<html:form action="/category">
    <p>目录名: <html:text property="catName" />
    <html:errors property="catName" /></p>
      ...
</html:form>
  • 我用的是struts1.3,怎么从action里或其它地方给他传值呢?
meiking   2008-05-11 01:49:05 阅读:46  评论:1  引用:0
Copyright@2006 powered by YuLog