JavaWeb基础知识总结. (61)

JavaEE已经给我们提供了一个HttpServletRequestWrapper类,它就是HttpServletRequest的包装类,但它做任何的增强!你可能会说,写一个装饰类,但不做增强,其目的是什么呢?使用这个装饰类的对象,和使用原有的request有什么分别呢?

HttpServletRequestWrapper类虽然是HttpServletRequest的装饰类,但它不是用来直接使用的,而是用来让我们去继承的!当我们想写一个装饰类时,还要对所有不需要增强的方法做一次实现是很心烦的事情,但如果你去继承HttpServletRequestWrapper类,那么就只需要重写需要增强的方法即可了。

3 代码

EncodingRequest

public class EncodingRequest extends HttpServletRequestWrapper {

private String charset;

public EncodingRequest(HttpServletRequest request, String charset) {

super(request);

this.charset = charset;

}

public String getParameter(String name) {

HttpServletRequest request = (HttpServletRequest) getRequest();

String method = request.getMethod();

if(method.equalsIgnoreCase("post")) {

try {

request.setCharacterEncoding(charset);

catch (UnsupportedEncodingException e) {}

else if(method.equalsIgnoreCase("get")) {

String value = request.getParameter(name);

try {

value = new String(name.getBytes("ISO-8859-1"), charset);

catch (UnsupportedEncodingException e) {

}

return value;

}

return request.getParameter(name);

}

}

 

EncodingFilter

public class EncodingFilter extends HttpFilter {

public void doFilter(HttpServletRequest request,

HttpServletResponse response, FilterChain chain)

throws IOException, ServletException {

String charset = this.getInitParameter("charset");

if(charset == null || charset.isEmpty()) {

charset = "UTF-8";

}

response.setCharacterEncoding(charset);

response.setContentType("text/html;charset=" + charset);

EncodingRequest res = new EncodingRequest(request, charset);

chain.doFilter(res, response);

}

}

 

web.xml

<filter>

<filter-name>EncodingFilter</filter-name>

<filter-class>cn.itcast.filter.EncodingFilter</filter-class>

<init-param>

<param-name>charset</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>EncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

文件上传下载 文件上传概述 1 文件上传的作用

例如网络硬盘!就是用来上传下载文件的。

在智联招聘上填写一个完整的简历还需要上传照片呢。

2 文件上传对页面的要求

上传文件的要求比较多,需要记一下:

1. 必须使用表单,而不能是超链接;

2. 表单的method必须是POST,而不能是GET;

3. 表单的enctype必须是multipart/form-data;

4. 在表单中添加file表单字段,即<input type=”file”…/>

<form action=http://www.likecs.com/"${pageContext.request.contextPath }/FileUploadServlet" method=http://www.likecs.com/"post"enctype=http://www.likecs.com/"multipart/form-data">

用户名:<input type=http://www.likecs.com/"text" name=http://www.likecs.com/"username"/><br/>

文件1:<input type=http://www.likecs.com/"file" name=http://www.likecs.com/"file1"/><br/>

文件2:<input type=http://www.likecs.com/"file" name=http://www.likecs.com/"file2"/><br/>

<input type=http://www.likecs.com/"submit" value=http://www.likecs.com/"提交"/>

</form>

 
3 比对文件上传表单和普通文本表单的区别

通过httpWatch查看“文件上传表单”和“普通文本表单”的区别。

l 文件上传表单的enctype=”multipart/form-data”,表示多部件表单数据;

l 普通文本表单可以不设置enctype属性:

Ø 当method=”post”时,enctype的默认值为application/x-www-form-urlencoded,表示使用url编码正文;

Ø 当method=”get”时,enctype的默认值为null,没有正文,所以就不需要enctype了。

对普通文本表单的测试

<form action=http://www.likecs.com/"${pageContext.request.contextPath }/FileUploadServlet" method=http://www.likecs.com/"post">

用户名:<input type=http://www.likecs.com/"text" name=http://www.likecs.com/"username"/><br/>

文件1:<input type=http://www.likecs.com/"file" name=http://www.likecs.com/"file1"/><br/>

文件2:<input type=http://www.likecs.com/"file" name=http://www.likecs.com/"file2"/><br/>

<input type=http://www.likecs.com/"submit" value=http://www.likecs.com/"提交"/>

</form>

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html