2015年7月31日 星期五

在mac系统上安装tomcat

 

在mac系统上安装tomcat

分类: Tomcat 5994人阅读 评论(0) 收藏 举报
1、下载:
从apache官网(http://tomcat.apache.org/ )上下载最新的tomcat二进制包(注:是mac版本的.gz文件包)
2、将上述二进制包解压后改名为Tomcat,并复制到/Library目录下
新建Finder窗口—— shift + Command + G —— 输入/Library,进入此目录
将Tomcat文件夹复制到此目录下
3、修改权限
方式一:选中Tomcat文件夹 , Command+i 打开简介, 修改文件权限。
方式二:打开终端,输入sudo chmod 755 /Library/Tomcat 
4、执行/Library/Tomcat/bin目录下的startup.sh文件
在终端输入命令:sudo sh startup.sh  或者 sudo ./startup.sh start命令启动tomcat
在终端输入命令:sudo sh shutdown.sh  或者 sudo ./shutdown.sh stop命令关闭tomcat
5、验证tomcat是否安装成功
启动tomcat后,打开http://localhost:8080查看是否Tomcat已经启动。

tomcat的安装步骤就这样完成了,下面我将为大家介绍一个脚本,方便启动和终止tomcat:
配置Tomcat启动脚本:
使用文本编辑器添加以下代码:
#!/bin/bash
case $1 in
start)
sh /Library/Tomcat/bin/startup.sh
;;
stop)
sh /Library/Tomcat/bin/shutdown.sh
;;
restart)
sh /Library/Tomcat/bin/shutdown.sh
sh /Library/Tomcat/bin/startup.sh
;;
*)
echo “Usage: start|stop|restart”
;;
esac
exit 0
将文件保存为tomcat,小写并不带后缀。赋予文件执行权限:chmod 777 tomcat
将这个文件放置到终端包含的路径中,例如/usr/bin,而后便可以在终端中简单地输入tomcat start和tomcat stop启用tomcat了。
快捷命令如下:
1)tomcat start 
2)  tomcat stop
3)  tomcat restart 

但是我在用这个脚本启动的时候也遇到一个问题,我开始用sudo sh startup.sh/shutdown.sh命令时能正常的启动与终止,但是当我用刚刚的脚本时就出现如下错误:
bogon:Desktop admin$ tomcat start
Using CATALINA_BASE:   /Library/Tomcat
Using CATALINA_HOME:   /Library/Tomcat
Using CATALINA_TMPDIR: /Library/Tomcat/temp
Using JRE_HOME:        /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Using CLASSPATH:       /Library/Tomcat/bin/bootstrap.jar:/Library/Tomcat/bin/tomcat-juli.jar
touch: /Library/Tomcat/logs/catalina.out: Permission denied
/Library/Tomcat/bin/catalina.sh: line 387: /Library/Tomcat/logs/catalina.out: Permission denied
bogon:Desktop admin$ tomcat restart
Using CATALINA_BASE:   /Library/Tomcat
Using CATALINA_HOME:   /Library/Tomcat
Using CATALINA_TMPDIR: /Library/Tomcat/temp
Using JRE_HOME:        /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Using CLASSPATH:       /Library/Tomcat/bin/bootstrap.jar:/Library/Tomcat/bin/tomcat-juli.jar
2013-10-31 22:20:51 org.apache.catalina.startup.Catalina stopServer
????: Could not contact localhost:8005. Tomcat may not be running.
2013-10-31 22:20:51 org.apache.catalina.startup.Catalina stopServer
????: Catalina.stop:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:431)
at java.net.Socket.connect(Socket.java:527)
at java.net.Socket.connect(Socket.java:476)
at java.net.Socket.<init>(Socket.java:373)
at java.net.Socket.<init>(Socket.java:187)
at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:500)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:371)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:458)
Using CATALINA_BASE:   /Library/Tomcat
Using CATALINA_HOME:   /Library/Tomcat
Using CATALINA_TMPDIR: /Library/Tomcat/temp
Using JRE_HOME:        /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Using CLASSPATH:       /Library/Tomcat/bin/bootstrap.jar:/Library/Tomcat/bin/tomcat-juli.jar
touch: /Library/Tomcat/logs/catalina.out: Permission denied
/Library/Tomcat/bin/catalina.sh: line 387: /Library/Tomcat/logs/catalina.out: Permission denied

上网查了好多资料终于解决这个问题了,这是由于权限不够所导致的。我把这个脚本修改如下:
#!/bin/bash
case $1 in
start)
sudo sh /Library/Tomcat/bin/startup.sh
;;
stop)
sudo sh /Library/Tomcat/bin/shutdown.sh
;;
restart)
sudo sh /Library/Tomcat/bin/shutdown.sh
sudo sh /Library/Tomcat/bin/startup.sh
;;
*)
echo “Usage: start|stop|restart”
;;
esac
exit 0

这样就没问题啦。

如果遇到诸如无法找到目录以及文件地问题,一般是因为文件权限造成地问题,可以如此解决:
sudo chmod 755 /Library/Tomcat/bin/*.sh
sudo chmod 755 /Library/Tomcat/bin/*.bat
遇见”JAVA_HOME not defined”JAVA路径未定义错误,在终端中执行以下命令:
sudo setenv JAVA_HOME /Library/Java/Home

Eclipse 的 Tomcat 環境設定

Eclipse 的 Tomcat 環境設定


前提 1: 必須是 Eclipse IDE for Java EE 才有此設定.

前提 2: 到 Apache Tomcat 網址, 若只要供 Eclipse 使用, 則下載 zip 或 tar.gz 這種免安裝檔即可.

1) Menu: Window > Preferences, 移動到 Server > Runtime Environments :


選擇 Apache Tomcat 版本 :


點選 "Browse" 鈕, 選擇 Apache Tomcat 根目錄 :


設定完成 :


2)在 Eclipse 中, 新增一個 "Dynamic Web Project" 專案 :


輸入 Project Name 與運行的 Target runtime :


3)新增一個 JSP File 或 HTML File :


選擇檔案的所在目錄 WebContent 與 檔案名稱 :


4)在專案的地方按右鍵, 選擇 Run As > Run on Server, 進行運行 :


選擇運行的 Target runtime 環境 :


運行結果 :


2015年7月23日 星期四

明日復明日,明日何其多

君云生命莫貴於光陰,
然君現正蹉跎光陰。

成堆的事物都是先前累積的,
並沒有要求你立即去完成。
應該針對當前最重要的部分,
其他的暫且擱置一旁。

建立良好的工作環境,
簡化每一件事物的處理步驟,
將剩下的資源運用於首要之事。

拋開壓力與焦慮,只需要問自己這3個問題!

美國開利冷氣(Carrier Corporation)創辦人威里斯‧開利(Willis Carrier)某次到客戶的玻璃工廠安裝空氣清淨機時,碰到了一個突發狀況:機器不符合客戶所提出的規格,無法順利安裝。

當下,開利驚慌不已,瞬間只覺得整個胃與內臟翻攪扭曲、痛苦不堪,甚至還為此擔憂失眠。經過一段時間後,在常理的提醒下,他明白憂慮毫無用處,於是開始動手解決問題。

首先,開利試著設想機器無法安裝的最壞狀況是什麼?答案是頂多丟掉飯碗,或公司損失兩萬美元,他並不會因此「入獄或被槍決」。

其次,就算沒了工作,他自信可以很快找到工作,心情頓時放鬆不少。

最後,觀察力敏銳的開利發現,其實只要花5000美元加裝一個設備,就可以徹底解決問題,讓公司擺脫了原本要虧損兩萬美元的困境,反倒節省了1.5萬美元。

聚焦在問題,而非煩憂

開利事後回想,如果當時自己一直憂慮下去的話,可能永遠也無法找出解答,因為憂慮最大的殺傷力,就在於摧毀人們集中思考的能力。

人際關係學大師戴爾‧卡內基(Dale Carnegie)則是在聽完了開利的故事之後,得到了這樣的啟發:「從漫無邊際的煩惱中,拉回到現實中,集中注意力解決問題,正是處理壓力與焦慮最有效的方法之一。」他將開利克服工作憂慮的方法,歸納成三個步驟,稱之為「開利的魔術方程式」:

1.無畏地分析整個情勢,設想挫折能帶來的最壞狀況是什麼?

2.考量過所有可能發生的最壞狀況後,想辦法接受它。

3.平靜地想辦法,從已接受的最壞狀況中謀求改進。

拋開過去、未來,活在今天的方格中

卡內基曾在向成人訓練班授課時,聆聽、記錄了成千上百位學員的憂慮,將它編輯整理成《如何停止憂慮開創人生》一書,書中提及了有效克服壓力的3項準則:

1.活在「今天的方格」中:

明天的重擔加上昨天的負荷,如果要在今天一起背負的話,就算是再堅強的人也會膽怯。卡內基強調,活在今天的方格中,並不是要所有人放棄為明天做好規劃,而是積極投入今天的工作中,就是唯一能為未來做的最好準備。

2.積極處理壓力:

遇到困難的問題,因而煩惱不堪時,運用前述「開利的魔術方程式」三步驟,先自問可能發生的最壞狀況是什麼,然後準備接受最壞的狀況,最後再設法改善最壞的狀況。卡內基認為,只有在認清自己的處境後,才能擁有清晰的思考能力,問題自然能迎刃而解。

3.壓力會危害你的健康:

諾貝爾醫學獎得主艾歷克斯‧卡瑞爾(Alexis Carrel)曾說,「無法處理憂慮的企業主管,往往英年早逝。」確實,包含心臟病、消化性潰瘍與高血壓等職場工作者常見的疾病,多數病因都是過度憂慮所導致。卡內基認為,「如果能夠去除恐懼與憂慮,70%以上的病人都不用看醫生。」

卡內基強調,克服憂慮其實並不需要更多新的點子、學習新的觀念,因為我們目前所認知的,早已足夠引導我們享受快樂的人生。簡單說,「我們的問題並非無知,而是無所作為。」把心思和時間從憂慮轉向行動,就是克服憂慮的第一步。

2015年7月22日 星期三

ember.js 學習筆記 4

路由


为了说明它的重要性,设想一下我们在编写一个管理博客的web应用。 在任何时刻,我们都应该能回答类似这样的问题: 当前的访问者已经登陆了吗?他是管理员吗?他在看哪一篇文章?开放了设置页面了吗?他在修改当前文章吗?
在Ember.js内,应用中的每一个可能的状态都会映射到一个URL上。通过将URL封装到路由处理器(route handlers)中, 我们可以简单而清晰地回答上面所问的问题:登陆了吗?在看哪篇文章?
在任何时刻,你的应用中都会有一个或多个活跃的路由处理器。下列两个条件都可以触发它们:
  1. 用户与视图发生交互,产生事件导致URL改变。
  2. 用户手动改变URL(如: 点击后退按钮),或者是第一次载入页面。
当前的URL发生改变时,活跃的新路由处理器可能会做以下事情:
  1. 根据条件选择跳转到新的URL上
  2. 更新控制器(controller)以便映射到特定的模型(model)上
  3. 更改屏幕(浏览器窗口)上的模板,或者在已存在的出口(outlet)上替换新的模板
当你的应用变得越来越复杂,明白路由究竟发生了什么是很有帮助的。只要简单的修改一下你的Ember.Application,就可以让ember记录路由的事件转换:

App = Ember.Application.create({
  LOG_TRANSITIONS: true
});

指定根URL

如果Ember应用是部署在同一域下的多个Web应用中的一个,这时需要在路由器处指定Ember应用的根URL。在默认情况下,Ember假定部署在域的根路径下。
例如如果需要将博客应用部署在www.emberjs.com/blog下,那么需要指定根URL为/blog/
这可以通过在路由器中设置rootURL来实现:
App.Router.reopen({
  rootURL: '/blog/'
});

当启动你的应用时,路由器会负责展示模板,载入数据,以及设置应用状态等任务。 这些都是通过将当前的URL与你定义的路由进行匹配来实现的。

App.Router.map(function() {
  this.route("about", { path: "/about" });
  this.route("favorites", { path: "/favs" });
});

现在当用户访问/about时,Ember.js就会渲染about的模板。访问/favs将渲染favorites的模板。

提示:如果路径(path)的名字跟路由(route)的名字是一样的话,你可以不用写上路径。 所以下面的示例跟上面的是相同的。

App.Router.map(function() {
  this.route("about");
  this.route("favorites", { path: "/favs" });
});

在模板里面,你可以用{{link-to}}来导向路由,这需要用到你在route方法中定义的名字 (对于/来说,名字就是index)。

{{#link-to 'index'}}<img class="logo">{{/link-to}}

<nav>
  {{#link-to 'about'}}About{{/link-to}}
  {{#link-to 'favorites'}}Favorites{{/link-to}}
</nav>

{{link-to}}助手会在链接上面加上active的类名(class)来指出当前活跃的路由。

你也可以通过创建一个Ember.Route的子类来对路由的行为进行自定义。例如,创建 App.IndexRoute类来定义当用户访问/时会发生什么。

App.IndexRoute = Ember.Route.extend({
  setupController: function(controller) {
    // Set the IndexController's `title`
    controller.set('title', "My App");
  }
});

Ember.js会自动地根据你在this.route设置的名字来找出对应的路由与控制器。
URLRoute NameControllerRouteTemplate
/indexIndexControllerIndexRouteindex
/aboutaboutAboutControllerAboutRouteabout
/favsfavoritesFavoritesControllerFavoritesRoutefavorites