本文主要是介绍Java EE学习心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
–Java EE学习心得
1. 称为编程专家的秘诀是:
思考-----编程--------思考------编程……..
编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程,完事后,再思考 我编的程序还有那些不好的地方和要改进的地方,可以增加写什么功能等等;然后再去编程;
2. 先搭建整体框架再抠细节,在编程中不管是什么要先做出来,再去问怎么做!即是:先Know how 载 Know why;
3. 学习软件编程是在琢磨别人怎么做,而不是我认为应该怎么做的过程;
4. java EE内容介绍及学习顺序:
5. 书籍收藏:
JSP应用开发详解(第三版)
Struts 基于MVC的 java Web
精通Ejb(2.1或3.0【现在很多公司还在用2.1的这可选择购买】)
精通Hibernate 该书讲得比较细可以当做手册使用
Spring in Action 中文版
6. java EE基本部分:
①:(Servlet)
知识点:
0:Tomcat的安装,介绍使用
1:如何开发servlet
2:HttpServletRequest,HttpServletResponse
3:Cookie的原理和使用
4:HttpSession 的原理和使用
5:ServletContext的原理和使用
6:用户的增加,删除,修改
7:如何做一个网站计数器
。。。。。。。。。。。。。
②:(–)
知识点:
1:Jsp版本的用户管理系统;
2:网上商城
3:仿百度查询系统
4:留言本
包含的知识点有:
0:eclipse+myeclipse的安装介绍和使用
1:jsp的基本语法
2:jsp的九大内置对象
3:html
4:javascript
5:javamail技术
6:jsp标签/自定义标签
7:mysql数据库的安装和使用……..
7. java EE高级部分:
①:(Struts)
知识点:
1:手写版本的(非工具自动生成的方式)struts用户登录系统
2:Struts版本的网上商城
包含的知识点:
1:struts的原理和配置文件的介绍
2:如何使用eclispe开发struts
3:struts标签的使用
②:(Ejb)
知识点:
1:用非自动生成的方式(手写版)开发一个Session Bean
2:网上在线词典(SessionBean实现)
3:网上宠物店(EntityBean实现)
4:仿qq(jms java message service 案例)
5:使用(messagedriven bean 消息驱动bean完成远程后台调用不同程序)
包含的知识点:
1:三大bean的原理及使用
2:weblogic/jboss配置使用
3:jms的配置使用
4:数据源的配置使用
5:分布式开发模式
6:异步开发模式
③:(Hibernate)
知识点:
1:用非工具自动生成的方式(手写版hibernate)开发学生管理系统
2:用eclipse 3.2再次开发学生管理系统(struts+hibernate)方式开发
包含的知识点:
1:什么是对象持久化技术
2:使用hibernate的好处是什么
3:传统的三层开发模式向四层开发模式的介绍
4:如何配置hibernate(详细介绍hibernate.cfg.xml和对象映射文件)
5:如何使用hibernate对数据库进行增、删、改、查(分页)
6:struts和hibernate如何结合
④:(Spring)
知识点:
1:用非自动生成的方式(手写版本Spring)开发一个计算器【重在原理】
2:用eclipse3.2再次开发学生管理系统或时bbs(struts+spring+hibernate)方式开发,【所谓的SSH构架】
包含的知识点:
1:什么是IOC(控制反转)
2:什么是DI(依赖注入)
4:数据源的配置使用
5:分布式开发模式
6:异步开发模式
8. 动态页面技术:
jsp vs asp
9. b/s 与 c/s 比较
10. Servlet和jsp的开发工具:
11. 理解Tomcat在网络中的位置:
(Tomcat具有①:web服务器;②:jsp容器;③:servlet的容器)
12. servlet与jsp的网络拓扑图:
13. servlet 的开发流程:
①:在%TOMCAT_HOME%\webapps下WEB-INF的文件夹,写一个文件web.xml(该网站的配置信息…),建立一个classes的子文件夹,也可以从别的目录 例 ROOT目录下拷贝也可以;
②:开发servlet(引入servlet-api.jar)
③:部署你的servlet在web.xml文件中:
④:启动TOMCAT,访问你的servlet,在浏览器的地址栏中输入:http://127.0.0.1:8080/myWebSite/hello 回车就可看到servlet的输出
注意: 127.0.0.1是服务器的所在IP 8080是端口号,要根据实际情况而改变
14. servlet的开发方式:
①:通过实现接口Servlet的方式开发(实现Servlet中未实现的方法);
②:通过继承GenericServlet,只需要重写service方法,相对简单些;
③:通过HttpServlet开发servlet,需要重写doGet、doPost方法。这是目前用得最多的
一种方法;
第三种开发方式中的doGet和doPost的一些说明:
比较内容 | Get | Post |
①:安全性 | get < post,get提交数据会再浏览器的地址栏显示数据信息 | 安全性好 |
②:提交内容大小 | g et < post,get提交的数据不能大于2K, | post提交的数据理论上不受限制,但是实际编程中建议不要大于64K |
③:响应速度 | get > post ,get要求服务器立即处理请求 | Post请求可能相对较慢,请求可能形成一个队列请求 |
15. Servlet的生命周期:
init()初始化//当该servlet首次被访问时才会调用
destroy()摧毁、死亡//当服务器重新加载了Servlet或重启了服务器时该方法才会被调用;(手动调用销毁方法destroy()是不起作用的)
16. 解决网络传输的中文乱码的方法:
方法①: 此处要注意不要把“text/html;charset=gbk”的text与html顺序搞错,不然当访问时会弹出下载框,不在显示页面
res.setContentType(“text/html;charset=gbk”);
方法②:在tomcat 的conf 目录下的 servlet。Xml中是<ConnectorURIEncoding=utf-8>标签中添加一个属性
方法③:使用String 重新转码 :(因为java在网络传输中是以”iso-8859-1”编码传输,因此要转码才行)
String str=”中文”;new String(str.getBytes(“iso-8859-1”),”gb2312”);
乱码à新的解决办法和新的理解:
① 针对请求request的乱码 我们可以采取request.setCharacterEncoding(“utf-8”);只对pos请求起作用;
② 针对请求中的get的乱码我们可以再设置了方法①的同时修改服务器配置文件server.xml 把URiencoding=”utf-8”;
③ 针对渲染出乱码的情况可以把response.setCharacterEncoding("utf-8");
17. Servlet的使用方法
不管是实现接口servlet的方式 还是继承GenericServlet/ HttpServlet 类 在它们的类中都有类似的方法作为写逻辑代码的地方;每个方法的参数都有对应的两个参数,这两个参数在浏览器与服务器之间起着重要作用;如下:
①:实现接口Servlet 或者继承类GenericServlet的 类 :
方法:public void service(ServletRequest req , ServletResponse res){};
②:继承HttpServlet类 :
方法:
public void doGet(HttpServletRequest req ,HttpServletResponse res){};
public void doPost((HttpServletRequest req ,HttpServletResponse res){};
说明:以上方法的 参数 两两对应 作用效果是一样的
同一用户的不同页面共享数据:(重要技术)
1.cookie技术;
注意:在使用Cookie 时 name value 不能包含中文,不然会报传递不合法参数
如:例子
Cookie cookie=new Cookie(name , value);//参数类 String String
2.页面跳转的方法:
①:sendRedirect();转向(这种方法的效率并不高,下面会有提到另一个方法)
通过sendRedirect()这个方法传递数据
例子:response.sendRedirect(“url ? uName=value & password=value ”);/
/这里主要传递了两个参数 分别是别名为uName 和password 这两个参数,url为你要跳转页面的映射名字 当然在传递参数时必须要用“?”与url 隔开,传递多个则用 “&”隔开;
注意:解决sendRedirect();乱码问题,这是需要在接收处 做这样的接收处理:
u = new String(request.getParameter("uname").getBytes("ISO-8859-1"));
②:request.getRequestDispatcher(“要跳转的url”).forward(request,response);
说明:因为sendRedirect()方法效率不高,所有软件公司常常使用第②种方法即是(转发方法)
3.隐藏表单的提交
<form><input type=hidden name=名称 value=值>
</form>
4.session技术(功能:①:保存登录用户信息;②:将某些数据放入到Session中,供同一用户的各个页面使用;③:防止用户非法登录到某个页面)
说明:当用户打开浏览器,访问某个网站时,服务器就回在服务器的内存为该浏览器 分配一个空间,该空间被这个浏览器独占。
这个空间就是session空间,该空间中的数据默认存在30min,当然,可以修改
l 如何使用Session
①:得到session :HttpSession hs=request.getSession(true);
②:向session添加属性: hs.setAttribute(String name,Object value);
③:从session中得到某个属性: Stringname=hs.getAttribute(String name);
④:从session删除掉某个属性: hs.removeAttribute(Stringname);
l 情空 Session的方法 invalidate();[清空所有session属性]
l Session 的注意事项:
5.ServletContext技术:
如何使用ServletContext:
1. 得到ServletContext的实例
this.getServletContext();
2. 添加属性SetAttribute(String name,Object obj);
3. 得到值(Value):getAttribute(Stringname);//return Object
4. 删除属性:removeAttribute(String name);
5. s生命周期:从创建到服务器关机!
ServletContext的一些实际应用 :
1. 网站计数器
2. 网站在线用户的显示
3. 简单的聊天系统
4. …………
总结:如果涉及到不同的用户共享数据,而这些数据量不大,同时又不希望写入数据库,我们就可以考虑使用ServletContext来时实现。
ServletContext 的注意事项:
因为ServletContext存在于服务器端而且其中的数据会长时间存在服务器,会占用内存,因此我们建议不要向ServletContext放入过大的数据。。。。切记!
说明:①:可以理解ServletContext为在服务器的一个公共空间共享于所有客户,可以被所有客户访问;
示意图:
18. servlet中显示图片:
用到的就是html中的标签:
<img src=image/test.jpg >
pw.println(“<img src=image/test.jpg >”);
19. 分页技术:分页的算法:
我们需要定义四个变量,他们有各自的用处 :
int pageSize 每页显示多少条记录
int pageNow 希望显示第几条记录
int pageCount 一共有多少页
int rowCount 一共有多少行
说明:
pageSize 是指定的pageNow是用户选择的;
rowCount是从列表中的查询得到的;
pageCount 是计算出来的该计算式为:
if(rowCount%pageSize==0){pageCount=rowCount/pageSize;}else{pageCount=rowCount/pageSize+1;}
针对前面提出的的问题,我们可能很自然地想到,
用select 字段名列表 form 表名 where id between ? and ?
比如显示第三页,该查询语句就是:
select *from 表名 where id字段 between 7 and 9
这个sql语句确实是别较快,但是它有一个问题,就是如果表的id被删除了
那么,某项可能就会少一条记录。
因此我们的最终解决办法是如下语句:
select top pageSize 字段名列表 from 表名 where id字段not in (select top
pageSize*(pageNow-1) ) id字段 from 表名)
//该语句的含义就是:排除你希望的前面的记录条数 (select top
pageSize*(pageNow-1) ) id字段 from 表名)
20. Servlet操作文件:
Servlet中操作文件跟javaSE中操作文件一样;
21. TomCat的配置
1. 如何修改TomCat的端口
修改TomCat 根目录下/conf/server.xml文件中的port“8080” 把8080修改成您需要的端口号;
端口号的设置范围:一般实际范围是在 1~65535 (即是两个字节的范围(1~1024 则是有名端口 一般不去使用))
2. 如何设置虚拟目录
说明:由于情况需要我们的站点需要放别的目录下比如tomcat所在的磁盘空间不够,或者为了统一管理,希望放在特定目录下而不放在默认的tomcat根目录下的webapps下等待
具体做法:打开tomcat安装目录下的conf子目录,修改其中的server.xml 在<Context path=”” docBase=”” debug=”0”/>
3. 如何给TomCat 的管理员设置密码
在tomcat安装的目录下的tomcat-users.xml文件中可以给管理员设置密码,密码设置可以防止非法用户远程登录到tomcat。
4. 如何设置数据源和连接池(公司常用手法)
方法①:通过修改%Tomcat_Home%/conf/server.xml
在指定位置添加代码即可 代码文件》》
要使用到的类 : Context 类 ;javax.naming.InitialContext类 ; DataSource 类;使用方法:
//创建一个上下文环境对象
Context context=newjavax.naming.InitialContext();
//通过context 得到数据源DataSourceds=(DataSource) context.lookup(“java:comp/env/数据源的名字”);Con=ds.getgetConnection();//得到连接
方法②:通过tomcat管理界面来配置
22. JavaEE的十三种核心技术
①:JDBC
②: java命名接口和目录接口 JNDI
③:企业java Beans 简称:ejb
④:javaServer Pages JSP
⑤:javaServlet
⑥:java IDL/CORBA
⑦:java事务体系(JTA)/java事务服务(JTS)
⑧:javaMail
⑨:javaBeans激活框架(JavaBeans Activation Framework,【JAF】
十:java 信使服务(JMS)
十一:拓展标记语言(XML)
等。。。。
23. JSP(jsp=html+java片段+jsp标签+javascript(css))
1. Jsp的声明:
① :<%@.....%>指令
② :<%=.........%>表达式
③ :<%.........%>小脚本
④ :<%!.........%>声明函数
⑤ :<%--…..--%>注释(该注释在客户端是不可见的其是在服务器端注释的)
⑥ :<jsp:动作 > </jsp:动作>
2. Jsp网络拓扑图
jsp的运行原理:访问jsp的过程特别须要清楚:如果jsp文件是第一次被访问,jsp文件会被服务器翻译成一个对应的java文件(servlet),然后再被编译成 . class 文件并加载到内存中;如果是以后访问jsp,那么就直接调用内存中的jsp实例,所以第一次访问jsp慢,后面访问jsp的速度就会变快了。
Jsp和servlet是对应关系
Jsp是以servlet为基础的
3. 如何接收jsp页面提交的数据,并处理
可以使用jsp内置对象 request 的getParameter();取得数据
同时使用java片段表达式<%= %>
4. jsp中如何使用java片段
在jsp中通过使用标签<% ……%>嵌入java片段,同时java片段可以用jsp内置对象的out对象 的out.println();方法把内容显示到客户端(浏览器)
5. jsp中如何使用javascript完成对数据合法性的校验
在jsp中,我们可以在<head></head>标签之间嵌入<script language=”javaccript” > 在此使用<!—在这里面写javascript的函数 -->标签 </ script>标签
并可在html语言中随意调用 οnclick=”函数名称”
6. jsp的九大内置对象
(1): out //客户(浏览器)端输出数据,字节流
out.println(“ ”);
(2):request//接受客户端的http请求
getParameter(String name);//name表示表单的参数名 跟servlet很像
getParameterValues(String name);//使用得到是String【】
setAttribute(String name,Object obj);//设置名字为name的obj.值为obj
setAttribute(String name);//返回由name指定的属性值,如果不存在就返回null;
getCookie();
(3):response//封装jsp的产生的回应
addCookie(Cookie cookie);
sendRedirect(“welcome.jsp“);
(4):session //用于保存用户的信息,跟踪用户的行为
setAttribute(String name,Objectobj);
setAttribute(String name)
(5):application//多个用户共享该对象,可以做计数器
(6):pageContext //代表jsp页面的上下文
(7):exception//代表运行时的一个异常。
getMessage();
(8):page //代表jsp这个实例本身(使用比较少)
(9):config//代表jsp对应的servlet 的配置,可以得到web.xml中的参数
24. MVC开发模式的分工
M: 使用java class来做,也就是(数据层)也可以是java Bean、ejb等【Model模型】
V: 使用jsp 来做 (界面层或视图层)【view视图】
C: 使用servlet来做(业务逻辑层)【controller控制器】
25. JSP中的Session(为jsp内置对象之一)
本质上看jsp中使用的Session技术跟servlet使用的Session技术没什么区别,基本一样,只是jsp中Session作为了一个内置对像而存在。
26. JavaScriptJQuery Css
27. EL表达式:隐式对象:
El表达式中隐式对象的介绍:
JNDI的介绍(介绍使用tomcat服务器连接数据库)
1. 首先配置Context.xml文件到META-INF目录下
Context.xml文件如下:
<?xml version="1.0"encoding="UTF-8"?><Context><Resource name="jdbc/mysql" auth="Container"type="javax.sql.DataSource" maxActive="100" maxIdle="30"maxWait="10000" username="root"password="123456"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://127.0.0.1:3306/tuangou?useunicode=true&characterEncoding=utf8"/></Context>
2.得到数据源,得到connection
Private DataSource dbs=null;PublicConnection getConnection(){dDbs=(DataSource)new InitialConxtex().lookup(“java:comp/env/jdbc/mysql”);return dbs.getConnection();}
Pager_taglib分页标签库的使用
src包:
- 首先要把上面的jar包导入工程中;
- 声明标签库:<%@taglib uri="/WEB-INF/lib/pager-taglib.jar" prefix="pg"%>
- 使用类型包括有:单词查询和多次查询
单次查询从数据库一次性把数据读取出来,而多次查询就是每次显示都从数据库查询得到数据
单次查询例子:
<pg:pager maxIndexPages="5"maxPageItems="2" index="center"export="currentPageNumber=pageNumber"isOffset="${false}"><c:forEach items="${sessionScope.userList}"var="u" ><pg:item>${u.id } || ${u.uname } || ${u.address }<br/></pg:item></c:forEach><pg:first><a href="${pageUrl}">首页</a></pg:first><pg:prev><a href="${pageUrl}">上一页</a></pg:prev><pg:pages><a href="${pageUrl}">${pageNumber} </a></pg:pages><pg:next><a href="${pageUrl}">下一页</a></pg:next><pg:last><a href="${pageUrl }">尾页</a></pg:last>
多次查询:则需要提供的属性有:
url:指将要跳转的路径
items:指总记录数
export="currentPageNumber=pageNumber";
maxPageItems:指每页显示的记录数
maxIndexPages:指显示页数导航数;
isOffset:false表示忽略前面的记录数,true则相反
pager.offset:后面的值就是忽略的记录数 pager.offset=(pageNow-1)*pageSize;
例子:
<c:if test="${requestScope.userList==null}"><jsp:forward page="loadPage4.do"></jsp:forward></c:if><pg:pager url="loadPage4.do"items="${requestScope.rowCount}"index="center"maxIndexPages="5" maxPageItems="${sessionScope.pageSize}"export="currentPageNumber=pageNumber"isOffset="${true}"scope="request"><c:forEach items="${requestScope.userList}"var="u"><br>${u.id } || ${u.uname } || ${u.address }<br/></c:forEach><pg:index><pg:first ><ahref="${pageUrl}&pageNow=${pageNumber}">首页</a></pg:first><pg:prev ><ahref="${pageUrl}&pageNow=${pageNumber}">上一页</a></pg:prev><pg:pages><c:choose><c:whentest="${currentPageNumber==pageNumber}"><b style="color:red;">${pageNumber}</b></c:when><c:otherwise> <ahref="${pageUrl}&pageNow=${pageNumber}">${pageNumber}</a> </c:otherwise></c:choose></pg:pages><pg:next><a href="${pageUrl}&pageNow=${pageNumber}">下一页</a></pg:next><pg:last><ahref="${pageUrl}&pageNow=${pageNumber}">尾页</a><script type="text/javascript">var countNumber=${pageNumber}*1;</script></pg:last></pg:index>·<br/>请选择显示记录条数:<select id="SelPsize" onchange="changeSize();" ><option value="0">--请选择--</option><option value="1">1</option><optionvalue="2">2</option><optionvalue="3">3</option><optionvalue="5">5</option><optionvalue="8">8</option></select>跳转到<input type="text" id="jumpPageV"/> <input type="button"onclick="jumpPage()" value="页"id="jumpPage"/></pg:pager></body><script type="text/javascript">function changeSize(){varpageSize=document.getElementById("SelPsize").value;//alert("selPageSize:"+selPageSize);window.location.href="changePs.do?pageSize="+pageSize;}function jumpPage(){var pageNow=document.getElementById("jumpPageV").value;if(pageNow!=null&&pageNow!=""){if(!isNaN(pageNow)){if(pageNow>0&&pageNow<=countNumber){varoffset=((pageNow*=1)-1)*${sessionScope.pageSize};window.location.href="loadPage4.do?pager.offset="+offset+"&pageNow="+pageNow;}else{alert("数值范围必须在【1--"+countNumber+"】之间!");}}else{alert("非数值类型!");}}else{alert("数值不能为空!");}}</script>
1. 新建一个类继承对应的监听接口 如:HttpSessionLinstener
2. 到web中配置下;
<listener><listener-class></listener-class></listener>
这篇关于Java EE学习心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!