Linux + Tomcat + Vim開發Web應用

題記:以前用MyEclipse+Tomcat進行過struts2的學習,最後學習計劃不了了之。現在因爲工作需用到struts2 進行開發,所以打算從新開始學習struts2。但是,在ubuntu上進行開發時,我喜歡用vim,所以就想要不乾脆放棄IDE,直接用vim進行開發。然後,就是查找相關不用IDE進行web開發的指導教程。最後,被我發現在《struts2權威指南》有對該方面的介紹,於是開始了無IDEweb開發之旅。

 

ubuntu安裝JDK

sun網站上http://www.oracle.com/technetwork/java/javase/downloads/index.html下載JDK。在這裏我下載的版本是jdk-7u45-linux-x64.tar.gz。下載完畢後,直接tar命令解壓到任意目錄下(此處解壓到/usr/lib/jdk),然後在.profile中添加JAVA_HOME環境變量,具體配置如下。

export JAVA_HOME=/usr/lib/jdk 

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

最後,使用java -version命令判斷JDK是否安裝成功。若出現如下提示,則表明JDK安裝成功。

java version "1.7.0_45"

Java(TM) SE Runtime Environment (build 1.7.0_45-b18)

Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

 

ubuntu上安裝Tomcat

衆所周知,Tomcat是開源的web容器,可直接到網站http://tomcat.apache.org/上下載。我下載的是apache-tomcat-6.0.37.tar.gz文件,該文件無需安裝,直接解壓即可使用。當然,在此之前需安裝好jdk

 

下載struts2源碼:

struts2也是apache的一個開源項目,可從網站http://struts.apache.org/development/2.x/上下載。目前,最新的版本是2.3.16,我下載的是完全版struts-2.3.15.3-all.zip。在下載目錄解壓該文件,可看到如下文件:

ANTLR-LICENSE.txt        lib               SITEMESH-LICENSE.txt

apps                     LICENSE.txt       src

CLASSWORLDS-LICENSE.txt  NOTICE.txt        XPP3-LICENSE.txt

docs                     OGNL-LICENSE.txt  XSTREAM-LICENSE.txt

FREEMARKER-LICENSE.txt   OVAL-LICENSE.txt

 

第一個web應用:

tomcat主目錄下的webapps下創建一個自己的web應用根目錄,例:myapps。並在根目錄下創建兩個目錄:WEB-INF,lib

進入到strutsapps目錄,解壓該目錄下的struts2-blank.war文件,進入WEB-INF/lib,並其中的jar包拷貝到我們創建的lib目錄下,需要拷貝的jar包如下所示:

commons-fileupload-1.3.jar  javax.servlet.jsp.jstl.jar

commons-io-2.0.1.jar        jstl-impl.jar

commons-lang3-3.1.jar       log4j-1.2.17.jar

commons-logging-1.1.3.jar   ognl-3.0.6.jar

freemarker-2.3.19.jar       struts2-core-2.3.15.3.jar

javassist-3.11.0.GA.jar     xwork-core-2.3.15.3.jar

如果沒有拷貝javassist-3.11.0.GA.jarlib目錄下,將會出現以下錯誤:

java.lang.reflect.InvocationTargetException - Class: com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector

File: ContainerImpl.java

Method: inject

Line: 301 - com/opensymphony/xwork2/inject/ContainerImpl.java:301:-1

at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:502)

at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)

at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)

at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)

at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:424)

at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)

at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)

at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)

at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)

at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)

at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)

at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)

at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)

at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)

at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)

at org.apache.catalina.core.StandardService.start(StandardService.java:525)

at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)

at org.apache.catalina.startup.Catalina.start(Catalina.java:595)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:301)

at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.construct(ContainerImpl.java:438)

at com.opensymphony.xwork2.inject.ContainerBuilder$5.create(ContainerBuilder.java:207)

at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)

at com.opensymphony.xwork2.inject.ContainerBuilder$3.create(ContainerBuilder.java:93)

at com.opensymphony.xwork2.inject.ContainerBuilder$7.call(ContainerBuilder.java:487)

at com.opensymphony.xwork2.inject.ContainerBuilder$7.call(ContainerBuilder.java:484)

at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:584)

at com.opensymphony.xwork2.inject.ContainerBuilder.create(ContainerBuilder.java:484)

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.createBootstrapContainer(DefaultConfiguration.java:324)

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:221)

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)

at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446)

at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490)

... 29 more

Caused by: java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:299)

... 42 more

Caused by: java.lang.ExceptionInInitializerError

at com.opensymphony.xwork2.ognl.OgnlValueStackFactory.setContainer(OgnlValueStackFactory.java:84)

... 47 more

Caused by: java.lang.IllegalArgumentException: Javassist library is missing in classpath! Please add missed dependency!

at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:168)

... 48 more

Caused by: java.lang.ClassNotFoundException: javassist.ClassPool

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:190)

at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:165)

... 48 more

Dec 07, 2013 10:37:06 PM org.apache.catalina.core.StandardContext start

SEVERE: Error filterStart

Dec 07, 2013 10:37:06 PM org.apache.catalina.core.StandardContext start

SEVERE: Context [/Hello] startup failed due to previous errors

最後,把struts.xml文件從myapps/WEB-INF/classes目錄下,web.xml文件拷貝到myapps/WEB-INF目錄下,並在myapps目錄下添加屬於自己的jsp文件,例如:login.jsp。根據實際情況配置好這些文件之後,啓動tomcat測試用例的正確性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章