⑴ 想學Java,我該學什麼
對於很多初學者來說,想學習java但是不知道從何開始,專業的課程也不知道在哪裡找,小蝸這里就給大家准備了一份java全棧開發的學習路線,可按照以下這份大綱來進行學習:
第一階段:Java專業基礎課程
階段目標:
1. 熟練掌握Java的開發環境與編程核心知識
2. 熟練運用Java面向對象知識進行程序開發
3. 對Java的核心對象和組件有深入理解
4. 熟練應用JavaAPI相關知識
5. 熟練應用JAVA多線程技術
6. 能綜合運用所學知識完成一個項目
知識點:
1、基本數據類型,運算符,數組,掌握基本數據類型轉換,運算符,流程式控制制。
2、數組,排序演算法,Java常用API,類和對象,了解類與對象,熟悉常用API。
3、面向對象特性,集合框架,熟悉面向對象三大特性,熟練使用集合框架。
4、IO流,多線程。
5、網路協議,線程運用。
第二階段:JavaWEB核心課程
階段目標:
1. 熟練掌握資料庫和MySQL核心技術
2. 深入理解JDBC與DAO資料庫操作
3. 熟練運用JSP及Servlet技術完成網站後台開發
4. 深入理解緩存,連接池,註解,反射,泛型等知識
5. 能夠運用所學知識完成自定義框架
知識點:
1、資料庫知識,範式,MySQL配置,命令,建庫建表,數據的增刪改查,約束,視圖,存儲過程,函數,觸發器,事務,游標,建模工具。
2、深入理解資料庫管理系統通用知識及MySQL資料庫的使用與管理。為Java後台開發打下堅實基礎。Web頁面元素,布局,CSS樣式,盒模型,JavaScript,jQuery。
3、掌握前端開發技術,掌握jQuery。
4、Servlet,EL表達式,會話跟蹤技術,過濾器,FreeMarker。
5、掌握Servlet相關技術,利用Servlet,JSP相關應用技術和DAO完成B/S架構下的應用開發。
6、泛型,反射,註解。
7、掌握JAVA高級應用,利用泛型,註解,枚舉完成自己的CRUD框架開發為後續框架學習做鋪墊。
8、單點登錄,支付功能,項目整合,分頁封裝熟練運用JSP及Servlet核心知識完成項目實戰。
第三階段:JavaEE框架課程
階段目標:
1. 熟練運用Linux操作系統常見命令及完成環境部署和Nginx伺服器的配置
2. 熟練運用JavaEE三大核心框架:Spring,SpringMVC,MyBatis
3. 熟練運用Maven,並使用SpringBoot進行快速框架搭建
4. 深入理解框架的實現原理,Java底層技術,企業級應用等
5. 使用Shiro,Ztree和Spring,SpringMVC,Myts完成企業項目
知識點:
1、Linux安裝配置,文件目錄操作,VI命令,管理,用戶與許可權,環境部署,Struts2概述,hiberante概述。
2、Linux作為一個主流的伺服器操作系統,是每一個開發工程師必須掌握的重點技術,並且能夠熟練運用。
3、SSH的整合,MyBatis,SpringMVC,Maven的使用。
4、了解AOP原理,了解中央控制器原理,掌握MyBatis框架,掌握SSM框架的整合。
5、Shiro,Ztree,項目文檔,項目規范,需求分析,原型圖設計,資料庫設計,工程構建,需求評審,配置管理,BUG修復,項目管理等。
6、獨立自主完成一個中小型的企業級綜合項目的設計和整體架構的原型和建模。獨立自主完成一個大型的企業級綜合項目,並具備商業價值。
第四階段:分布式與微服務課程
階段目標:
1.掌握前端框架VUE及Bootstrap的應用開發
2.基於SpringCloud完成微服務架構項目的開發
3.掌握NoSQL資料庫Redis的使用
4.掌握消息隊列RabbitMQ的使用
5.掌握Mycat資料庫中間件的使用
知識點:
1、Bootstrap前端框架、VUE前端框架、RabbitMQ消息隊列。
2、掌握Bootstrap前端框架開發、掌握VUE前端框架開發、掌握RabbitMQ消息隊列的應用、掌握SpringBoot集成RabbitMQ。
3、Redis緩存資料庫的應用、Java基於Redis的應用開發、基於SpringCloud微服務架構開發實戰。
4、掌握NOSQL資料庫Redis的安裝、使用,Redis客戶端的安裝使用,Java訪問操作Redis資料庫,Redis的持久化方案、主從復制、高可用。
5、掌握SpringCloud微服務架構的開發,注冊中心,網關配置,配置中心,微服務間通信及容器化部署。
6、項目文檔,項目規范,需求分析,資料庫設計,工程構建,需求評審,配置管理,BUG修復,項目管理等。
7、掌握資料庫中間件Mycat的應用,基於Mycat實現數據讀寫分離,高可用集群。
8、掌握項目開發的流程,按照項目開發流程完成基於微服務架構項目的需求分析,編碼開發。
java全棧開發學習路線思維導圖
⑵ spring mvc freemarker 怎麼讓指定的控制器不適用freemarker
先附上一個SiteMesh3+FreeMarker+SpringMVC例子/adaikiss/sitemesh3_freemarker_springmvc.zip下載後解壓,本地環境變數要有MAVEN,CMD進入工程目錄直接運行mvnjetty:run昨天花了一天時間來跟蹤調試springmvc,freemarker,sitemesh3,終於弄明白了大概的原理,最後解決了sitemesh中文(UTF-8)亂碼,ftl裝飾頁不被渲染的問題。sitemesh3是通過一個filter來對response進行攔截處理,在response提交之前,它會把response流里的數據備份起來,清空流,然後用request.getRequestDispatcher(裝飾頁URI).forward()來取得渲染後的裝飾頁,然後再把裝飾頁里的標簽替換成之前備份的對應內容。也就是說sitemesh不關心你的頁面是如何生成的,它只是將兩者拼接起來,不管你用的是JSP,Volocity,FreeMarker還是SpringMVC,Struts,wicket。這樣一來你就可以靈活地控制頁面的生成方式。你可以把sitemesh3當成一個中間瀏覽器,他使用用戶瀏覽器發送過來的request對象發送了兩次(或以上)請求,第一次是原來的請求,第二次是對裝飾頁面的請求,然後把這兩個請求結果拼接起來返回給用戶瀏覽器。看到這里,裝飾頁如果是FTL就不被渲染的問題也就有了解決方法了。只要自己寫一個過濾器對.ftl的請求用freemarker渲染一遍就可以了。由於我使用的是springmvc+freemarker,因此我直接拿springmvc來渲染FTL文件了,這樣可以像被裝飾頁一樣方便地使用spring的宏和其他一些對象。下面是我的filter復制代碼{privateLocalelocale;@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{StringlocaleStr=filterConfig.getInitParameter("locale");if(StringUtils.isNotBlank(localeStr)){locale=newLocale(localeStr);}else{locale=Locale.getDefault();}}@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{try{HttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;Stringname=req.getRequestURI();name=name.substring(1,name.lastIndexOf(".ftl"));=SpringContextHolder.getBean(FreeMarkerViewResolver.class);Viewview=viewResolver.resolveViewName(name,locale);@SuppressWarnings("unchecked")Mapmodel=(Map)request.getAttribute(ViewRendererServlet.MODEL_ATTRIBUTE);view.render(null,req,res);}catch(Exceptione){thrownewServletException(e);}}@Overridepublicvoiddestroy(){//TODOAuto-generatedmethodstub}}復制代碼在這里,我是把SpringMVC對被裝飾頁處理時生成的model傳到了裝飾頁。裝飾頁和原來被include進來的頁面差不多,一般裝飾頁可能不需要使用被裝飾頁中的model,可以把SuppressWarnings註解下面那行注釋掉,下面傳null過去。在web.xml里加上過濾器配置:復制代碼freemarkerFilterorg.adaikiss.kay.web.*.ftlREQUESTFORWARD復制代碼這樣一來由sitemeshforward的請求就能被攔截並渲染。當然,你也可以把裝飾頁的後綴改成.des,url-pattern要同步改。關於中文亂碼的問題,在跟蹤代碼的時候發現對於沒有contentType的view,SpringMVC會使用默認的contentType:AbstractTemplateView.DEFAULT_CONTENT_TYPE,即"text/html;charset=ISO-8859-1",view中可以設置這個屬性,不過我的配置里沒有定義view,還好ViewResolver里也可以設置,在springmvc配置文件里加上contentType屬性即可。
⑶ freemaker響應生成的靜態html頁面怎麼壓縮代碼
freemarker有語法:
1 <@compress single_line=true>
2 <html>
3 freemarker template技術
4 </html>
5 </@compress>
不過如果模板文件很多的話,通過這種方式有些費力,可以通過在servlet中增加filter過濾器來實現
⑷ 在 Java 程序中怎麼保證多線程的運行安全
零基礎學習java可按照這份大綱來進行學習
第一階段:Java專業基礎課程
階段目標:
1. 熟練掌握Java的開發環境與編程核心知識
2. 熟練運用Java面向對象知識進行程序開發
3. 對Java的核心對象和組件有深入理解
4. 熟練應用JavaAPI相關知識
5. 熟練應用JAVA多線程技術
6. 能綜合運用所學知識完成一個項目
知識點:
1、基本數據類型,運算符,數組,掌握基本數據類型轉換,運算符,流程式控制制。
2、數組,排序演算法,Java常用API,類和對象,了解類與對象,熟悉常用API。
3、面向對象特性,集合框架,熟悉面向對象三大特性,熟練使用集合框架。
4、IO流,多線程。
5、網路協議,線程運用。
第二階段:JavaWEB核心課程
階段目標:
1. 熟練掌握資料庫和MySQL核心技術
2. 深入理解JDBC與DAO資料庫操作
3. 熟練運用JSP及Servlet技術完成網站後台開發
4. 深入理解緩存,連接池,註解,反射,泛型等知識
5. 能夠運用所學知識完成自定義框架
知識點:
1、資料庫知識,範式,MySQL配置,命令,建庫建表,數據的增刪改查,約束,視圖,存儲過程,函數,觸發器,事務,游標,建模工具。
2、深入理解資料庫管理系統通用知識及MySQL資料庫的使用與管理。為Java後台開發打下堅實基礎。Web頁面元素,布局,CSS樣式,盒模型,JavaScript,jQuery。
3、掌握前端開發技術,掌握jQuery。
4、Servlet,EL表達式,會話跟蹤技術,過濾器,FreeMarker。
5、掌握Servlet相關技術,利用Servlet,JSP相關應用技術和DAO完成B/S架構下的應用開發。
6、泛型,反射,註解。
7、掌握JAVA高級應用,利用泛型,註解,枚舉完成自己的CRUD框架開發為後續框架學習做鋪墊。
8、單點登錄,支付功能,項目整合,分頁封裝熟練運用JSP及Servlet核心知識完成項目實戰。
第三階段:JavaEE框架課程
階段目標:
1. 熟練運用Linux操作系統常見命令及完成環境部署和Nginx伺服器的配置
2. 熟練運用JavaEE三大核心框架:Spring,SpringMVC,MyBatis
3. 熟練運用Maven,並使用SpringBoot進行快速框架搭建
4. 深入理解框架的實現原理,Java底層技術,企業級應用等
5. 使用Shiro,Ztree和Spring,SpringMVC,Myts完成企業項目
知識點:
1、Linux安裝配置,文件目錄操作,VI命令,管理,用戶與許可權,環境部署,Struts2概述,hiberante概述。
2、Linux作為一個主流的伺服器操作系統,是每一個開發工程師必須掌握的重點技術,並且能夠熟練運用。
3、SSH的整合,MyBatis,SpringMVC,Maven的使用。
4、了解AOP原理,了解中央控制器原理,掌握MyBatis框架,掌握SSM框架的整合。
5、Shiro,Ztree,項目文檔,項目規范,需求分析,原型圖設計,資料庫設計,工程構建,需求評審,配置管理,BUG修復,項目管理等。
6、獨立自主完成一個中小型的企業級綜合項目的設計和整體架構的原型和建模。獨立自主完成一個大型的企業級綜合項目,並具備商業價值
⑸ maven中使用freemarker,如何配置需要哪些配置文件
web.xml加上一下代碼:
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>NoCache</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html</param-value>
</init-param>
<init-param>
<param-name>template_update_delay</param-name>
<param-value>9</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>number_format</param-name>
<param-value>0.##########</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
<servlet>
⑹ 關於JSP的幾個問題
1 保存數據,然後馬上生成頁面,在頁面生成前,用戶是無法訪問到的。
這個方法最簡單,也最常見
2 靜態頁面可以刪除,這樣會造成用戶不能訪問,但是後台可以重新生成所有的靜態頁面,其實就是更新一下。刪了再建。 這個操作要慎重。
合並之類的,都是先在後台數據處理完畢,再重新生成就行了。
至於一些老的頁面無法訪問,沒有辦法,誰讓你合並的。
3 靜態化方法就不說了,可以過濾器,可以用freemarker等。
4 如果靜態頁面能半動態化,比如用js,ajax等動態裝載頁面的部分,你就可以只更新那個部分就行了。 如果是完整靜態化,你只能重新生成了。
其實css之類的,是外部文件。所以靜態化頁面的設計很重要。要兼顧以後的維護和更新,不是簡單的堆砌一個頁面就行了。
⑺ springmvc怎麼配置freemarker
一、從freemarker談起
Freemarker使用模板技術進行視圖的渲染。自從看了Struts標簽、Freemarker、JSTL的性能對比後,我毅然決定放棄Struts標簽了!效率太差……
Spring本身支持了對Freemarker的集成。只需要配置一個針對Freemarker的視圖解析器即可。
二、Spring MVC視圖解析器
視圖解析器的工作流程大致是這樣的:Controller的某個方法執行完成以後,返回一個視圖(比如:listUser),視圖解析器要做的工作就是找到某個對象來完成視圖的渲染,或者跳轉到其他的邏輯視圖。這里的渲染對象通常就是我們的jsp文件或者我們下面用的Freemarker(例如listUser.jsp或者listUser.ftl)。渲染完成以後,將解析結果發送到客戶端瀏覽器
下面介紹一下本文需要用到的解析器(更多解析器資料,請參考http://e-freya.iteye.com/blog/384083):
InternalResourceViewResolver:這是一個最常用的解析器。通常使用它指定渲染對象為jsp頁面
FreeMarkerViewResolver:這就是Spring與Freemarker整合需要用到的解析器
三、配置多視圖,支持freemarker
我們通常不希望所有的動態頁面請求都使用Freemarker來渲染,那就需要配置多個視圖解析器。網上有很多這方面的帖子。我看到很多人的做法是在web.xml中配置兩個DispatcherServlet,一個攔截*.do,一個攔截*.ftl;然後再寫兩個dispatcherServlet.xml,配置兩個視圖解析器;jsp頁面、ftl模板就各司其職。
其實沒有那麼復雜。
1.Web.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--========================================================-->
<!--SpringMVCConfigServlet-->
<!--========================================================-->
<!--JSPDispatcherServlet-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--========================================================-->
<!--SpringMVCConfigMapping-->
<!--========================================================-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2.dispatcherServlet.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!--通用視圖解析器-->
<beanid="viewResolverCommon"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/WEB-INF/page/"/>
<propertyname="suffix"value=".jsp"/><!--可為空,方便實現自已的依據擴展名來選擇視圖解釋類的邏輯-->
<propertyname="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
<propertyname="order"value="1"/>
</bean>
<!--配置freeMarker視圖解析器-->
<beanid="viewResolverFtl"class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<propertyname="viewClass"value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<propertyname="contentType"value="text/html;charset=utf-8"/>
<propertyname="cache"value="true"/>
<propertyname="suffix"value=".ftl"/>
<propertyname="order"value="0"/>
</bean>
<!--配置freeMarker的模板路徑-->
<beanid="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<propertyname="templateLoaderPath">
<value>/WEB-INF/ftl/</value>
</property>
<propertyname="freemarkerVariables">
<map>
<entrykey="xml_escape"value-ref="fmXmlEscape"/>
</map>
</property>
<propertyname="defaultEncoding">
<value>utf-8</value>
</property>
<propertyname="freemarkerSettings">
<props>
<propkey="template_update_delay">3600</prop>
</props>
</property>
</bean>
<beanid="fmXmlEscape"class="freemarker.template.utility.XmlEscape"/>
<!--註解支持-->
<mvc:annotation-driven/>
<!--對包中的所有類進行掃描,以完成Bean創建和自動依賴注入的功能-->
<context:component-scanbase-package="com.hl.usersmanager">
<!--允許定義過濾器將基包下的某些類納入或排除
<context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>-->
</context:component-scan>
</beans>
3.Controller
Java代碼
packagecom.hl.usersmanager.controller;
importjava.util.List;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.ui.ModelMap;
importorg.springframework.web.bind.annotation.RequestMapping;
importcom.hl.usersmanager.model.Users;
importcom.hl.usersmanager.service.IUserService;
@Controller
publicclassUserController{
//使用註解實現自動裝配不需要再寫getset方法以及在context中配置bean
@Autowired
;
@RequestMapping(value="findUserByName.do")
publicStringfindUserByName(Stringname,ModelMapmodel){
Usersusers=userService.findUserByName(name);
model.addAttribute("userPhone",users.getPhone());
System.out.println("userPhone:"+users.getPhone());
return"showUser";
}
@RequestMapping(value="findAllUsers.do")
publicStringfindAllUsers(ModelMapmodel){
List<Users>users=userService.findAllUsers();
model.addAttribute("users",users);
return"listUser";
}
……
}
在視圖解析器中有一個<property name="order" value="orderValue"/>的配置,這個配置表示解析器的優先順序別。我們將FreeMarkerViewResolver的級別設為0,將InternalResourceViewResolver的級別設為1。這樣,解析器就會優先使用 FreeMarkerViewResolver進行解析,如果找不到相應的模板,就使用InternalResourceViewResolver進行解析,如果還找不到頁面,就會產生一個404錯誤!
在本例中,我們在/WEB-INF/page/下有一個showUser.jsp頁面,在/WEB-INF/ftl/下有一個listUser.ftl的模板文件。那麼當訪問findAllUsers.do的時候,Controller返回一個listUser視圖,根據解析器配置,先使用FreeMarkerViewResolver進行解析。它會根據模板路徑templateLoaderPath的配置/WEB-INF/ftl/下去找是否有一個listUser並且以後綴配置suffix值.ftl,即listUser.ftl文件,如果找到則使用該模板進行解析。這里我們實現已經創建了這個模板文件,所以user列表成功被顯示出來。
當用戶訪問findUserByName.do的時候,返回showUser視圖,毅然先使用FreeMarkerViewResolver進行解析,結果發現在/WEB-INF/ftl/下並沒有showUser.ftl這個模板文件,於是使用InternalResourceViewResolver進行解析,於是開始尋找/WEB-INF/page/下是否有showUser.jsp文件。由於我們已經創建了這個文件,於是最終使用showUser.jsp進行渲染。那麼如果沒有找到showUser.jsp,就會拋出404錯誤。
這里還要注意的是,如果Controller中返回視圖加了後綴jsp或者ftl,在配置中就不要加入suffix配置,否則會找不到頁面。
⑻ tomcat 運行Ftl文件
ftl 是freemarker的模板文檔吧? 那你看看freemarker是怎麼配置的就行。 一般來說,要在web.xml中配置一個servlet或過濾器,來攔截請求,後台會讀取模板文件的內容,然後替換裡面的變數,再把內容返回到前端來。 跟使用Tomcat或其他的Web容器沒有直接關系。
⑼ 學習java需要什麼基礎
想通過自學掌握這門語言,這顯然是不太現實的,
Java的奧妙之深,之復專雜是很難衡量的屬,
而無論是網路上的Java教學視頻,還是書本里的知識都有一個循序漸進的過程,
學會一步後才能了解下一步,
如果問Java在沒有任何基礎的情況下自學多久能掌握,答案是很難學好。
學java不難,主要是有人帶你,跟著項目走那才能進步得快,才能入門,
否則自己學的不僅慢,而且不得重點。
而且這個行業已經人滿為患了,初級的已經不好找了,只能盡人事看天命了!
我個人的建議是,一定要有一個能指導你的人,能到專業的學校學會更好,
不能都靠自己閉門造車,這樣的行為並不聰明,
結識一位這方面的人才,時不時去問問人家問題,
不然你可能會發現一個小問題能困擾你一天,最後還不知道是什麼原因。
其實也可以去電腦學校參觀學習,多比較哈