Java EE学习心得

12 篇文章 0 订阅
3 篇文章 0 订阅

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,当然,可以修改

 

如何使用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属性]

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&amp;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包:

  1. 首先要把上面的jar包导入工程中;
  2. 声明标签库:<%@taglib uri="/WEB-INF/lib/pager-taglib.jar"  prefix="pg"%>
  3. 使用类型包括有:单词查询多次查询

单次查询从数据库一次性把数据读取出来,而多次查询就是每次显示都从数据库查询得到数据

单次查询例子:

 


<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}&nbsp;&nbsp;</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>

       &nbsp;&nbsp; <ahref="${pageUrl}&pageNow=${pageNumber}">${pageNumber}</a>&nbsp;&nbsp;

    </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>

 

 

 

 


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值