1、表单经常上传附件, 会使用到 ENCTYPE= "multipart/form-data "
这句话的意思是处理表单的所有信息以流方式提交, 页面上的所有信息已经都转换为了文件流, 为的是能让服务端得到你上传的文件的文件流。
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
只有使用了multipart/form- data,才能完整的传递文件数据,进行下面的操作.
enctype=\"multipart/form-data\"是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,
表单其他信息也变成了流,用request.getParameter() 方法当然得不到值了
这个时候我们一般使用组件处理
smartupload 组件
用smartupload提供的一个方法可以得到值
mySmartUpload.getRequest().getParameter()
2、
<label>专为input元素服务,为其定义标记。for属性规定label与哪个表单元素绑定
label和表单控件绑定方式又两种:
1)将表单控件作为label的内容,这样就是隐士绑定。
此时不需要for属性,绑定的控件也不需要id属性。
隐式绑定:
<label>Date of Birth: <input type="text" name="DofB" /></label>
2)为<label>标签下的for属性命名一个目标表单的id,这就是显示绑定。
显式绑定:
<label for="SSN">Social Security Number:</label>
<input type="text" name="SocSecNum" id="SSN" />
问题:为什么要给<label>加上for属性?
给<label>加了for属性绑定了input控件后,可以提高鼠标用户的用户体验。
如果在label元素内点击文本,就会触发此控件。就是说,当用户渲染该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
3、config 对象代表当前JSP 配置信息,但JSP 页面通常无须配置,因此也就不存在配置信息。该对象在JSP 页面中非常少用,但在Servlet 则用处相对较大。因为Servlet 需要配置在web.xml 文件中,可以指定配置参数。
servlet中获取:this.getServletConfig();
4、关键代码:
SmartUpload su = new SmartUpload();
su.initialize(this.getServletConfig(), request,response);
su.setAllowedFilesList("jpg, png");
su.setCharset("UTF-8");
try {
su.upload();
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File f = su.getFiles().getFile(0);
try {
f.saveAs("upload/"+f.getFileName(),SmartUpload.SAVE_VIRTUAL);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("imgurl", "upload/"+f.getFieldName()) ;
request.getRequestDispatcher("index.jsp").forward(request, response);
index.jsp:
<img alt="" src="<%=request.getAttribute("imgurl") %>">
这句话的意思是处理表单的所有信息以流方式提交, 页面上的所有信息已经都转换为了文件流, 为的是能让服务端得到你上传的文件的文件流。
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
只有使用了multipart/form- data,才能完整的传递文件数据,进行下面的操作.
enctype=\"multipart/form-data\"是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,
表单其他信息也变成了流,用request.getParameter() 方法当然得不到值了
这个时候我们一般使用组件处理
smartupload 组件
用smartupload提供的一个方法可以得到值
mySmartUpload.getRequest().getParameter()
2、
<label>专为input元素服务,为其定义标记。for属性规定label与哪个表单元素绑定
label和表单控件绑定方式又两种:
1)将表单控件作为label的内容,这样就是隐士绑定。
此时不需要for属性,绑定的控件也不需要id属性。
隐式绑定:
<label>Date of Birth: <input type="text" name="DofB" /></label>
2)为<label>标签下的for属性命名一个目标表单的id,这就是显示绑定。
显式绑定:
<label for="SSN">Social Security Number:</label>
<input type="text" name="SocSecNum" id="SSN" />
问题:为什么要给<label>加上for属性?
给<label>加了for属性绑定了input控件后,可以提高鼠标用户的用户体验。
如果在label元素内点击文本,就会触发此控件。就是说,当用户渲染该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
3、config 对象代表当前JSP 配置信息,但JSP 页面通常无须配置,因此也就不存在配置信息。该对象在JSP 页面中非常少用,但在Servlet 则用处相对较大。因为Servlet 需要配置在web.xml 文件中,可以指定配置参数。
servlet中获取:this.getServletConfig();
4、关键代码:
SmartUpload su = new SmartUpload();
su.initialize(this.getServletConfig(), request,response);
su.setAllowedFilesList("jpg, png");
su.setCharset("UTF-8");
try {
su.upload();
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File f = su.getFiles().getFile(0);
try {
f.saveAs("upload/"+f.getFileName(),SmartUpload.SAVE_VIRTUAL);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("imgurl", "upload/"+f.getFieldName()) ;
request.getRequestDispatcher("index.jsp").forward(request, response);
index.jsp:
<img alt="" src="<%=request.getAttribute("imgurl") %>">