java应该这么学.docx
- 文档编号:7988450
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:8
- 大小:21.07KB
java应该这么学.docx
《java应该这么学.docx》由会员分享,可在线阅读,更多相关《java应该这么学.docx(8页珍藏版)》请在冰豆网上搜索。
java应该这么学
相当一部分时间不会讲太多Web方面的东西,只是把它当成一个展示界面而已。
为什么不用AWT、Swing,Eclipse下没有合适的可视化设计工具。
咱们把主要精力放到后端更有差异性的逻辑上,比如JDBC数据库访问、XML解析、Java中反射/面向对象/设计模式等高级特性、Java流、文件处理、网络编程、多线程、数据结构(链表、散列、树、堆栈)算法、编译原理等上,而不是界面上。
将要安排的项目:
自己动手写在线Eclipse、自己动手写SQL查询分析器、自己动手写论坛、自己动手写Struts。
为什么不直接上来就学Struts?
为了尽可能的不变成代码工人。
我在培训机构兼职,遇到很多学生上来Servlet没学过、JSP没学过,上来就学Struts,JDBC没学过、SQL没学过,上来就学Hibernate,只会用Struts、Hibernate这些工具模仿着实现一些固定的功能,一旦涉及到深层次的问题,就一脸茫然。
咱们如鹏是避免大家成为代码工人,所以会把很多精力放到这些基础的东西上,可能人家学Struts一天就能做出来很酷的东西,也许你学这些基础的东西一个月也达不到他的效果,但是记住越是容易得到的越不值钱,等到他把Struts玩儿的很熟的时候你已经能自己动手写Struts了,谁能够进入更高档次的高位、拿更多的工资就不言而喻了。
第一个Web程序:
用到的Jar下载
搭建第一个Web工程
1、
创建一个Java工程,工程下创建一个文件夹lib
2、
将jettylib1.zip解压到lib目录下,回到Eclipse刷新一下lib目录
3、
在工程MyfirstWeb1上点击右键,选择Property,在打开的对话框中选择JavaBuildPath,切换到Libraries页,点击【AddJars】,选择所有刚才解压的jar文件。
4、
以后给大家提供一些jar包,大家模仿上面的步骤添加就可以。
以前没学过加第三方jar。
(第三方提供的扩展Java类库的类库,简化开发)
5、
在src下新建【package】名字是“com.rupeng”
6、
在“com.rupeng”上创建Class“StartServer”
7、
添加入口类:
packagecom.rupeng;
importorg.mortbay.http.SocketListener;
importorg.mortbay.jetty.Server;
importorg.mortbay.jetty.servlet.ServletHttpContext;
publicclassStartServer
{
publicstaticvoidmain(String[]args)
{
Serverserver=newServer();
try
{
SocketListenerlistener=newSocketListener();
listener.setPort(80);
server.addListener(listener);
ServletHttpContextcontext=(ServletHttpContext)server.addContext("/");
server.start();
}catch(Exceptione)
{
e.printStackTrace();
}
}
}
所有的Servlet都从HttpServlet继承。
添加从HttpServlet继承的Servlet
实现doGet方法
将Servlet添加到Context中
context.addServlet("/test/*","com.rupeng.TestServlet");
表示用户请求test这个地址的时候由TestServlet来处理,而TestServlet则是doGet方法来处理。
doGet方法中req表示请求、resp表示回应
启动,养成以Debug方式启动的好习惯。
DebugAs方式启动的好处:
可以设置断点;可以实现代码热替换(每次改完代码以后立即生效,不用重启程序!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
)
Servlet是什么?
提供Web显示服务的类。
StartServer是一个包工头,遇到任务的时候会把任务分发给合适的Servlet,所以Servlet就是干活的。
遇到test请求的时候由TestServlet来处理。
处理请求的还是方法,doGet方法来处理
Request:
接受任务;Response:
把任务完成返回
System.out.println();是向控制台输出
resp.getOutputStream().println("你好");是向浏览器输出
可能遇到的错误:
Addressalreadyinuse:
JVM_Bind]
端口被占用
再添加一个长工“HelloServlet”,为什么不重启不行?
热替换的前提条件之一是:
代码被执行以后才会热替换,只有干活的时候哦热替换才起作用。
StartServer中main的代码只会执行一次,所以必须重启。
用户请求test的时候,由testservlet(提供web显示服务)来执行
打开:
http:
//127.0.0.1:
8080/test
127.0.0.1什么意思?
本机地址。
回环地址localhost,ipconfig
JSP和Servlet的关系是什么。
JSP会被编译成Servlet。
JSP是C语言、Servlet是汇编语言。
Struts是不用写代码的自动生成C语言代码的代码生成器。
又学到了一通百通的东西了。
上档次了!
弄明白底层,工资非常高!
!
!
人家不都是开发JavaWeb程序用Tomcat吗?
咱们怎么没用?
Tomcat只是JavaWeb服务器的一种,JavaWeb服务器就是一个放置Servlet的服务器,Servlet只是一个普通类,用户来了由JAvaWeb服务器来调用Servlet,所以JavaWeb服务器是包工头,StartServer就是一个小型的Tomcat。
用Tomcat的话会花在很多时间在环境配置上,也许配置一个礼拜了都运行不起来,很打击自信心,所以我的指导原则是5分钟之内就要能跑起来,所以我采用Jetty来代替Tomcat,具体原理大家现在不用关心,等时机成熟的时候我会像教大家怎样用10分钟从C-Free一通百通到VC一样用10分钟教大家从Jetty一通百通到Tomcat。
下一节课讲表单提交数据到Servlet,对HTML不熟悉的同学请看如鹏网的《自己动手写网站》的视频教程。
必须达到手写HTML的水平《自己动手写网站》。
板书:
1、
带一个参数的SayHelloServlet
http:
//127.0.0.1/test?
name=kider
?
参数名=参数值
getParameter:
Parameter(参数)
编辑代码的时候快速保存的快捷键:
Ctrl+S
为什么是字符串类型?
Http协议本质论。
很多直接用Struts的人根本不知道背后发生了什么,发生了很多笑话。
2、
带多个参数的AddServlet
Alt+/:
自动代码提示
传递多个参数,在各个参数组之间用“&”分割
http:
//127.0.0.1/love?
boy=tom&girl=lily
3、
通过HTML页面向Servlet提交数据(不放入工程,直接点击运行)
HTML有头Head、有身体Body
表单:
form。
Pleasefilltheform。
注册、登录都是一种申请,都需要Filltheform。
action=http:
//127.0.0.1/love
表示表单要提交给谁处理。
否则大街上随便有人给你表单,你填了都不知道给谁
乱码问题,后面的课程
4、
Get与Post,如果做到GetPost统一?
service。
如果信息太多的话,GET方式URL太长了,浏览器能够处理的URL长度是有限的。
传递文件内容等的时候GET是不可以的。
method="Post"
GET、POST区别之一:
能不能在URL里边看到参数的值。
很多公司面试求职的常考题。
Post和get的区别。
长度限制、提交的内容。
信息隐藏。
学习Web开发就要有手写HTML的能力。
Form的action什么意思,input、type。
代码重复了!
DRY。
Don’tRepeatYourSelf。
以后写Servlet统一都使用service方法,不用doGet、doPost了。
5、
如何将HTML融入工程?
addWebApplication("/","WebContent")
6、
实现登录页面(不连接数据库)
7、
Add
一切都是字符串,转换成数字需要程序员自己处理
课下作业:
1、
容错处理:
字段为空、非法数字
1、
在线算命
板书:
1、
容错处理:
字段为空、非法数字
NumberFormatException
N1变量的作用域问题。
一个变量的作用域是:
大括号。
变量的初始化。
为什么Eclipse报错是“maynotbeeninitialized”。
为啥是“可能未初始化”。
Null和空字符串””是不一样的
2、
在线算命
3、
如何实现提交页面和展示页面类似?
两个页面
Http的特性:
无状态!
!
!
服务器不记得上次浏览器提交的内容和返回给浏览器的内容。
非常健忘。
判断是直接显示form内容还是提交的处理
自己提交给自己,但是由于Http无状态,笨到自己都不认识自己:
通过这个理解Http的工作机制。
代码是运行在服务端的,客户端只负责显示。
把Submit用起来
自己实现PostBack机制,很少有人明白,到了A中的IsPostBack。
咱们已经很NB了!
下节课安排:
(和Web没有直接关系,是Java的基本知识和数据结构的基本应用)
提前复习《数据结构》中关于散列表和散列算法的内容
用两个数组实现简繁转换。
散列表的应用与散列算法
简繁体翻译功能。
1、
把字典定义为“键-值对”(Key-ValuePair)的集合。
在英汉字典中,英文单词是名字,此单词的中文解释条目是值;在电话簿中,人名是名字,此人名对应的电话号码是值。
从字典中查找“键-值对”的最简单方法就是使用数组存储
2、
classKeyValue
{
publickey;
publicvalue;
}
KeyValue[]kvArray;
Stringeng[]=newString{"book","computer","money"};
Stringchn[]=newString{"书","电脑","钱"};
Strings="北京欢迎你";
for(inti=0;i { System.out.println(s.charAt(i)); } for(inti=0;i { charch=text.charAt(i); intpos=charSC.indexOf(ch); chartcCH; if(pos==-1) { tcCH=ch; } else { tcCH=charTC.charAt(pos); } System.out.print(tcCH); } O(n*n) 344毫秒 3、 使用数组方式实现简繁转换。 字典文件: jianfan.txt a) 性能测试: 翻译一篇100字的文章。 算法计时的方法 4、 哈希表与散列算法复习 哈希方法在“键-值对”的存储位置与它的键之间建立一个确定的对应函数关系hash(),就是key向value的换算关系;使得每一个键与结构中的一个唯一的存储位置相对应: 存储位置=hash(键) Value的位置=hash(key) 有一组“键值对”: <5,”tom”>、<8,”Jane”>、<12,”Bit”>、<17,”Lily”>、<20,”sunny”>,我们按照如下哈希函数对键进行计算: hash(x)=x%17+3,得出如下结果: hash(5)=8、hash(8)=11、hash(12)=15、hash(17)=3、hash(20)=6。 我们把<5,”tom”>、<8,”Jane”>、<12,”Bit”>、<17,”Lily”>、<20,”sunny”>分别放到地址为8、11、15、3、6的位置上。 当要检索17对应的值的时候,只要首先计算17的哈希值为3,然后到地址为3的地方去取数据就可以找到17对应的数据是“Lily”了。 算法复杂度(查询)。 O (1)。 大大加快数据的查询速度。 还有看不明白的回去看《数据结构》的教材。 5、 将数据采用哈希算法进行保存的数据结构就是哈希表,常见操作put、get、remove。 6、 先不管范型 7、 Java中的HashMap使用(Java内置的哈希表数据结构) HashMap的主要方法 intsize(): 得到Map中“键-值对”的数量 booleanisEmpty(): Map是否是空的,也就是是否不含有任何“键-值对” booleancontainsKey(Objectkey): Map中是否含有以key为键的“键-值对” booleancontainsValue(Objectvalue): Map中是否含有以value为值的“键-值对” Objectget(Objectkey): 从Map中得到以key为键的值,如果Map中不含有以key为键的“键-值对”则返回null Objectput(Objectkey,Objectvalue): 向Map中存储以key为键、value为值的“键-值对” Objectremove(Objectkey): 从Map中移除以key为键的“键-值对” voidclear(): 清除所有“键-值对” SetkeySet(): 得到所有的键 Collectionvalues(): 得到所有的值 SetentrySet(): 得到所有的“键-值对”,Set中的类型是Map.Entry 8、 工号查询;枚举工号; 9、 使用HashMap改造简繁转换并进行性能测试 //为什么算法复杂度由O(n*n)变成O(n),但是实际执行时间没有明显的变化 //print,数据在CPU、内存中运算都非常快,一旦与外设(打印机、网络(网卡)、显示设备(显卡))交换数据,速度就会慢很多。 《操作系统》、《计算机组成原理》里边讲的。 更多内容参考杨中科的《J2EE开发全程实录》第二章。 课下作业: 简繁转换web版词库我会放到板书附件里 火星文翻译器(web版) 下节课安排: 开发自己的JianFan4J(自己动手写开源项目,自己动手写类库,用工具的人变成造工具的人) 打包成jar供别人使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 应该 这么