当前位置:首页 » 网页前端 » javaweb实例下载
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

javaweb实例下载

发布时间: 2023-07-23 06:52:29

① java web 项目启动时加载数据库的数据到缓存中,如何实现求思路和实例。谢谢高峰相送

可以使用servlet的init方法访问数据库加载数据到java集合中,java集合相当于一块缓存,适用于一般的数据。

② 如何用Java实现Web服务器

一 HTTP协议的作用原理

WWW是以Internet作为传输媒介的一个应用系统 WWW网上最基本的传输单位是Web网页 WWW的工作基于客户机/服务器计算模型 由Web 浏览器(客户机)和Web服务器(服务器)构成 两者之间采用超文本传送协议(HTTP)进行通信 HTTP协议是基于TCP/IP协议之上的协议 是Web浏览器和Web服务器之间的应用层协议 是通用的 无状态的 面向对象的协议 HTTP协议的作用原理包括四个步骤

( ) 连接 Web浏览器与Web服务器建立连接 打开一个称为socket(套接字)的虚拟文件 此文件的建立标志着连接建立成功

( ) 请求 Web浏览器通过socket向Web服务器提交请求 HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递) GET命令的格式为

GET 路径/文件名 HTTP/

文件名指出所访问的文件 HTTP/ 指出Web浏览器使用的HTTP版本

( ) 应答 Web浏览器提交请求后 通过HTTP协议传送给Web服务器 Web服务器接到后 进行事务处理 处理结果又通过HTTP传回给Web浏览器 从而在Web浏览器上显示出所请求的页面

例 假设客户机与 /mydir/l建立了连接 就会发送GET命令 GET /mydir/l HTTP/ 主机名为的Web服务器从它的文档空间中搜索子目录mydir的文件l 如果找到该文件 Web服务器把该文件内容传送给相应的Web浏览器

为了告知 Web浏览器传送内容的类型 Web服务器首先传送一些HTTP头信息 然后传送具体内容(即HTTP体信息) HTTP头信息和HTTP体信息之间用一个空行分开

常用的HTTP头信息有

① HTTP OK

这是Web服务器应答的第一行 列出服务器正在运行的HTTP版本号和应答代码 代码 OK 表示请求完成

② MIME_Version

它指示MIME类型的版本

③ content_type 类型

这个头信息非常重要 它指示HTTP体信息的MIME类型 如 content_type text/指示传送的数据是HTML文档

④ content_length 长度值

它指示HTTP体信息的长度(字节)

( ) 关闭连接 当应答结束后 Web浏览器与Web服务器必须断开 以保证其它Web浏览器能够与Web服务器建立连接

二绝败胡 Java实现Web服务器功能的程序设计

根据上述HTTP协议的作用原理 实现GET请求的Web服务器程序的方法如下

( ) 创并拦建ServerSocket类对象 监听端口 这是为了区别于HTTP的标准TCP/IP端口 而取的

( ) 等待 接受客户机连接到端口 得到与客户机连接的socket

( )枯大 创建与socket字相关联的输入流instream和输出流outstream

( ) 从与socket关联的输入流instream中读取一行客户机提交的请求信息 请求信息的格式为 GET 路径/文件名 HTTP/

( ) 从请求信息中获取请求类型 如果请求类型是GET 则从请求信息中获取所访问的HTML文件名 没有HTML文件名时 则以l作为文件名

( ) 如果HTML文件存在 则打开HTML文件 把HTTP头信息和HTML文件内容通过socket传回给Web浏览器 然后关闭文件 否则发送错误信息给Web浏览器

( ) 关闭与相应Web浏览器连接的socket字

下面的程序是根据上述方法编写的 可实现多线程的Web服务器 以保证多个客户机能同时与该Web服务器连接

程序 WebServer java文件

//WebServer java 用JAVA编写Web服务器

import java io *

import *

public class WebServer {

public static void main(String args[]) {

int i= PORT=

ServerSocket server=null

Socket client=null

try {

server=new ServerSocket(PORT)

System out println( Web Server is listening on port +server getLocalPort())

for ( ) {client=server accept() //接受客户机的连接请求

new ConnectionThread(client i) start()

i++

}

} catch (Exception e) {System out println(e) }

}

}

/* ConnnectionThread类完成与一个Web浏览器的通信 */

class ConnectionThread extends Thread {

Socket client //连接Web浏览器的socket字

int counter //计数器

public ConnectionThread(Socket cl int c) {

client=cl

counter=c

}

public void run() //线程体

{try {

String destIP=client getInetAddress() toString() //客户机IP地址

int destport=client getPort() //客户机端口号

System out println( Connection +counter+ connected to +destIP+ on port +destport+ )

PrintStream outstream=new PrintStream(client getOutputStream())

DataInputStream instream=new DataInputStream(client getInputStream())

String inline=instream readLine() //读取Web浏览器提交的请求信息

System out println( Received +inline)

if (getrequest(inline)) { //如果是GET请求

String filename=getfilename(inline)

File file=new File(filename)

if (file exists()) { //若文件存在 则将文件送给Web浏览器

System out println(filename+ requested )

outstream println( HTTP/ OK )

outstream println( MIME_version )

outstream println( Content_Type text/ )

int len=(int)file length()

outstream println( Content_Length +len)

outstream println( )

sendfile(outstream file) //发送文件

outstream flush()

} else { //文件不存在时

String notfound=

Error file not found

outstream println( HTTP/ no found )

outstream println( Content_Type text/ )

outstream println( Content_Length +notfound length()+ )

outstream println( )

outstream println(notfound)

outstream flush()

}

}

long m =

while (m < ) {m ++ } //延时

client close()

} catch (IOException e) {

System out println( Exception +e)

}

}

/* 获取请求类型是否为 GET */

boolean getrequest(String s) {

if (s length()> )

{if (s substring( ) equalsIgnoreCase( GET )) return true

}

return false

}

/* 获取要访问的文件名 */

String getfilename(String s) {

String f=s substring(s indexOf(′ ′)+ )

f=f substring( f indexOf(′ ′))

try {

if (f charAt( )==′/′)

f=f substring( )

} catch ( e) {

System out println( Exception +e)

}

if (f equals( )) f= l

return f

}

/*把指定文件发送给Web浏览器 */

void sendfile(PrintStream outs File file) {

try {

DataInputStream in=new DataInputStream(new FileInputStream(file))

int len=(int)file length()

byte buf[]=new byte[len]

in readFully(buf)

outs write(buf len)

outs flush()

in close()

} catch (Exception e) {

System out println( Error retrieving file )

System exit( )

}

}

}

程序中的ConnectionThread线程子类用来分析一个Web浏览器提交的请求 并将应答信息传回给Web浏览器 其中 getrequest()方法用来检测客户的请求是否为 GET getfilename(s)方法是从客户请求信息s中获取要访问的HTML文件名 sendfile()方法把指定文件内容通过socket传回给Web浏览器

对上述程序的getrequest()方法和相关部分作修改 也能对POST请求进行处理

三 运行实例

为了测试上述程序的正确性 将编译后的WebServer class ConnectionThread class和下面的l文件置于网络的某台主机的同一目录中(如 主机NT SRV的C JWEB目录)

程序 l文件

这是用JAVA写出的WEB服务器主页

年 月 日


首先在该主机上用java命令运行WebServer class

C jweb>java webserver

然后在客户机运行浏览器软件 在URL处输入WebServer程序所属的URL地址(如 ) 就在浏览器窗口显示出指定的HTML文档

注意 不能缺省端口号 如缺省 则运行该主机的正常WEB服务器

lishixin/Article/program/Java/hx/201311/26626

③ 如何用java进行 web开发实例

这……使用工具创建一个就好,打开eclipse-file-new-Others-Dynamic Web Project

如下填写好项目名称就好了,这就是一个web工程,然后你启动服务就OK了。再复杂的就不是一会能说明白的。

④ javaweb里面staff是什么

此处用的是一个java web系统的一个staff表操作的模块,核心部分包括表的设计、数据库连接、数据封装类(VO)的创建、封装业务的JavaBean(DAO)、servlet和jsp结合对数据库进行操作和显示。其他业务的操作大同小异。
涉及到的类、jsp和servlet
ConnectionManager.java
Staff.java
Staff_Interface.java
OperateStaff.java
servlet如下:
GetStaff.java
doAddStaff.java
doEditStaff.java
doDeleteStaff.java
配置文件:web.xml
jsp如下:
AddStaff.jsp
EditStaff.jsp
ShowStaff.jsp
error.jsp
使用sql server 数据库,staff表如下:
在这里插入图片描述
此数据表不是本人设计,在字段设置上有缺陷,还有数据库的编码也存在问题,此处只展示表的大体结构,大家在数据库设计上一定要力求完整!
接下来分析每个类的作用,以便理解DAO,VO,下篇再分析servlet。

ConnectionManager.java
此类是数据库管理类,注册数据库驱动和获取数据库连接,以及关闭数据库连接,其中,getConnection()方法用于返回连接对象dbconnection(后面用得到),另外还含有Connection、ResultSet、Statement对象的关闭方法,如void getConnection(Connection con){省略}

Staff.java
是一个封装数据的JavaBean(类),也是一个VO(VO就是一个简单的JavaBean),JavaBean 中定义了成员变量和相应的set和get方法。

Staff_Interface.java
Staff表的操作接口类,在接口类中定义类的方法原型,在具体类OperateStaff.java(DAO)中实现接口。设置接口的作用主要是便于对程序扩充。

OperateStaff.java
为一个DAO,封装了数据库的操作,如增加、删除、修改、查找,在此DAO中,会把从数据库查询到的信息实例化为VO(用查询到的信息来实例化VO(如此处的staff.java类)),再将实例首稿化的VO放入ArrayList数组中(或其他存储对象中,如HashMap对象)。
DAO中一般含有如下结构:
ArrayList stlist=new ArrayList();

文章知识点与官方知识档案匹配
Java技能树首页概览
89145 人正在系统学习中
打开CSDN,阅读体验更佳

Dao层,Service层,Servlet层运用的自我理解_Young9518的博客
Dao层,Service层,Servlet层者梁孝运用的自我理解 Dao层 先声明一个接口类,类里声明一些将会用的方法, 同一层内写一个实现这个接口类的类,重写接口类里的方法 方法主要是处理数据的方法, publicinterfaceIStuClassDao {publicListfindAllStuClass...
继续访问
什么是Dao层、Entity层、Service层、Servlet层、Utils层?
Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。 Servlet实现过程: (1)客户端发送请求至服务器端; ...
继续访问
+service+servlet+jsp实现留言板(添加、查看)
运用MVC模式以及servlet、jsp技术实现留言板添加、查看
使用JavaBean(DAO和VO)开发购物车
使用JavaBean(DAO和VO)开发购渣漏物车 一,实现要求 1.编写一个JavaBean类Book,包含isbn,bookName,auther,publisher,price,amount 属性。用作VO(ValueObject)。 2.编写一个类BookDAO,该类中包含一个方法: publicArrayListgetAllBook() 该方法访问数据库,查询数据库表book_info,将所有图书以一个数组列表对象的形式返回。 3.改写作业7中的SelectBook.JSP页面,使用BookDAO获得
继续访问

Servlet基本功能实现_smallkneif的博客
1、Servlet 1.1、快速入门 创建项目,创建一个类实现Servlet接口,共有五个方法,可以在service方法中打印文字 配置Servlet 执行原理: 服务器受到浏览器请求之后,解析url路径,获得Servlet资源路径
继续访问
Servlet及JDBC、简单运用_summerwangnan的博客_jdbc和...
1.首先建一个包 ,然后创建一个类--BaseDao.java (里面放入与数据库相连接的代码等) package second.; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; ...
继续访问
JSP+Servlet+JavaBean+DAO模式+JDBC+Bootstrap+ajax+自定义标签完成用户登录验证
文章目录一.案例要求二.使用工具工具相关文件的导入三.案例导图四.案例实现1.数据库建立1.1 新建数据库1.2 建表1.3 添加记录2.登录页面实现Bootstrap部署login.jsp实现效果3.JDBC的DAO模式实现3.1 数据库连接类3.2 User实体类-JavaBeanUser特征User代码3.3 UserDAO接口类3.4 UserDAOImpl实现类3.5 UserDAOPr...
继续访问
博客系统(+servlet+service+vo+mysql)
基于的web的博客系统,数据库是mysql,里面有mysql数据库建表的sql语句,直接导入,部署好程序就可以运行了,保证可以运行
JSP中JavaBean和EL的介绍及使用
JavaBean在JSP中的应用 ; JavaBean使用时的注意事项;EL表达式的简单介绍和使用; 文件中解压可以直接导入运行的,运行环境MyEclipse2017 ,其它版本请注意添加jar文件!
带你了解:基于servlet层+service层+层实现前端对数据库的增删查改
前记:最近因为疫情原因上网课导致之前的几节课都没有好好听,所以当老师让我完成这个作业时我还是着急了一下。经过两天的了解学习,一天多完成了一个简单的从前斜体样式端操作数据库demo.实现效果图如下: 在这里图就不多放了,如果你觉得实现以上的功能是你所想学习的,那么请继续往下看,否则也不用继续往下为此花费更多时间了。 一.实现原理 在实现前端操作数据库之前,我们表面所认为的是:前端—>数据库 ...
继续访问

java web中的service,servlet和Dao有什么区别
servlet一般用于生成网页;service在后端中,web,service,Dao三层中,用于service调用Dao层。 Servlet返回的数据比较简单; Web Service返回的可以是复杂对象,甚至使用附件或者mutidata的二进制文件。 Servlet依赖于Java平台;Web Service是跨平台的,无论什么在什么平台使用什么语言开发的Web Service,其他平台上的任何语言都能调用。 Servlet定义的是一套服务于Java Web开发接口,目的是实现Java Web的动态访问。
继续访问
bean、、service、servlet的简单说明
bean:存放数据1、存放来自于数据库的数据。2、存放来自客户端的数据(表单提交),存数据的中介作用 :data access object:数据访问对象,主要做的事情就是对数据库单表进行增删改操作,查的有可能是多表管理查询 service:对应界面上的操作,增删改查,至于这个业务涉及到几个,就调用几个 servlet:1、接受用户请求,进行处理(doget/dopost...
继续访问
JSP&Servlet --- JSP DAO模式
这几天开始和社会董还有小孟愿开始写小组的图书管理系统,将在此期间遇到的一些问题和学到的一些知识总结在博客里。 这篇博客要总结的就是在WEB项目中用到的很重要的一种数据库设计模式DAO。DAO是什么DAO是WEB项目里面的数据层,主要负责为其他各层(MVC(Model View Controller))提供数据。DAO层里封装了对数据库操作的各种操作的JDBC代码。为什么要使用DAO我们在写WEB项
继续访问
Java Web中访问数据库需要的DAO和VO
VO就是一个普通的JavaBean DAO叫做Data Access Object类,专门负责对数据库的访问 然后将数据库的操作都封装在DAO内,把从数据库查询到的信息实例化为VO,放到ArrayList数组里返回,DAO类的代码如下
继续访问
book的Javabean类的实现
实现Java类的创建,基于book的类,包括许多的信息 name id book_type author
最新发布 JavaWeb连接数据库(Dao模式),实现添加book并按日期范围查找相应book信息
JDBC技术,通过简单的Dao模式封装,连接数据库,实现向数据库中添加book信息,并可以实现按照时间范围来查找book信息。
使用jsp+servlet+javabean+实现学生体质信息管理系统
大体样式如下,我已经将该项目部署到服务器上,网址是http://156.223.25.190:8080/ch_05/index.jsp 在服务器上数据库出了些问题还没解决,只有界面,但是在我电脑上数据库是没有问题的。 此项目连接数据库用的是DButils+cp03的方法。 一、建立jsp页面 几乎每个界面的css是一样的,在此不做重复的代码 index.jsp <%@ page conte...
继续访问

【Java Web开发】DAO和VO
1.pom.xml文件的<dependencies>标签下添加以下代码。 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>7.2....
继续访问

JavaWeb搭建超市管理系统
文章目录SMBMS准备工作登录功能实现登录功能优化密码修改密码验证Ajax用户管理实现用户数量用户列表角色列表 SMBMS 准备工作 搭建一个Maven项目、 配置Tomcat 测试项目能否跑起来 导入项目所需的jar包(servlet,jsp,mysql,jstl,standard…) 创建项目包结构 编写实体类(ORM映射:表—类映射) 编写基础公共类(数据库配置文件) driver=com.mysql.jdbc.driver url=jdbc:mysql://localho
继续访问
用JSP完成简单的图书信息查询系统
目录图书信息查询系统分层结构util包DButil代码bean包Book.java代码action包BookSearchServlet.java代码web.xml配置test包BookTest.java代码WebRoot下jsp页面search.jsp页面bookInfo.jsp页面book表数据浏览器效果search.jsp页面 图书信息查询系统 分层结构 util包 DButil代码 package top.xinsir.util; import java.sql.Connection; impor
继续访问

DAO模式实现MySQL数据库对数据的查询
1. 前言 在本人开发的一个系统中需要提供注册和登陆系统,自然需要有用户管理,对用户需要进行基础的增删改查,DAO是常用的设计模式之一,对数据访问进行抽象,可以大大减低不同的数据库之间移植的工作量,本文主要根据本人实现自己DAO模型的过程,讲述DAO设计模式以及本人是如何使用DAO实现对数据的访问的。 2. DAO设计模式 DAO全程是Data Access Object,是
继续访问
java servlet _Java Web:JSP+ Servlet+JavaBean+DAO
实例:页面登录1、登录页面的制做做用:实现数据的提交用户:密码:解释:action=“要提交给服务器端在web.xml注册过的servelt的名字”method=“提交给服务器的方法有get、post,这里选择post”user、password:咱们要提交的数据名java2、Sertvlet控制器的实现做用:处理来自客服端的请求,接收登录页面提交的数据并调用JavaBean实例化,接着调用DAO...
继续访问
Servlet、Biz、Dao和Vo关系描述
ServletDome中Servlet、Biz、Dao和Vo关系的简单描述之补充
继续访问
java调用_Servlet里面一调用Dao里的某个方法
背景:这几天,由于项目集成的需要,我要在doFilter里调用层里的某些方法,可是总之报空指针,只要调用那个方法,就报错误。很是纳闷,网上查找了各种原因,终于让我给突破了,看来还是Java基础掌握的不够呀!代码:在servlet中加入私有变量UserDao,然后在servlet的init()方法中初始化一下即可用。private UserDao userDao;public void ...
继续访问
介绍和servlet实现基本功能
java
mysql

⑤ 简述一下Java中的web容器,举几个例子也行

目前市场上常用的开源Java Web容器有Tomcat、Resin和Jetty。其中Resin从V3.0后需要购买才能用于商业目的,而其他两种则是纯开源的。可以分别从他们的网站上下载最新的二进制包和源代码。
作为Web容器,需要承受较高的访问量,能够同时响应不同用户的请求,能够在恶劣环境下保持较高的稳定性和健壮性。在HTTP服务器领域,Apache HTTPD的效率是最高的,也是最为稳定的,但它只能处理静态页面的请求,如果需要支持动态页面请求,则必须安装相应的插件,比如mod_perl可以处理Perl脚本,mod_python可以处理Python脚本。

上面介绍的三中Web容器,都是使用Java编写的HTTP服务器,当然他们都可以嵌到Apache中使用,也可以独立使用。分析它们处理客户请求的方法有助于了解Java多线程和线程池的实现方法,为设计强大的多线程服务器打好基础。

Tomcat是使用最广的Java Web容器,功能强大,可扩展性强。最新版本的Tomcat(5.5.17)为了提高响应速度和效率,使用了Apache Portable Runtime(APR)作为最底层,使用了APR中包含Socket、缓冲池等多种技术,性能也提高了。APR也是Apache HTTPD的最底层。可想而知,同属于ASF(Apache Software Foundation)中的成员,互补互用的情况还是很多的,虽然使用了不同的开发语言。

Tomcat 的线程池位于tomcat-util.jar文件中,包含了两种线程池方案。方案一:使用APR的Pool技术,使用了JNI;方案二:使用Java实现的ThreadPool。这里介绍的是第二种。如果想了解APR的Pool技术,可以查看APR的源代码。

ThreadPool默认创建了5个线程,保存在一个200维的线程数组中,创建时就启动了这些线程,当然在没有请求时,它们都处理“等待”状态(其实就是一个while循环,不停的等待notify)。如果有请求时,空闲线程会被唤醒执行用户的请求。

具体的请求过程是: 服务启动时,创建一个一维线程数组(maxThread=200个),并创建空闲线程(minSpareThreads=5个)随时等待用户请求。 当有用户请求时,调用 threadpool.runIt(ThreadPoolRunnable)方法,将一个需要执行的实例传给ThreadPool中。其中用户需要执行的实例必须实现ThreadPoolRunnable接口。 ThreadPool首先查找空闲的线程,如果有则用它运行要执行ThreadPoolRunnable;如果没有空闲线程并且没有超过maxThreads,就一次性创建minSpareThreads个空闲线程;如果已经超过了maxThreads了,就等待空闲线程了。总之,要找到空闲的线程,以便用它执行实例。找到后,将该线程从线程数组中移走。 接着唤醒已经找到的空闲线程,用它运行执行实例(ThreadPoolRunnable)。 运行完ThreadPoolRunnable后,就将该线程重新放到线程数组中,作为空闲线程供后续使用。

由此可以看出,Tomcat的线程池实现是比较简单的,ThreadPool.java也只有840行代码。用一个一维数组保存空闲的线程,每次以一个较小步伐(5个)创建空闲线程并放到线程池中。使用时从数组中移走空闲的线程,用完后,再“归还”给线程池。

⑥ JavaWeb下载文件,怎么获取文件下载完毕的状态

在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-fileupload依赖于commons-io这个包,所以需要下载这两个包commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。

1、搭建环境

创建Web项目,将包导入到项目lib下

3、实现文件下载

(第一种文件下载)

注意:该代码是直接访问Servlet类的

?

04142package com.load;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//直接使用Http://localhost:8080/Test1/download进行下载,但是这个有缺陷,如果下载文件名中有中文,就会变成乱码现象!@WebServlet("/download")public class download extends HttpServlet {private static final long serialVersionUID = 1L;public download() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/plain;charset=utf-8");response.setCharacterEncoding("utf-8");response.setHeader("Location","中文.txt");response.setHeader("Content-Disposition", "attachment; filename=" + "账号.txt");OutputStream outputStream = response.getOutputStream();InputStream inputStream = new FileInputStream("E:/loads"+"/账号.txt");byte[] buffer = new byte[1024];int i = -1;while ((i = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, i);}outputStream.flush();outputStream.close();}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

(第二种下载方法)

新建jsp页面选择下载

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>下载</title></head><body><a href="../DoDownloadServlet?filename=呵呵.txt">点击下载</a></body></html>

创建Servlet类进行下载(注意:该下载如果文件名是中文的话,一样会出现乱码现象)

package com.load;

import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext;import org.hsqldb.lib.StringUtil;import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException;@WebServlet("/DoDownloadServlet")public class DoDownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;public DoDownloadServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//得到下载文件的名称//String filename = request.getParameter("filename");//String filename = new String(FileName.getBytes("iso8859-1"),"UTF-8");//新建SmartUpload对象SmartUpload su = new SmartUpload();PageContext pagecontext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);//上传初始化su.initialize(pagecontext);//设置禁止打开该文件su.setContentDisposition(null);//下载文件try {su.downloadFile("/listener/"+filename);} catch (SmartUploadException e) {// TODO Auto-generated catch blocke.printStackTrace();}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

(第三种下载的方法)

同上的jsp页面代码,这里就不再重复了。

新建Serlvet类,实现下载功能(注意:这里文件名就算是中文名,也不会出现乱码问题了!)

package com.load;

import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext;import org.hsqldb.lib.StringUtil;import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException;@WebServlet("/DoDownloadServlet")public class DoDownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;public DoDownloadServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获得文件名称String path1 = request.getParameter("filename");//获得路径名称String path = request.getSession().getServletContext().getRealPath("/listener/"+path1);// path是根据日志路径和文件名拼接出来的File file = new File(path);String filename = file.getName();try {//判断是否是IE11Boolean flag= request.getHeader("User-Agent").indexOf("like Gecko")>0;//IE11 User-Agent字符串:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko//IE6~IE10版本的User-Agent字符串:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.0; Trident/6.0)if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") >0||flag){filename = URLEncoder.encode(filename, "UTF-8");//IE浏览器}else {//先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,//这个文件名称用于浏览器的下载框中自动显示的文件名filename = new String(filename.replaceAll(" ", "").getBytes("UTF-8"), "ISO8859-1");//firefox浏览器//firefox浏览器User-Agent字符串://Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0} InputStream fis = new BufferedInputStream(new FileInputStream(path));byte[] buffer;buffer = new byte[fis.available()];fis.read(buffer);fis.close();response.reset();response.addHeader("Content-Disposition", "attachment;filename=" +filename);response.addHeader("Content-Length", "" + file.length());OutputStream os = response.getOutputStream();response.setContentType("application/octet-stream");os.write(buffer);// 输出文件os.flush();os.close();} catch (IOException e) {e.printStackTrace();}System.out.println(filename);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

⑦ 《JavaWeb开发实战1200例(第Ⅱ卷)》epub下载在线阅读,求百度网盘云资源

《Java Web开发实战1200例(第Ⅰ卷)》(卢瀚//王春斌)电子书网盘下载免费在线阅读

资源链接:

链接:https://pan..com/s/1q3rJnu2DKZqZmHcr6Zl1Wg

密码:m01y

书名:Java Web开发实战1200例(第Ⅰ卷)

作者:卢瀚//王春斌

出版社:清华大学

出版年份:2011-1

页数:909

内容简介:

《Java Web开发实战1200例(第1卷)》简介:《Java Web开发实战1200例》包括第I卷、第II卷共计1200个例子,《Java Web开发实战1200例(第1卷)》是第I卷,共计600个例子。

《Java Web开发实战1200例(第1卷)》以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java Web进行程序开发的各个方面的知识和技巧,主要包括Java Web编程基础、文件操作管理、图形图像与多媒体技术、窗体应用技术、JSP操作Word与Excel等。全书分6篇23章,共计600个实例和600个经验技巧。每个实例都是经过作者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。

《Java Web开发实战1200例》两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源于多位工程师的多年积累,具有很强的实用性。

《Java Web开发实战1200例(第1卷)》附带有配套DVD光盘,光盘中提供有部分实例的视频和大部分源代码,读者稍加修改即可应用。

《Java Web开发实战1200例(第1卷)》适合Java Web的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Java Web程序员参考、查阅。

⑧ 《精通Spring2.xJavaWeb开发》pdf下载在线阅读,求百度网盘云资源

《精通Spring2.xJavaWeb开发》电子书网盘下载免费在线阅读

链接:https://pan..com/s/1JmsGQWggP2MaSmDpEqyvQA

提取码:sc13

书名:精通Spring2.xJavaWeb开发

出版年份:2008-9

页数:371

内容介绍:

《精通Spring 2.x Java Web开发》按照从易到难、由浅入深、循序渐进的顺序介绍Spring,并使用大量的实例使读者更加深刻地理解所学习的知识,更好地进行开发实践。《精通Spring 2.x Java Web开发》深刻地揭示了Spring的技术内幕,对IOC、DI、AOP、事务管理等根基性的技术进行了深度的讲解。读者阅读《精通Spring 2.x Java Web开发》后,不但可以熟练使用Spring的各项功能,而且还能够对书中的实例举一反三。