1.过滤器简单应用
<body>
<form action='log.do' method="post">
<input type='text' name='name' placeholder="请输入名字" />
<br>
<input type='submit' value='提交 ' />
</form>
</body>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter pw=response.getWriter();
String name=request.getParameter("name");
pw.println("<p>输入的名字为:"+name+"</p>");
}
//建立过滤器 建立私有属性 然后获取
package com.neusoft2;
import java.io.IOException;
import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
/**
* Servlet Filter implementation class Filer
*/
@WebFilter(
dispatcherTypes = {
DispatcherType.REQUEST,
DispatcherType.FORWARD,
DispatcherType.INCLUDE,
DispatcherType.ERROR
}
,
urlPatterns = { "/*" },
initParams = {
@WebInitParam(name = "encode", value = "utf-8")
})
public class Filer implements Filter {
private String encode;
/**
* Default constructor.
*/
public Filer() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
request.setCharacterEncoding(encode);
response.setContentType("text/html;charset="+encode);
// pass the request along the filter chain
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
this.encode=fConfig.getInitParameter("encode");
}
}
//首先进行向下转型,然后可以得到过滤器过滤的内容路径,然后的到的是String类型的
HttpServletRequest re=(HttpServletRequest) request;
re.getServletPath();
2.文件上传
//注意form表单里面的不同
<body>
<form enctype="multipart/form-data" method="post" action='do' >
<input type='file' name='f1' placeholder="请选择上传的文件" />
<br>
<input type='submit' value='上传'/>
</form>
</body>
//多出一个注解
package com.neusoft;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
* Servlet implementation class text
*/
@WebServlet("/do")
@MultipartConfig
public class text extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public text() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//要存储文件的相对路径名字
String fold="/lala";
System.out.println("相对路径的名字为:"+fold);
//要存储文件的绝对路径名
ServletContext sc=request.getServletContext();
fold=sc.getRealPath(fold);
System.out.println("绝对路径的名字为:"+fold);
//获取要上传的文件
Part p=request.getPart("f1");
System.out.println("需要上传的文件:"+p);
//根据part获取要上传的文件名字
String name=p.getSubmittedFileName();
System.out.println("上传文件的名字:"+name);
//拼接完整的路径
String realname=fold+File.separator+name;
System.out.println("完整的路径名字为:"+realname);
//写入文件
p.write(realname);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
程序运行结果I)(如果是汉字的话,可以增加过滤器)
多文件上传时:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 要存储文件的文件夹,以相对路径名表示
String fold="/myfile";
System.out.println("原始fold:"+fold);
// 改成绝对路径名
ServletContext sc=request.getServletContext();
fold=sc.getRealPath(fold);
System.out.println("绝对路径名:"+fold);
// 获取要上传的文件信息
Collection<Part> ps=request.getParts();
// 根据Part里的信息获得要上传的文件的名字 xxx.java
for(Part p:ps){
String fname=p.getSubmittedFileName();
System.out.println("要上传的文件的名字:"+fname);
// 拼接出完整上传路径
String full=fold+File.separator+fname;
System.out.println("完整文件路径:"+full);
// 利用part的写入功能完成文件写入
p.write(full);
}
}
3.文件下载
<body>
<form enctype="multipart/form-data" method="post" action='do' >
<input type='file' name='f1' placeholder="请选择上传的文件" />
<br>
<input type='submit' value='上传'/>
</form>
<a href='down.do'>下载</a>
</body>
package com.neusoft;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class DownServlet
*/
@WebServlet("/down.do")
public class DownServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DownServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 1.要被下载的文件应该有一个相对路径
String file="/lala/fc651fa4da0bfd6440d740fb523867e.png";
// 2.把文件的相对路径名转换成绝对路径名
ServletContext sc=request.getServletContext();
String filepath=sc.getRealPath(file);
// content-dispostion:指定要下载的文件名字,并能以附件形式下载
// 3.得到文件名
int pos=filepath.lastIndexOf("\\");
String fname=filepath.substring(pos+1);
fname=URLEncoder.encode(fname, "utf-8");
// 4.设置响应的头部信息
response.setHeader("Content-Disposition", "attachment;filename="+fname);
// 5.设置文件输入流(从服务器端读取)
File f=new File(filepath);
FileInputStream fis=new FileInputStream(f);
byte [] bs=new byte[4];
int b=0;
// 6.设置文件输出流(向客户端输出)
OutputStream ops=response.getOutputStream();
while((b=fis.read(bs))!=-1){
ops.write(bs, 0, b);
}
ops.close();
fis.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}