java web实习报告范文.docx

上传人:b****6 文档编号:4295682 上传时间:2022-11-29 格式:DOCX 页数:14 大小:23.94KB
下载 相关 举报
java web实习报告范文.docx_第1页
第1页 / 共14页
java web实习报告范文.docx_第2页
第2页 / 共14页
java web实习报告范文.docx_第3页
第3页 / 共14页
java web实习报告范文.docx_第4页
第4页 / 共14页
java web实习报告范文.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

java web实习报告范文.docx

《java web实习报告范文.docx》由会员分享,可在线阅读,更多相关《java web实习报告范文.docx(14页珍藏版)》请在冰豆网上搜索。

java web实习报告范文.docx

javaweb实习报告范文

javaweb实习报告

项目综合实践报告题目:

html+css旅游门户网站设计

班级:

计算机2014

(1)姓名:

丁一学号:

******完成日期:

2014.9.14

一、分析设计

用文字、图表等说明设计思路及设计结果。

二、主要源代码

html

css

三、效果图

屏幕抓图

四、调试过程

(调试过程中碰到的问题及解决方法)

五、实验结论

1、实验结果图

2、实验心得体会

javaweb课程设计实训报告

我们进行了为期一周的javaweb的课程实训。

在这次实训中,我觉得我学到了很多东西。

这次,老师给我们安排了一个项目,是关于商店购物的。

首先,我们划分了几个小组,每组4-6人,每个人有每个人的工作,每个人的工作完成后整合到一起,这个项目就完成了。

我在我们小组的工作是写一段删除商品的java代码。

因为我的基础比较差,所以我分担的工作比较少,下面是我做的一段代码:

publicvoiddeleteproduct(stringid){

statementstmt=null;

connecttodb;

inttempid=

integer.parseint(id);

try{

stmt=

this.con.createstatement;

stmt.execute("deletefrom

shop_infowhereproduct_id="+tempid);

}catch(exceptione){

e.printstacktrace;

}finally{

close(this.con,stmt,null);}}

总而言之,这次实训对我的帮助很大,我工作会很有从中学到了什么是团队协作,正所谓团结就是力量,不仅如此,我还学到了很多的专业知识,积累了一些经验。

我想,对于我以后的工作会很有帮助,希望还能有更多像这样的机会让我能够锻炼我自己。

commons-fileupload-1.1.1.jar上传文件总结:

1、验证是否要处理的是上传文件

servletfileupload.ismultipartcontent(request)

2、创建diskfileitemfactory对象并对其初始化设置

diskfileitemfactoryfactory=newdiskfileitemfactory;

factory.setsizethreshold(20*1024);

factory.setrepository(factory.getrepository);

3、创建servletfileupload对象并设置其编码方式

servletfileuploadupload=newservletfileupload(factory);

upload.setheaderencoding("gbk");

4、开始获取上传文件的集合:

formlists=upload.parserequest(request);

5、设置上传文件允许的大小

intsize=2*1024*1024;

6、循环遍历formlists集合来根据其元素的类型(普通表单域还是文件域)进行赋值还是上传功能iteratoriter=formlists.iterator;

while(iter.hasnext){

fileitemformitem=(fileitem)iter.next;7、是文件域则执行上传:

具体做法:

(1)、获取文件路径全名:

stringname=formitem.getname;

(2)、判断文件名后缀是否符合要求:

!

name.endswith("mp3")

(3)、判断文件大小是否符合要求formitem.getsize>size

if/else(4)、都符合要求则上传:

第一步:

判断文件的名称不能为空(formitem.getname)、大小不能为0

(formitem.getsize),如果不符合要求则continue执行下一循环

第二步:

获取文件的单纯文件名称:

name.substring(name.lastindexof("\")

+1,name.length);

第三步:

设置保存到的服务器地址:

filedir("file/")+"\"+单纯名称;filesavefile=newfile(服务器地址);

第四步:

上传:

formitem.write(savefile);

、是普通表单域则将表单项的值赋值给相关对象变量,如(更多内容请访问好范文网:

)javabean(每一次循环将该次对应的表单项的值付

给适当的变量对象)

stringformname=formitem.getfieldname;获取普通表单项的名称

stringcon=formitem.getstring("gbk");

用formname.equals(““)来判断

下载文件具体方法:

1、获取服务器下载地址并将此地址字符串进行编码:

stringpath=request.getparameter("path");

2、创建下载目录:

filefile=newfile(path);获取普通表单项的值并编码path=newstring(path.getbytes("iso-8859-1"));

3、创建文件字节输入流

inputstreamin=newfileinputstream(file);

4、创建输出流对象

outputstreamos=response.getoutputstream;

5、设置该输出流的应大头、编码等配置

response.addheader("content-disposition","attachment;filename="

+newstring(file.getname.getbytes("gbk"),"iso-8859-1"));

response.addheader("content-length",file.length+"");response.setcharacterencoding("gbk");

6、开始下载:

intdata=0;

while((data=in.read)!

=-1)

{os.write(data);}

7、关闭输入输出流

os.close;

in.close;

邮件接收的方法:

dao:

1、创建邮件接收类:

store

思路:

创建properties类并添加属性->创建session对象->创建store对象并连接到服务器和编写关闭方法

2、获取全部已读邮件的名称集合的方法返回string

3、获取全部已读或未读邮件的内容的方法返回list(包含邮件信息和附件状态,但不包含具体附件内容)思路:

获取store对象->获取pop3folder对象->打开pop3folder邮件夹->创建fetchprofile预提取对象并对其添加两个常用属性->定义message[]对象数组并设为null->获取全部已读邮件的uid字符串->若字符串不为空则->转换为数组并进行排序->根据要求的已读或者未读条件来获取全部已读或未读邮件信息给message[](folder.search)->后退三步-若字符串为空则->获取全部未读邮件信息message[]---?

开始提取上述邮件数组中每一个邮件的详细信息->循环遍历message[]数组->定义mimemessage对象并赋值为数组元素->获取邮件id、发件人、邮件时间->根据编码类型获取邮件主题->由自定义方法获取此邮件的附件对象(string[])->message[i].getflags.getsystemflags.tostring;->如果判断返回的邮件有附件,则获取附件设置为1,否则设置为0(来控制页面中的附件图标的显示)->将此邮件信息对象添加到list中。

4、向数据库中添加已读邮件的标记的方法:

iduidaddress

5、获取指定邮件中附件的方法:

此方法中重点是对邮件内容的编码处理,故这里重点介绍主要功能语法:

思路:

(1)定义该邮件名称对应的所有附件连接字符串为超链接(附件之间用空格隔开)(string,由多个”附件序号=&附件名称=&邮件序号”组成),定义邮件名称字符串(已知条件)

(2)multipartmultipart=(multipart)part.getcontent;得到该邮件所有的内容集合,然后对其遍历以获取每一个multipart中每一个bodypart->判断此bodypart是否为附件,若是附件则获取该附件的名称并添加到

(1)中的连接字符串中,连接字符串中附件序号为遍历变量j

最后:

intcounts=multipart.getcount;

bodypart对象的个数//返回mimemultipart对象中保存的//关闭流response.setcontenttype("application/octet-stream");

for(inti=0;i

并返回string[]obj={邮件主题内容,filename1};

6、对输入的utf7编码的内容进行转码的方法

servlet:

下载附件servlet:

思路:

设置response.setcontenttype("text/html;charset=gbk")、

request.setcharacterencoding("gbk")->创建httpsession对象->创建servletoutputstream对象->获取页面传递变量:

附件序号、附件名称;获取session变量"message"->将附件名称进行编码处理:

filename=new

string(filename.getbytes,"iso-8859-1")->response.setheader("content-disposition","attachment;filename="+filename)->由”message”获取multipart对象->由multipart对象获取bodypart对象->由bodypart对象获取inputstream对象->开始下载:

intc=0;

while((c=is.read)!

=-1){out.write(c);}

收取邮件servlet(邮件的全部具体信息):

1、邮箱登陆的验证方法:

思路:

获取表单传递值的hostusernamepwd->用dao

(1)中的方法进行用户验证如果正确->创建httpsession对象->用session.setattribute的方法保存登陆的用户信息(以上三个)->

store.close;

2、获取当前分页页面中已读或未读的全部邮件的集合(包含邮件信息和附件状态,但不包含具体附件内容)思路:

创建httpsession对象,并获session变量hostusernamepwd和request变量"flag"和"page"->request.setattribute("flag",flag)->根据request变量”page”来判断是否已经开始分页浏览->若没有则先执行dao(3)方法获取已读或未读的全部邮件集合,然后执行自定义分页类中的初始化方法获取上述集合中的第一页中的邮件集合,并request.getsession.setattribute("pagination",分页类的实例化);->若已经开始分页,则将当前页page赋值为已经存在的session类型的分页类对象中的getpage方法中返回的page,并且执行自定义分页类中的类似初始化方法的获取当前页面集合的方法(具体看程序)

3、查看邮件详细信息:

(获取指定邮件的信息)

思路:

同dao(3)中的方法相似不同之处是:

dao(3)查询的是全部已读或未读而本案查询的是指定的邮件idtools:

本案中主要为分页类的编写:

1、初始化获取第一页的集合

2、获取已分页的当前页面的集合

3、获取全部记录数

4、获取最大页数

5、获取当前页数

6、获取分页导航

javaweb总结

1.jsp运行原理

(1)用户通过客户端浏览器向服务器发送请求。

(2)jsp文件将jsp引擎编译成java的class文件,即servlet。

(3)将产生的servlet加载到内存执行。

(4)servlet的运行结果以html(或xml)形式通过web服务器返回客户端的浏览器。

2.web项目设计

(1)公开目录

(2)web_inf目录(3)class目录

3.jsp的基本语法

(1)脚本元素:

声明、脚本段、表达式。

(2)脚本段:

<%%>

(3)声明:

<%!

%>不会产生任何输出内容→声明全局变量。

(4)表达式:

<%=%>

(5)el表达式:

${}

(6)指令元素:

<%@%>不在客户端可见

(7)page指令、include指令、taglib指令

page指令:

language属性、contenttype(text/html)、text/plainapplication/msword、application/x-msexecl、pageencoding、info、import属性.

include指令:

在jsp页面中静态包含一个文件<@includefile=""%>taglib指令:

<%@tagliburi="标记库的uri地址"prefix="前缀名"%>指令元素翻译阶段执行,动作元素执行阶段被执行。

include>用于包含其他文件可以是静态文件,也可以是动态文件。

include>?

include>包含动态文件时

param>传(建一值)

考点:

4.指令与动作的区别(include)

1.执行时间不同

指令<%@includefile=""%>是偏译时包含静态文件

动作

includepage="">?

include>是运行时包含的文件

2.引入内容不同

指令<%@includefile="relatirveuri"%>引入静态文本(html.jsp)。

动作

includepage="relativeuri"flash="true"/>引入执行页面或severlet的应答文本。

5.jsp内置对象

out,request,response,session,application,page,pagecontext,exception,config

request客户端向服务端发送请求。

response用于服务器端封装jsp处理请求后产生的结果。

response对象的sendredirect(url)方法相当于两次请求。

forward>在网址不变情况下内部跳转不同页面,但依旧属于同一次请求

6.session和cookie的区别

1.存放地点不同

session存放在服务器端,cookie存放在客户端的硬盘里

2.存活时间

session随用户访问服务器而产生,随客户下线或超时而消失

3.安全性

session存放在服务器端,不能被修改,且随客户端浏览器的关闭而消失,安全性较好。

cookie存放在客户端,安全性较差。

7.数据库

java.sql.driver

java.sql.drivermanager——加载驱动程序

java.sql.connetion——表示数据库连接对象,对数据库一切操作都在这个基础上

java.sql.statement——执行sql语句和返回结果

java.sql.resultset——结果集用来暂时存放数据库查询操作结果

8.编写程序的步骤

1.装载驱动程序

class.forname("com.mysql.jdbc.driver")

2.定义所需连接数据库的地址

stringmysqlurl="jdbc.mysql:

//host:

port/dbname"

3.建立与数据库的连接

connectionconn=drivermannager.getconnection(url,"登录数据库用户名","

密码")

4.声明并执行sql语句

5.处理返回的结果

6.关闭对象

stringdriverstr="com.mysql.jdbc.driver"

stringconnstr="jdbc:

mysql:

//localhost:

3306/book";

classforname(driverstr)

connectionconn=drivermanager.getconnection(connstr."root"."123")第4步:

建立语句对象

statementstmt=conn.createstatement

第5步:

声明并执行sql语句

stringsql="select*frombook";

resultsetrs=stmt.executequery(sql);

第6步:

statement接口的3个方法:

1、resultsetexecutequery(stringsql)

2、intexecuteupdate(stringsql)

3、booleanexecute(stringsql)

resultset的方法:

1、booleannext

2、getxxx

第7歩:

rs.closestmt.closecon.close

注:

关闭资源的顺序与打开资源顺序恰好相反。

第8步:

异常处理

try{.........}catch(sqlexecptionex){.........}

9.javabean组件(可重用)

组件:

是一个独立的模块,外界可以不了解内部如何实现,只需通过其提供的接口对组件进行访问即可,组件可重用。

特点:

1、实现代码重复使用;2、易编写,易维护,易使用。

10.javabean类的编码约定

1、类实现了java.io.serializable接口

2、必须放在某个package(包)中

3、类中如果有构造方法,那么这个方法是共有的,并且无参数

4、所有属性都是私有的(private修饰)

5、getxxx:

用来获取属性,此方法是共有的

6、setxxx:

用来设置属性,此方法是共有的

7、对于boolean类型的成员变量允许使用“is”代替“get”和“set”

8、类中的普通方法不适合上面的命名规则,但这个方法必是public的。

3个标记:

usebean>网页中创建javabean实例

setproperty>用于为bean中的属性赋值

getproperty>用于获取bean中属性的值

usebean>id=”javabean实例名”class=”javabean对应的类名”

setproperty>设置

usebean>的属性

getproperty>获取javabean实例指令的属性值,并将这个值转换成字符串显示到jsp页面。

11.servlet的生命周期

(1)当客户第一次请求servlet时,servlet被加载到内存容器会创建servlet实例,并调用其init()方法进行初始化工作。

(2)容器创建请求对象,然后调用servlet的service()方法为客户提供服务。

(3)当servlet不再被需求时,容器调用servlet的destory()方法将servlet实例销毁。

12.servlet开发

引入import.javax.servlet.*和import.javax,servlet.http.*包

13.servlet过滤器

servlet过滤器是一种java组件,它位于客户端和处理程序之间

servlet过滤器工作原理

14.model1和model2

model1:

jsp+javabean

model2:

jsp+servlet+javabean

model1中,jsp页面实现页面显示、业务逻辑和流程控制,数据处理由javabean完成。

优点:

进行快速和小规模的应用开发时优势非常明显。

缺点:

不利于web应用的扩展和更新;调试和排错困难。

model2中,mvc模式--->模型-视图-控制器.即把web应用的输入输出和处理流程按照model.view和controller分成三层。

model1和model2的区别:

model1和model2实际上就是对采用jsp技术开发的web应用的不同模型的描述。

model1采用jsp+javabean技术开发web应用,它比较适合小规模应用的开发,效率较高,易于实现,但由于在jsp页面中内嵌了大量的java代码,以至于当业务逻辑复杂时,代码可维护性、可扩展性和可重用性就会下降;model2采用jsp+servlet+javabean技术开发web应用,该模型基于mvc模式,完全实现了页面显示和逻辑的分离,它充分利用了jsp和servlet两种技术的优点,jsp更适合前台页面的开发,而servlet更擅长服务器端程序的编写,model2分工明确,更适合大型项目的开发和管理。

视图(view)用于与用户交互,可以用html.jsp实现。

15.模型(model)用于表示业务数据和实现业务逻辑,可以用javabean实现控制器(controller)完成流程控制,它接收来自视图层用户输入的数据,并调用相应的模型进行处理,最后选择合适的视图去响应用户。

控制层可以用servlet实现。

优点:

mvc模式完全实现了页面表示和业务逻辑的分离;

mvc优势之一在于三层各司其职,互不干涉。

缺点:

没有明确的定义。

模型层为javabean,实现了数据的表示和业务逻辑,视图层为jsp页面,只负责显示功能。

控制器为servlet,负责接收用户的请求,设置javabean属性,调用javabean完成业务处理,最后将处理结果交给jsp页面显示。

16.自定义标签

对隐式对象的操作、处理表单、访问数据库及其他企业级服务。

自定义标签种类:

1.不带有属性和标签体:

sometag/>

2.带有属性没有标签体的标签:

"test"/>

3.带有属性带有标签体:

sometegmyattribute="test"/>mybody

sometag>

17.el表达式

基本语法${expr}

功能:

对属性对象的简明访问:

${user}

对属性对象的属性访问:

${customer.firstname}

对属性集合元素的访问:

对数组和list:

${variable[index]}对map:

${variable[key]}

对请求参数cookie等的简单访问.

请求参数${param.custid}

cookie对象:

${cookie.usercookie}

18."."操作符和"[]"操作符

${user.address}=${user[address]}

访问数组和集合元素,需使用[]

${class[0].name}=${class[0][name]}

${param.username}={%=request.getparameter("username")%}

19."."与"[]"使用存在差异

1.当访问的数据中包含一个特殊字符(如:

"."或"_"时),就必须用"[]"操作符

2.当动态取值时必须使用"[]"操作符,"."操作符只能取到静态的值

注:

当"[]"操作符中的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1