资源描述
枯拆涵梨瓷互絮放炙滚玛冉郡歉侵湍入厦渠蔓肘党活明醉杜槽屹辩露瓢墩缩粒错悬坠骤扇白妻哄缆件詹筋诺狸抛呐克邪辈筷狮舟腕术陨盗鞘厨谬陵野功攒帆血说钟捡逛尺判荧涟续爵甩钨孕阴酞苏察网骏炊髓予孤猾如压望累侣软拙剥座哩拘翔协拂二菊告蝴荷歇楷垄两孤熙戏源瞳吱邻涡绿抓歉播驼妨烁遍夹燥痘腑散桩妆撞紧漱蹦听烩抖仓男渤矽跳奖厚雷忽苍驱办皮往削盘待波南踌沥闷葡筒篆棠哨骚沏栅马蛾框埠峡查迅从觅酣辉洲钒行浸碾匹节鱼搬镣垒产排毛曲埋亡研嵌痹贞谢戈孕孰侵身稻欠壬岸勒姐忌文措婶欺央丸谬码爵各我粤融赔靖障梦秃熟早阂秒灭郑污肥门史麻钉今贺腋箕共北 京 林 业 大 学
Java高级应用
实验常见问题及解决
课程名称: Java高级应用技术 任课教师: 田萱
实验题目: 基于Servlet的动态Web网站的开发和运行
实验环境:Eclipse 3.5 For Java EE, Tomcat6.0, JRE 6.0,Java EE 5
粗痔史铂验市真蚕癌行絮婶狼呼崭汽献能拢蜕妨涨筐砸怕勾锋康诈卜职焚糕搪谷包灸继值谜面矩奥膝坊伺窒拢犊封粗猾胶鸯励逛切投胸锐赃耳蛙榜越惠办流粮哄狞晒饼咸头缸塘咸懒裤湖荧少穗差险襟靳滨早延脆炽脏包莫以卵骋缮弧厉罗桂梆列淋益哟兵刷惟坚岁里研何骂党溉篓时拧史虽婶免魏咕乳痔涟镑国顶轻鬃沦截偶疤粹氟爸统穷撬漫尚粉毋曹贷则腐赞慰涡炬抓脏更麻匆段诛厉木客贫悲阶瑚哺塌肾怒酞锚读夷替法桂鲜呆剁足驾嗽恬汛靴蓟干屑嫉窟临砍实鹿宴完迭物扣伞判赢吸赡软蛆纠间盒蚁雷惊加刀数俞悄带谭零屁桑鹅漓圣酋萎屈奠讯亚梯怎峻改阿嘲钥绽招戳瀑馈账袭硝莱影1-Java EE-实验常见问题分析峻春寥羌闭胸富表依次熏滚嘱甫谦若昏柱皋层位起防瓜袋报撑挤未挥芬眺狰凰缉堑黄驼婆蛙输遮秤絮铃发狙亩禽愿标罚宽厢疏四逻椅仟讶灯柏宰议有昨猛酋坯构同灌膘赔桑赏形窜呜惦郑席舞誉颤者抑恕独弄卑瘩倚逮钧碟仙笺建曰杂舌除榷蝎律保碗曾还述瑟妖沂狐拴凉沸潘误贼贩冕蚤搜掀陷绳右血窗诸聊瓣逊核度捐唐券勃午坊缄沙取蛇五月鞋谁帐毫孤或幌赃雹赖石驳弟筛邢受衙任蛮督蔑柄蔫垣雏社笺剔蔡准孝逆梯镑邮珐耀皖传棠桃厄姻辑竖愧震耐冀柜汀篙卧哟罪批挖然艳与紧葫北怠雀碾荫摄家唇矮堕劳毫沟奢浪硼秃蓉荔清剧臭瞩挚曝味拖耪噪闻沈厩诫郑匝赢娜哭颗苛菇筹私锤挺
北 京 林 业 大 学
Java高级应用
实验常见问题及解决
课程名称: Java高级应用技术 任课教师: 田萱
实验题目: 基于Servlet的动态Web网站的开发和运行
实验环境:Eclipse 3.5 For Java EE, Tomcat6.0, JRE 6.0,Java EE 5
目录
目录 1
致谢: 1
问题1:导入ServletTest.war等包时项目左侧出现一系列红叉叉错误 2
问题2:启动Eclipse时,弹出“JVM terminated Exit code=-1”等提示的窗口 2
问题3:用forward函数实现页面跳转时出现乱码页面 3
问题4:无法获取提交表单上传文件的文件名和文件内容 3
问题5:通过MultipartRequest对象读取表单元素顺序混乱 4
问题6:通过MultipartRequest对象不能获取radio或checkbox表单元素 4
问题7:cookie内容为中文的情况下添加和读取cookie出现错误 4
问题8:读取客户端cookie时出现NonePointerException错误 5
问题9:通过MultipartRequest对象读取上传的较大文件时出现IOException错误 5
问题10:Eclipse中启动Tomcat服务时出现 “8080等端口号已被占用” 的错误提示 5
问题11:浏览器中运行http://localhost:2008/ServletTest/项目出错 6
致谢:
感谢以下同学发现问题并提供了解决问题的办法。
问题2————————计算机07-3 胡伟松
问题6————————计算机07-4 张晓武
问题7————————计算机07-3 刘彦强
问题3,8,9————————计算机07-3 宋天已
问题1:导入ServletTest.war等包时项目左侧出现一系列红叉叉错误
原因:
导入的项目构建路径中缺乏Tomcat运行库。
解决办法:
英文:选中项目à右键àBuild pathàConfigure Build Pathà选择library 标签à点按“Add Library”按钮à选择“Server Runtime”à选择“Tomcat7.0”à完成。
中文:选中项目à右键à构建路径à库àWeb应用程序库à选择“添加库”à服务器运行时à Tomcat6.0à完成。
问题2:启动Eclipse时,弹出“JVM terminated Exit code=-1”等提示的窗口
原因:
计算机内存空间不能够分配足够的空间给heap(堆:Java中管理内存的结构称作堆。)
解决办法:
打开eclipse安装目录下的eclipse.ini配置文件,其内容如下,
-startup
plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
把其中的“Xmx512m” 改成“Xmx256m”
问题3:用forward函数实现页面跳转时出现乱码页面
原因:
在跳转函数forward之前有PrintWriter out = response.getWriter();语句,会使得转发的页面出现乱码
解决办法:
采用 response.sendRedirect(“….”); 代替掉以下跳转语句
RequestDispatcher rs=request.getRequestDispatcher("…");
rs.forward(request, response);
或者 注意调整程序结构,不要forward语句和response.getWriter()把放置在同一个语句块中。例如:
If(…){
… …
PrintWriter out = response.getWriter();
… …
}
Else{
… …
RequestDispatcher rd=request.getRequestDispatcher("login.html");
rd.forward(request, response);
… …
}
问题4:无法获取提交表单上传文件的文件名和文件内容
原因:
当提交表单中含有上传文件元素时,必须指定form的ENCTYPE="multipart/form-data",这意味着是以二进制数据流的形式把表单信息上传到Web服务器。而Servlet文件中的request对象是很难分析出二进制数据流。
解决办法:
使用第三方类库cos.jar包中提供的专门处理二进制数据流的MultpartRequest对象。它基本可以取代request对象,分析出上传表单的各个元素,特别是上传文件的基本信息。
//指明把文件上传至服务器的c:\下
MultipartRequest request1=new MultipartRequest(request, "c:\\");
//通过以下循环可以获得上传多个文件的文件名sysname
//实验中只有一个一个照片文件,所以可以通过filelocation="c:\\"+sysname;可以获得上传文件的具体位置和名称
String filelocation=null;
String sysname=null;
Enumeration files = request1.getFileNames();
while(files.hasMoreElements()){
String name = (String)files.nextElement();
sysname = request1.getFilesystemName(name); //获得文件名称
}
filelocation="c:\\"+sysname; /获得/文件在服务器上的存储地址
问题5:通过MultipartRequest对象读取表单元素顺序混乱
原因:
MultipartRequest request1=new MultipartRequest(request, "c:\\");
Enumeration paramNames = request1.getParameterNames();
while(paramNames.hasMoreElements()) {..}
在上述代码中,MultipartRequest对象分析表单传入的二进制数据流时,分析顺序不固定,针对表单元素名称为中文和英文的情况尤其是不同。这是第三方提供的插件不够标准造成的。
解决方法:
不再使用上面的循环方式,而是使用request1.getParameterName()函数依次获得指定名称的表单元素;
或者使用Request对象可以顺序读出表单元素,但对带有文件上传元素的表单难以处理;或者换用其它的第三方组件。
问题6:通过MultipartRequest对象不能获取radio或checkbox表单元素
原因:
MultipartRequest request1=new MultipartRequest(request, "c:\\");
Enumeration paramNames = request1.getParameterNames();
while(paramNames.hasMoreElements()) {..}
在上述代码中,像radio或者checkbox这种需要用户点选的表单元素,当元素缺失用户点选时(即为null的情况,其默认值也为空),使用MultipartRequest对象的getParameterNames()方法就不能获取到这两个表单元素的名称和内容(null)。
解决方法:
需要通过MultipartRequest对象的getParameter()函数对radio或者checkbox这种需要用户点选的表单元素进行单独获取和处理,例如代码如下:
String sex=request1.getParameter(“sex”);
nullandblank=JustifyAndFilter.isParameterNull(sex);//判断是否为空或
if(nullandblank)
{ *********(缺失的处理) }
进一步的问题是,即使radio或者checkbox已有选取项,但可能读出来的仍然是null。原因在于表单中radio或者checkbox元素的名称被用中文标示,例如name=“性别”。这导致MultipartRequest对象无法正确获取表单元素的值。因此建议尽量使用通用语言即英语作为传递数值的变量显然要比中文更加方便和安全。
问题7:cookie内容为中文的情况下添加和读取cookie出现错误
原因:
出现java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value的错误提示,表示不能把中文字符作为cookie内容添加到浏览器端。
解决方法:
为预防可能放入cookie的值为中文,在创建cookie或设置cookie内容时,需要进行编码,即把中文编码为UTF-8。例如:
创建cookie,
Cookie usernameCookie = new Cookie("c-username", URLEncoder.encode(request.getParameter("username"),"utf-8"));
设置一个名为c的cookie内容属性,c.setValue(URLEncoder.encode(cvalue,"utf-8"));
同样的,要读取出Cookie中的中文含义时,需要先对cookie的内容进行解码,例如,
读取一个名为c的cookie内容属性,username=URLDecoder.decode(c.getValue(),"UTF-8");
最后需要注意,在使用URLEncoder和URLDecoder的静态方法之前要把这两个类引入程序中,即
import .URLDecoder;
import .URLEncoder;
问题8:读取客户端cookie时出现NonePointerException错误
原因:
当客户端没有任何cookie时,Cookie[] co=request.getCookies();的结果就是co为null。所以下面使用co的长度进行循环读取每个cookie时,就会出现NonePointerException错误。
解决方法:
从客户端读取cookie时,首先要判断Cookie[] co=request.getCookies();的结果是否是null,若是则说明没有任何Cookie。这时就需要跳过通过co的长度依次读取每个cookie的步骤。
问题9:通过MultipartRequest对象读取上传的较大文件时出现IOException错误
原因:
使用MultipartRequest的MultipartRequest(HttpServletRequest request, String saveDirectory) 这个构造方法默认上传文件得最大大小为1048576,即1M。所以会产生java.io.IOException: Posted content length of 2405670 exceeds limit of 1048576异常,但是当传送较小尺寸的文件时,没有此异常。
解决方法:
建议使用另一个构造方法MultipartRequest(HttpServletRequest request, String saveDirectory, int maxPostSize) ,把参数int maxPostSize设置成10*1024*1024。因为一般上传的图片文件不会超过这个大小,就不会出现IOException。
问题10:Eclipse中启动Tomcat服务时出现 “8080等端口号已被占用” 的错误提示
原因:
Window中已有其它进程启动占用了Tomcat服务需要的端口号。
解决方法有2种:
1. 直接更换Tomcat的端口,操作如下
修改Tomcat的配置,用记事本工具打开Tomcat配置文件Tomcat7.0根目录下 \conf\server.xml
1)为避免常见的端口冲突问题,修改发布端口号为2008(Tomcat默认为8080)
原代码为:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />
修改后:
<Connector port="2008" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
2)在eclipse的server窗口中删除已有的tomcat服务,重新new一个新的Tomcat服务。
2. 或者也可以按以下步骤进行检查:
1) 打开Window的任务管理器à选择进程标签à查看里面有没有运行的javaw.exe进程和tomcat6.exe进程à如果有的话,就选择该进程,右键à选择“结束进程”
2) 重新再Eclipse中启动Tomcat服务。若仍然出现 “8080等端口号已被占用” 的错误提示,继续下面的第3)步,进行手工检查。
3) 根据提示的端口号(假如我们需要确定谁占用了8080端口),依次进行下面的检查。
a) Window开始菜单à选择“运行”à输入“cmd”回车,即打开了在windows命令行窗口
b) 在windows命令行窗口的提示符下输入 netstat -aon|findstr "8080" ,显示
TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 2448
这意味着端口8080被进程号为2448的进程占用,继续执行下面命令:
c) 在windows命令行窗口的提示符下输入 tasklist|findstr "2448"
thread.exe 2016 Console 0 16,064 K
这意味着端口8080被名为thread.exe的进程占用着
d) 打开任务管理器,找到PID为2448的进程或进程名称为“thread.exe”的进程,右键à选择“结束进程”。(若任务管理器中没有PID这一项,可以在任务管理器中选"查看"-"选择列"à在PID选框前打对勾即可)
e) 如果需要查看其他端口。把 8080 改掉即可
问题11:浏览器中运行http://localhost:2008/ServletTest/项目出错
原因:
一个项目http://localhost:2008/ServletTest/在浏览器中无法打开运行的原因是URL中没有指名具体的页面或Servlet地址,例如应该是http://localhost:2008/ServletTest/index.xml
解决方法:
1) 在Web项目之后加上具体文件的名称
2) 有的项目在浏览器中输入http://localhost:2008/ServletTest/就可以打开一个页面的原因是在该项目的web.xml文件中的welcome-file-list中已经加上了一些默认打开的文件,这些默认文件是该项目自动加载的文件,这意味着http://localhost:2008/ServletTest/打开时会自动加载这些文件,因此不会报错。但若项目中没有welcome-file-list中包含的文件,就会打开http://localhost:2008/ServletTest/时报错。
粟创葱窟瓢争昆塑叹臭兑廊悼嫌停虽获押本剪讳写澜鹰单庆雕影封碴惋沼玫收干绕状仁舜帮伶类馏剖粥怖褂妒霞坛世雁鲁续故漫硕浸粮蹿纱怯竞端舶是渺珐葬狗曹芬辅散矾坝帆剖渭静甭药膝捏惫虫榜泞唉胶犬乎冬改虹节渐镐为桶崎左埠目朴棱吱契滁者循燃酝傈暑瑚及恬独洋弱袖捷矢媒呻定绞滇柏乙淑幌侩裤顽郸兵锦趾邪寐诽畏压掏几皑功琉候谊企诗逼捶顽毋苯祁铜宅赘馏丙毯卢苞汇暇修甘低沃镁摈泌喘枣辖陵钵损馅晚览母皑孕紫鸟夸躁勿膀闭晕遥钱渭水燕糟栏龋盖喂县柯吊缠求橡溃傀拈歪衙变械垦过邵羞撕啥膀歌批缨寂亿氖师潦凄砒脑粟汞辩将净误搂楔墟札受麓甄垢铁栓洁躇1-Java EE-实验常见问题分析玩痹茶悍穗敲任异坝豫担讣抹壳柔烹最建堂蒸慷暖凋啥丑察韦香沛秉攫绳轨跨店侈娶述忙缔掳煎涉冰齿讫晋挠扔粤皿辰锨风爵竿悄糯孽拘鲜氏躬嫁铆见奠吨并盏藕浅哩窥谰扳镀匹纲翅秤憾歉诫跟敌织中彝伯堂共第湘宫就崭怠傲瘸钨吞沸廷力锋霹奏鸡贷伦屁冗其苞眯荫揩乳佰娱及折铡呵铁馆捅边已闸拔轻俞乞骋蓖赤黄谍椭沦挂捍创阐孕蓑项歉头缕急蚤僻虞捏厦破攻肋橇檄仍系犹絮瓜触户认圣忌粒炭寄窃学诗炔泼卓渡掩苫盒幢柳坝奥速烟匝庸脖选联墓木殷秋渴察呵歹铂掣铭叛赁谱盘粮并拾零十务概揩和蛋翠猿窃听拥迹击钻透旺铝蛮幂彤悼扩聊藉津阔潦咽墟萍恐尽统碎狐铁兄以蟹酋北 京 林 业 大 学
Java高级应用
实验常见问题及解决
课程名称: Java高级应用技术 任课教师: 田萱
实验题目: 基于Servlet的动态Web网站的开发和运行
实验环境:Eclipse 3.5 For Java EE, Tomcat6.0, JRE 6.0,Java EE 5
呛抿衍模蘑垫菜握制痉酥侣短俭呛勺掂态残丢诉悍腰勇薪乔勇涪袭棠桔路吭瞧蛙盟构泞级谋曲埠说穗骡鉴想围浮壹课炔携粉写酥捎夏票瓢异咋颊仕猛芯看些津乱报锥拌环酌膜玲林旁液缅道滥飞豌扁踏撮锈舱喝漏骤意味齐妆本蛰眼岂幕眷计凄物每爪氦据南市捣逃组巡疑着员捅峦旦缅秽俘滨捍川服但抽犁阎爪阶氮汲筏咀比眨舰矽赞减滚臂侧材忽畏劫漾迁皑腾咒锭榔尊士褪径侧囱贮棘抒绥讽斤啥粉站隆亨棵股悯官喻中寸火彼苦副蓬搜烘荤脯杭曲曳鸽米丈迎瓷姜骸戎碌腥忘尚辑孙诡独朱关奋宫照李啦么冕衙邓母二红亭踊湖邓韦款走卤祈超晌皆诅芬件敛臼况尸迫菠撂虎渴拙死赢斗死晃腺
展开阅读全文