在IDE上搭載Tomcat服務器
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。目前最新版本是9.0。
首先你先到tomcat官網下載好Tomcat安裝包 http://tomcat.apache.org/
在左邊有Download,下載對應的版本
bin:存放windows或Linux平臺上啟動和關閉Tomcat的腳本文件
conf:存放Tomcat服務器的各種全局配置文件,其中最重要的是server.xml和web.xml
doc:存放Tomcat文檔
server:包含三個子目錄:classes、lib和webapps
server/lib:存放Tomcat服務器所需的各種JAR文件
server/webapps:存放Tomcat自帶的兩個WEB應用admin應用和 manager應用
common/lib:存放Tomcat服務器以及所有web應用都可以訪問的jar文件
shared/lib:存放所有web應用都可以訪問的jar文件(但是不能被Tomcat服務器訪問)
logs:存放Tomcat執行時的日志文件
src:存放Tomcat的源代碼
webapps:Tomcat的主要Web發布目錄,默認情況下把Web應用文件放于此目錄
work:存放JSP編譯后產生的[class文件]
我們打開bin這個文件夾,打開里面的startup.bat
啟動成功的話,就是準備好了
這個也算是啟動Tomcat的一種方式,但是我們使用的是MyEclipse,不可能每一次都找到Tomcat目錄下的startup.bat文件,來打開服務器,那樣子效率不是特別的高
接下來就是在MyEclipse搭載服務器了
然后打開Configure Server
這樣子就搭載好了,你會看見這里會有你搭載的Tomcat,然后就是在MyEclipse上啟動Tomcat服務器了
安裝數據庫
mysql是一個很好用的開源數據庫,在項目中我們往往要進行數據的交換,Mysql如何安裝呢MySQL安裝文件分為兩種,一種是msi格式的,一種是zip格式的。如果是msi格式的可以直接點擊安裝,按照它給出的安裝提示進行安裝(相信大家的英文可以看懂英文提示),一般MySQL將會安裝在C:\Program Files\MySQL\MySQL Server 5.6 該目錄中;zip格式是自己解壓,解壓縮之后其實MySQL就可以使用了,但是要進行配置。
解壓之后可以將該文件夾改名,放到合適的位置,個人建議把文件夾改名為MySQL Server 5.6,放到C:\Program Files\MySQL路徑中。當然你也可以放到自己想放的任意位置。
完成上述步驟之后,很多用戶開始使用MySQL,但會出現圖示的錯誤。這是因為沒有配置環境變量所致。配置環境變量很簡單:我的電腦->屬性->高級->環境變量選擇PATH,在其后面添加: 你的mysql bin文件夾的路徑 (如:C:\Program Files\MySQL\MySQL Server 5.6\bin )PATH=.......;C:\Program Files\MySQL\MySQL Server 5.6\bin (注意是追加,不是覆蓋)
配置完環境變量之后先別忙著啟動mysql,我們還需要修改一下配置文件(如果沒有配置,之后啟動的時候就會出現圖中的錯誤哦!:錯誤2 系統找不到文件),mysql-5.6.1X默認的配置文件是在C:\Program Files\MySQL\MySQL Server 5.6\my-default.ini,或者自己建立一個my.ini文件,在其中修改或添加配置(如圖):[mysqld]basedir=C:\Program Files\MySQL\MySQL Server 5.6(mysql所在目錄)datadir=C:\Program Files\MySQL\MySQL Server 5.6\data (mysql所在目錄\data)
以管理員身份運行cmd(一定要用管理員身份運行,不然權限不夠),輸入:cd C:\Program Files\MySQL\MySQL Server 5.6\bin 進入mysql的bin文件夾(不管有沒有配置過環境變量,也要進入bin文件夾,否則之后啟動服務仍然會報錯誤2)輸入mysqld -install(如果不用管理員身份運行,將會因為權限不夠而出現錯誤:Install/Remove of the Service Denied!)安裝成功
安裝成功后就要啟動服務了,繼續在cmd中輸入:net start mysql(如圖),服務啟動成功!此時很多人會出現錯誤,請看注意:注意:這個時候經常會出現錯誤2和錯誤1067。如果出現“錯誤2 系統找不到文件”,檢查一下是否修改過配置文件或者是否進入在bin目錄下操作,如果配置文件修改正確并且進入了bin文件夾,需要先刪除mysql(輸入 mysqld -remove)再重新安裝(輸入 mysqld -install);如果出現錯誤1067,那就是配置文件修改錯誤,確認一下配置文件是否正確。
服務啟動成功之后,就可以登錄了,如圖,輸入mysql -u root -p(第一次登錄沒有密碼,直接按回車過),登錄成功!
對Mybatis的認識
MyBatis 是一個可以自定義SQL、存儲過程和高級映射的持久層框架。MyBatis 摒除了大部分的JDBC代碼、手工設置參數和結果集重獲。MyBatis 只使用簡單的XML 和注解來配置和映射基本數據類型、Map 接口和POJO 到數據庫記錄。相對Hibernate和Apache OJB等“一站式”ORM解決方案而言,Mybatis 是一種“半自動化”的ORM實現。
MyBatis的前身是ibatis,但是在配置sql的語法上有明顯的區別,并且spring目前的版本封裝mybatis,至于mybatis-spring.jar文件也是mybatis團隊復雜開發的jar包,用于和spring整合。之前ibatis的源碼托管方是apache,而mybatis是google。
mybatis的結構主要分三層1)API接口層:提供給外部使用的接口API,開發人員通過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。
null(2)數據處理層[1]:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。
它主要的目的是根據調用的請求完成一次數據庫操作。
(3)基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的東西
將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。
首先明白Mybatis的構建,它和JDBC最大的差別就是能夠實現半自動化,它的sql語句由很大的靈活性,能實現數據庫的數據交互。對于剛入門的新手比較好學習。
1.首先先導入mybatis-3.3.1.jar和mysql-connector-java-5.1.18-bin.jar兩個jar包。通過SqlSession語句來獲取數據庫信息,通過配置文件來構建SqlSessionFactory,之后再通過SqlSessionFactory打開一個數據庫會話。
'public SqlSession getSqlSession() throws IOException'
{
//通過配置文件來獲取數據庫信息
Reader reader=Resources.getResourceAsReader("Mybatis/config/Configuration.xml");
//通過配置文件來構建一個SqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//通過SqlSessionFactory打開一個數據庫會話
SqlSession sqlSession=sqlSessionFactory.openSession();
return sqlSession;
}
2.配置好xml文件,Configuration.xml文件是實現MyEclipse和mysql數據庫的數據交互
里面填寫你的數據庫類型,還有連接的數據庫名字,連接好你的數據庫驅動,然后還有你的用戶名和密碼
3.MyEclipse建立與數據庫表與之相對應的Bean
4.然后就是配置與數據庫表相對應的xml文件,我們與MyEclipse工具之間,實現數據交互也是通過里面的sql語句。(查看mysql數據庫的程序是Navicat for MySQL)
你要對哪個數據庫里面的多少張表進行操作,就建立與之相對應的多少個xml文件.
接下來是關于配置xml文件的一些標簽作用
<mapper namespace="mybatis.servce.IStudent">
<resultMap type="mybatis.bean.Student" id="Student">
<!-- 擁有主鍵的話就用ID標簽 -->
<id column="ID" jdbcType="INTEGER" property="id"/>
<result column="NAME" jdbcType="VARCHAR" property="name"/>
</resultMap>
</mapper>
namespace:xml文件的唯一的名字
type:你數據庫表對應的bean的位置
column:數據庫列的名字,也就是上面的ID(可能會改變)
jdbcType:列的屬性,數據庫里是int,這里用Integer
property:對應你bean層的屬性名字
接下來是xml里面對應的sql語句
<select id="queryStudentList" parameterType="mybatis.bean.Student" resultMap="Student">
select s.ID S_ID,s.NAME,t.ID,t.TEACHER,t.STUDENT_ID,g.ID,g.MATH,g.ENGLISH,g.CHCHINESE from Student s left join (Teacher t,Grade g)
on s.ID=t.STUDENT_ID and s.ID=g.STUDENT_ID where
<if test="name !=null and !"".equals(name.trim())"> s.NAME=#{name}</if>
</select>
先說明一下在配置xml中有幾種標簽與sql語句很相似
- select
- delete
- update
- insert
它們在這里是標簽,你使用哪種sql語句,就使用哪一個標簽,否則會出現錯誤
id:按我的話說就是方法名字,在這個XML文件中要唯一
parameterType:從外面傳回來的數據類型(只能有一個數據類型)
resultMap:返回的數據類型
中間則是sql語句
collection標簽:
一對多的意思就是,一條信息對于其他多條信息,比如一個學生被多個老師教過
association標簽:
一對一:一條信息對一條信息,比如人和身份證
多對一:多條信息對一條信息,各科學習成績和學生
!!!注意:千萬要把這兩個標簽區分看來,你的bean層也需要把各個信息都分開來
如果你出現一些空指針的錯誤,不妨在那里找找原因
Spring框架
Spring 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。
在這篇由三部分組成的 Spring 系列 的第 1 部分中,我將介紹 Spring 框架。我先從框架底層模型的角度描述該框架的功能,然后將討論兩個最有趣的模塊:Spring 面向方面編程(AOP)和控制反轉 (IOC) 容器。接著將使用幾個示例演示 IOC 容器在典型應用程序用例場景中的應用情況。這些示例還將成為本系列后面部分進行的展開式討論的基礎,在本文的后面部分,將介紹 Spring 框架通過 Spring AOP 實現 AOP 構造的方式。
在Myeclipse 10上添加Spring框架
選擇默認的就行
然后就得到一個applicationContext.xml
這里先簡單的寫一個Hello world
先建一個bean
配置applicationContext.xml
創建spring的ioc容器對象
ClassPathXmlApplicationContext是ApplicationContext的實現類,從類路徑來加載配置文件
注意:千萬不要導錯類
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
然后從IOC容器中獲取bean實例
利用id來定位IOC容器中的bean
//helloworld是你的applicationContext.xml得id值
HelloWorld helloworld=(HelloWorld) ctx.getBean("helloworld")
//調用bean的方法
helloworld.hello("spring123456")
接下來講的是另一種注入屬性值的方式
Json與Gson
JSON(JavaScript Object Notation)是一種輕量級的數據交換語言,以文字為基礎,且易于讓人閱讀,同時也方便了機器進行解析和生成。JSON簡單說就是javascript中的對象和數組,所以這兩種結構就是對象和數組兩種結構,通過這兩種結構可以表示各種復雜的結構,其可以將JavaScript 對象中表示的一組數據轉換為字符串,然后就可以在函數之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從Web客戶機傳遞給服務器端程序。JSON采用完全獨立于程序語言的文本格式,但是也使用了類C語言的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。
Json有兩種數據結構:數組和對象
對象:是指用{}中間的內容,其形式為{key:value,key1:value1,key2:value2}
k#ey為對象的屬性,而value為對象的屬性值,通過對應的key值來取出對應的value值
數組:是指用[]中間的內容,其形式為["java","javascript",servlet],跟java,c,c++等語言一樣的數組
可以通過下標,索引來取出對應的值
下面介紹Json與Gson的使用方法
首先我們先導入我們所需的包: (http://pan.baidu.com/s/1eSJ4mBK) 密碼:6j47
**Json的值也就是上面所說的value值,它有幾種類型,數字(包括整形和浮點型),字符串,邏輯值,數組,對象,null,它們可以直接使用,對應相應的key **
直接使用JSONObject對象
/**
* 直接使用JSONObject對象
*/
private static void JSONObject()
{
Object nullObj=null;
//創建一個JSONObject對象
JSONObject jsonObject=new JSONObject(); //很類似于Map<String,Object>,后面講到
jsonObject.put("name","小明");
//使用浮點型
jsonObject.put("age",25.2);
//json沒有Data類型
jsonObject.put("birthday","1990-10-01");
jsonObject.put("school","藍翔");
//數組類型
jsonObject.put("major",new String[]{"挖掘機"});
jsonObject.put("house", nullObj);
System.out.println(jsonObject);
}
其結果為
通過Map來使用json
/**
* 通過Map來使用json
*/
private static void createJsonByMap()
{
//創建一個Map對象
Map<String,Object> jsonObjectMap=new HashMap<String,Object>();
jsonObjectMap.put("name","王小二");
jsonObjectMap.put("age",25.2);
jsonObjectMap.put("birthday","1990-10-01");
jsonObjectMap.put("school","藍翔");
jsonObjectMap.put("major",new String[]{"理發","挖掘機"});
jsonObjectMap.put("house", null);
System.out.println(new JSONObject(jsonObjectMap));
}
下面推薦使用這種方法來使用json
/**
* 這個是通過bean的形式來使用json
*/
private static void createJsonByBean()
{
JSONObject jsonObject =new JSONObject();
//定義一個bean
Person person=new Person();
//調用set方法
person.setId("1");
person.setName("王小二");
person.setAge("18");
person.setSex("男");
//通過這個方法來使bean成為JSONObject對象
JSONObject j1=jsonObject.fromObject(person);
//判斷是否為空
if(!j1.isEmpty())
{
System.out.println(j1);
}
}
JSON也可以通過文件來讀取里面的jSON數據
public static void main(String[] args) throws IOException
{
public static void main(String[] args) throws IOException
{
//從文件中讀取json數據
File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
String content=FileUtils.readFileToString(file);
//解析成一個json對象
JSONObject jsonObject=new JSONObject(content);
//找到一個名為name的key
System.out.println(jsonObject.getString("name"));
}
}
JSON到這里就結束了
接下來是介紹Gson的使用:(Gson可以將下面四種數據類型轉換成json字符串)
類型一:JavaBean
類型二:List<JavaBean>
類型三:List<String>
類型四:List<Map<String,Object>>
private static void createGSON()
{
/**
* List<javabean>對象轉換json字符串
* 將json字符串解析成List<javabean>對象
*/
//創建一個bean對象
Person person=new Person();
person.setId("1");
person.setName("王小二");
person.setAge("18");
person.setSex("男");
person.setMajor(new String[]{"理發","挖掘機"});
//創建一個Gson
Gson gson=new Gson();
//將一個javabean轉換成json字符串
String jsonString=gson.toJson(person);
System.out.println("Json字符串:"+jsonString);
//將json字符串轉換成javabean
person=gson.fromJson(jsonString, Person.class);
System.out.println("bean:"+person.toString());
System.out.println();
/**
* List<String>對象轉換json字符串
* 將json字符串解析成List<String>對象
*/
List<String> list=new ArrayList<String>();
list.add("gson1");
list.add("json2");
list.add("json3");
//將List<String>對象轉換成json字符串
jsonString=gson.toJson(list);
System.out.println("Json字符串:"+jsonString);
//將json字符串轉換成List<String>
List<String> list2=gson.fromJson(jsonString,list.getClass());
System.out.println("List<String>:"+list);
System.out.println();
/**
* 將List<Map<String,Object>>對象轉換成json
* 將json字符串解析成List<Map<String,Object>對象
*/
Map<String,Object> map = new HashMap<String,Object>();
map.put("key1", "value1");
map.put("key2", "value2");
//將Map<String,Object>對象轉換成json字符串
jsonString=gson.toJson(map);
System.out.println("Json字符串:"+jsonString);
//將json字符串轉換成Map<String,Object>
Map<String,Object> map2=gson.fromJson(jsonString,map.getClass());
System.out.println("List<Map<String,Object>:"+map2);
}
Gson也能讀取JSON文件下的json字符串
public static void main(String[] args) throws IOException
{
//從文件中讀取json數據
File file=new File(ReadGson.class.getResource("/Json/wangxiaoer.json").getFile());
String content=FileUtils.readFileToString(file);
Gson gson=new Gson();
//JSON只能解析成它自己的Oject對象
//GSON能解析成自己的Oject對象
//正向生成的對象與反向解析的對象是一樣的話,可以確保兩個對象是一致的
Person person=gson.fromJson(content,Person.class);
System.out.println(person.toString());
}
最后的總結
在這一次夏令營中,我接觸到了許多的東西和許多的技術,這些是我平時學習所無法接觸到的,這一次活動,我深刻的體會到互聯網給人們帶來的便利和挑戰。互聯網它讓人們的生活變的更加方便,無論在哪個領域都有充斥的互聯網所帶來的效益,同時它也給人們帶來了許多巨大的挑戰,正如騰訊CEO,馬化騰所說,掌聲越熱烈,競爭越殘酷。無論是千億級的企業還是百億級的,如果沒有危機意識,那么就有可能一瞬間都會化為烏有.
而我們大學生也應該具有這種危機意識,正如上兩周學長所說,你們現在所學的技術,到企業中不一定會用上,可能會一點都用不上,所以你們在大學三年期間,要多接觸技術,無論是搞前端開發的,還是弄后臺開發的,兩者都會一點。明白它們是如何實現交互的,總而言之就是多多學習。
這三周來的學習,我懂得了,如何運用mybatis來實現與mysql數據庫的交互,mybatis是通過編寫xml文件來關聯上數據庫對應的每一張表,編寫好每張表的xml文件,然后在總表configuration.xml中進行關聯。基本掌握它的應用方法,要是更深層次的東西,比如源碼之類的,我就還是一頭霧水。然后接下來就是mybatis與spring的結合,spring和mybatis都是框架,
spring只是把mybatis的DB層給替換了(不知道是不是還可以替換其他的)。以上兩者我只能運用,然后更深層次的東西,例如上面所說的源碼,它們是通過動態代理和反射,來實現與數據庫的交互。
然后是實現與android前端傳值,在學習過程中,了解到與android前端傳值,需要JSON語句,而我又加緊時間來學習json,了解到json的好處,語法,排列規則,基本類型等,然后終于能基本運用json,其實我們一直進入一個誤區,當初我們認為服務器后臺與android前端是不能夠像網頁那樣直接傳輸數據,應該是使用一些特殊的方式來實現數據的交互。最后當我們發現,其實只能把后臺要傳輸到android前端的數據,轉換成json的語法,然后使用PrintWriter的write語句就能直接把后臺的值傳到android前端。在7月26號,我們首次嘗試著與android前端進行數據交換(簡單的數據交互),其中我們也遇到許多的困難,我們后臺一直接收不到前端傳過來的數據,這讓我們又一次懷疑自己,是不是自己的后臺又炸了。我們又再一次的仔細的檢查自己的后臺程序,然后android前端讓學長操作了一番,之后終于成功了!!!!android前端與后臺終于能進行數據交互了。我們幾個終于猶如一個小的團隊進行的開發工作,在最后進行前端與后臺終于能結合,看著自己的程序能在別人的電腦上跑起來,我們激動不已,欣喜若狂。這可能就是程序的魅力吧
在夏令營活動的時候,我應該是第一次給別人講解我所學的東西,可能是第一次有些緊張,再加上我學習的程度并不深,只能照著ppt和文章里說,不能完全拓展開來,想不出其他多專業詞匯。
通過這一次我也明白了給別人講解,首先要有扎實的基礎,這樣子才能在這個點拓展開別人的知識面,同時也使自己的基礎知識更加的穩固。希望以后我能完全說明白要講的東西,讓別人也能夠了解我所學的到底是什么東西。
總的來說,這應該是我至今的人生中第一次夏令營,在這次活動中,我學到了很多東西,學習到了如何懂得團隊合作,懂得如何與他人分工合作,更重要的是通過這次活動,我更加會自主學習,會想盡辦法去完成目標,會考慮如何的解決程序拋出的異常。這一切都是我至今為止都無法達到的高度。在今后的人生道路上我也能更上一層樓。