⑴ 想学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不难,主要是有人带你,跟着项目走那才能进步得快,才能入门,
否则自己学的不仅慢,而且不得重点。
而且这个行业已经人满为患了,初级的已经不好找了,只能尽人事看天命了!
我个人的建议是,一定要有一个能指导你的人,能到专业的学校学会更好,
不能都靠自己闭门造车,这样的行为并不聪明,
结识一位这方面的人才,时不时去问问人家问题,
不然你可能会发现一个小问题能困扰你一天,最后还不知道是什么原因。
其实也可以去电脑学校参观学习,多比较哈