servlet第七章过滤器

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);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值