求解 http://tieba.baidu.com/f?kz=1110549028
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解 http://tieba.baidu.com/f?kz=1110549028相关的知识,希望对你有一定的参考价值。
单个值的读取:getParameter多个值得读取:getParameterValues
参数名的查找:getParameterNames和getParameterMap
下面的代码为上传的核心代码块:
//检查表单是否正确 boolean isMultipart = FileUpload.isMultipartContent(request);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//文件最大,设为-1表示不受限制
upload.setSizeMax(4096);
//解析请求,把解析的结果放在一个List里面
List items = upload.parseRequest(request);
//缓存大小,设为-1表示不受限制 factory.setSizeThreshold(4096);
//设置临时目录
factory.setRepository(new File("D:\\temp"));
Iterator iter = items.iterator();
while( iter.hasNext() )
FileItem item = (FileItem)iter.next();
//检查是一个普通的表单域还是File组件
if( !item.isFormField() )
System.out.println("FileName:==>"+item.getName());
System.out.println("FieldName:==>"+item.getFieldName());
System.out.println("Size:==>"+item.getSize());
//item.getName 返回的是完整的文件名,
如:E:\\xx\11.doc
//所以这里用一个fullFile来取文件名
File fullFile = new File(item.getName());
File uploadedFile = new File("D:\\ftp\\",fullFile.getName());
item.write(uploadedFile);
注释写的很清楚,我就不多解释了。
其中:item.getName()是得到上传文件的物理路径+文件名。
item.getFieldName()是得到表单域的类型,
当item为上传文件表单域时,
item.getName() = file(代表文件),
当item为普通的表单域时,
item.getFieldName() = file(代表文件)会得到此表单域的属性名,
例如: ,item.getFieldName() = "remk"。
item.getString()得到该表单域的值。
例如: ,item.get.String() = "dddddddddd"。
item.getSize()表示该上传文件或表单域值的大小。
item.isFormField() :判断该item是否为普通表单域。
看了上面的内容之后,你应该知道怎么或得普通表单域的值了吧,
用request.getParameter("remk")肯定不会获得值,因为上传页面的from表单是用二进制流的方式上传的,所以用普通的方法根本得不到它的值的。
解决方法如下:
//检查表单是否正确
boolean isMultipart = FileUpload.isMultipartContent(request);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//文件最大,设为-1表示不受限制 upload.setSizeMax(4096);
//解析请求,把解析的结果放在一个List里面
List items = upload.parseRequest(request);
//缓存大小,设为-1表示不受限制 factory.setSizeThreshold(4096);
//设置临时目录
factory.setRepository(new File("D:\\temp"));
Iterator iter = items.iterator();
while( iter.hasNext() )
FileItem item = (FileItem)iter.next();
//检查是一个普通的表单域还是File组件
if( !item.isFormField() )
System.out.println("FileName:==>"+item.getName());
System.out.println("FieldName:==>"+item.getFieldName());
System.out.println("Size:==>"+item.getSize());
//item.getName 返回的是完整的文件名,
如:E:\\xx\11.doc
//所以这里用一个fullFile来取文件名 File fullFile = new File(item.getName());
File uploadedFile = new File("D:\\ftp\\",fullFile.getName()); item.write(uploadedFile);
else
String remk = item.getString();
//获得普通表单域的值
我在这只是考虑有一个文件上传域和一个普通域的情况。
如果有多个普通域的话就得:
else
if("remk".equals(item.getName())
String remk = item.getString();
if("descript".equals(item.getName())
String descript = item.getString();
这样得到的值,如果有汉字的话就会有乱码
所以要转一下编码: String remk = new String(item.getString().getBytes("iso-8859-1"),"UTF-8");
这样的话就不会有什么问题了。
下面这个也行:
createWindow : function(src)
Ext.onReady(function()
// 文本分隔符文本框
var textcomminute = new Ext.form.TextField(
id : 'textcomminute',
name : 'textcomminute',
fieldLabel : INSERT_TEXTCOMMINUTE,
value : '',
width : 30,
maxLength : 1,
maxLengthText : INSERT_TEXTCOMMINUTE_CHECK
);
// 上传文件文本域
var file = new Ext.form.TextField(
fieldLabel : INSERT_FILELOAD_TXT,
width : 300,
name : 'fileName',
id : 'fileName',
allowBlank : false,
inputType : 'file' // 指定为file文本域格式
);
// 上传文件按钮
var saveButton = new Ext.Button(
text : INSERT_BUTTON,
belongto : this,
listeners :
click : function()
// 获取forpanel对象
var panel = this.belongto.formpanel
.get('sm_insert_fieldset_fs');
var lujing = panel.get('fileName').getValue(); // 获取文本域value
var comminute = panel.get('textcomminute').getValue(); // 获取文本分隔符value
var length = lujing.length - 4; // 获取长度
var strTxt = lujing.toLowerCase().lastIndexOf(".txt"); // 索引value中.txt位置
if (length != strTxt)
// 如果索引最后4个字符不是.txt
message_PROMPT(INSERT_BUTTON_SHOW_TETERROR);
return;
else if (comminute.length == 0)
message_PROMPT(INSERT_TEXTCOMMINUTE_NULL);
return;
else if (comminute.length > 1)
message_PROMPT(INSERT_TEXTCOMMINUTE_CHECK);
return;
else
if (this.belongto.formpanel.form.isValid())
this.belongto.formpanel.getForm().submit(
url : 'txtfileupload',
success : function(form, action)
// 成功上传文件
message_PROMPT(OMSERT_TEXT_UPLOADFILE_OK);
,
failure : function()
// 上传文件失败
message_ERROR(INSERT_TEXT_UPLOADFILE_ERROR);
)
);
// 关闭窗体
var closeButton = new Ext.Button(
text : STR_BUTTON_QUTI_OPR,
belongto : this,
listeners :
click : function()
this.belongto.win.close();
);
// formPanel
var formpanel = new Ext.form.FormPanel(
frame : true,
autoScroll : true,
labelWidth : 80,
url : 'txtfileupload',
fileUpload : true,
defaultType : 'textfield',
items : [
xtype : 'fieldset',
id : 'sm_insert_fieldset_fs',
title : src.text,
autoScroll : true,
region : 'center',
items : [file, textcomminute],
buttonAlign : 'center',
buttons : [saveButton, closeButton]
]
);
// 窗体
var win = new Ext.Window(
iconCls : 'icon-add',
title : src.text,
width : 450,
height : 190,
layout : 'fit',
items : formpanel
);
this.win = win;
this.formpanel = formpanel;
win.show();
);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
String textcomminute = ""; // 文本分隔符
String filePath = "C:/fileupload/"; // 临时文件夹路径
String txtType = "utf-8"; // 文本读取,导出格式
String filePathName = ""; // 创建服务器本地文件名
File file = new File(filePath); // 实例化文件夹
if (file.exists())
System.out.println("该文件目录已经存在不需要创建!!");
else
// 创建文件夹
file.mkdirs();
request.setCharacterEncoding(txtType); // 设置request返回格式为utf-8
RequestContext requestContext = new ServletRequestContext(request);
if (FileUpload.isMultipartContent(requestContext))
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(filePath));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(txtType); // 设置传递文本数据格式为utf-8
upload.setSizeMax(2000000);
List items = new ArrayList();
try
items = upload.parseRequest(request);
catch (FileUploadException e1)
System.out.println("文件上传发生错误" + e1.getMessage());
Iterator it = items.iterator();
while (it.hasNext())
FileItem fileItem = (FileItem) it.next();
//循环获取表单提交所有字段文本
if ("textcomminute".equals(fileItem.getFieldName()))
//如果文本分隔符id:textcomminute等于当前循环的文本id
textcomminute = new String(fileItem.getString().getBytes(
"iso8859-1"), "gbk"); //获取文本value
System.out.println("文本分隔符:" + textcomminute + ";长度:"
+ textcomminute.length());
// 获取表单"文本分隔符"字段
if (fileItem.isFormField())
System.out.println(fileItem.getFieldName()
+ " "
+ fileItem.getName()
+ " "
+ new String(fileItem.getString().getBytes(
"iso8859-1"), "gbk"));
else
System.out.println(fileItem.getFieldName() + " "
+ fileItem.getName() + " "
+ fileItem.isInMemory() + " "
+ fileItem.getContentType() + " "
+ fileItem.getSize());
if (fileItem.getName() != null && fileItem.getSize() != 0)
filePathName = fileName(); // 获取文件名
try
// 在服务器端写入文件流,创建文件
fileItem.write(new File(filePath + filePathName));
catch (Exception e)
e.printStackTrace();
else
System.out.println("文件没有选择 或 文件内容为空");
// 表单提交返回值,设置success:true,否则回调函数获取不到返回值
PrintWriter writer = response.getWriter();
writer.write(" success: true, errors: ");
参考技术A Servlet读取表单数据只能用以下三种方法。
单个值的读取:getParameter
多个值得读取:getParameterValues
参数名的查找:getParameterNames和getParameterMap
下面的代码为上传的核心代码块:
//检查表单是否正确 boolean isMultipart = FileUpload.isMultipartContent(request);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//文件最大,设为-1表示不受限制
upload.setSizeMax(4096);
//解析请求,把解析的结果放在一个List里面
List items = upload.parseRequest(request);
//缓存大小,设为-1表示不受限制 factory.setSizeThreshold(4096);
//设置临时目录
factory.setRepository(new File("D:\\temp"));
Iterator iter = items.iterator();
while( iter.hasNext() )
FileItem item = (FileItem)iter.next();
//检查是一个普通的表单域还是File组件
if( !item.isFormField() )
System.out.println("FileName:==>"+item.getName());
System.out.println("FieldName:==>"+item.getFieldName());
System.out.println("Size:==>"+item.getSize());
//item.getName 返回的是完整的文件名,
如:E:\\xx\11.doc
//所以这里用一个fullFile来取文件名
File fullFile = new File(item.getName());
File uploadedFile = new File("D:\\ftp\\",fullFile.getName());
item.write(uploadedFile);
注释写的很清楚,我就不多解释了。
其中:item.getName()是得到上传文件的物理路径+文件名。
item.getFieldName()是得到表单域的类型,
当item为上传文件表单域时,
item.getName() = file(代表文件),
当item为普通的表单域时,
item.getFieldName() = file(代表文件)会得到此表单域的属性名,
例如: ,item.getFieldName() = "remk"。
item.getString()得到该表单域的值。
例如: ,item.get.String() = "dddddddddd"。
item.getSize()表示该上传文件或表单域值的大小。
item.isFormField() :判断该item是否为普通表单域。
看了上面的内容之后,你应该知道怎么或得普通表单域的值了吧,
用request.getParameter("remk")肯定不会获得值,因为上传页面的from表单是用二进制流的方式上传的,所以用普通的方法根本得不到它的值的。
解决方法如下:
//检查表单是否正确
boolean isMultipart = FileUpload.isMultipartContent(request);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//文件最大,设为-1表示不受限制 upload.setSizeMax(4096);
//解析请求,把解析的结果放在一个List里面
List items = upload.parseRequest(request);
//缓存大小,设为-1表示不受限制 factory.setSizeThreshold(4096);
//设置临时目录
factory.setRepository(new File("D:\\temp"));
Iterator iter = items.iterator();
while( iter.hasNext() )
FileItem item = (FileItem)iter.next();
//检查是一个普通的表单域还是File组件
if( !item.isFormField() )
System.out.println("FileName:==>"+item.getName());
System.out.println("FieldName:==>"+item.getFieldName());
System.out.println("Size:==>"+item.getSize());
//item.getName 返回的是完整的文件名,
如:E:\\xx\11.doc
//所以这里用一个fullFile来取文件名 File fullFile = new File(item.getName());
File uploadedFile = new File("D:\\ftp\\",fullFile.getName()); item.write(uploadedFile);
else
String remk = item.getString();
//获得普通表单域的值
我在这只是考虑有一个文件上传域和一个普通域的情况。
如果有多个普通域的话就得:
else
if("remk".equals(item.getName())
String remk = item.getString();
if("descript".equals(item.getName())
String descript = item.getString();
这样得到的值,如果有汉字的话就会有乱码
所以要转一下编码: String remk = new String(item.getString().getBytes("iso-8859-1"),"UTF-8");
这样的话就不会有什么问题了。
下面这个也行:
createWindow : function(src)
Ext.onReady(function()
// 文本分隔符文本框
var textcomminute = new Ext.form.TextField(
id : 'textcomminute',
name : 'textcomminute',
fieldLabel : INSERT_TEXTCOMMINUTE,
value : '',
width : 30,
maxLength : 1,
maxLengthText : INSERT_TEXTCOMMINUTE_CHECK
);
// 上传文件文本域
var file = new Ext.form.TextField(
fieldLabel : INSERT_FILELOAD_TXT,
width : 300,
name : 'fileName',
id : 'fileName',
allowBlank : false,
inputType : 'file' // 指定为file文本域格式
);
// 上传文件按钮
var saveButton = new Ext.Button(
text : INSERT_BUTTON,
belongto : this,
listeners :
click : function()
// 获取forpanel对象
var panel = this.belongto.formpanel
.get('sm_insert_fieldset_fs');
var lujing = panel.get('fileName').getValue(); // 获取文本域value
var comminute = panel.get('textcomminute').getValue(); // 获取文本分隔符value
var length = lujing.length - 4; // 获取长度
var strTxt = lujing.toLowerCase().lastIndexOf(".txt"); // 索引value中.txt位置
if (length != strTxt)
// 如果索引最后4个字符不是.txt
message_PROMPT(INSERT_BUTTON_SHOW_TETERROR);
return;
else if (comminute.length == 0)
message_PROMPT(INSERT_TEXTCOMMINUTE_NULL);
return;
else if (comminute.length > 1)
message_PROMPT(INSERT_TEXTCOMMINUTE_CHECK);
return;
else
if (this.belongto.formpanel.form.isValid())
this.belongto.formpanel.getForm().submit(
url : 'txtfileupload',
success : function(form, action)
// 成功上传文件
message_PROMPT(OMSERT_TEXT_UPLOADFILE_OK);
,
failure : function()
// 上传文件失败
message_ERROR(INSERT_TEXT_UPLOADFILE_ERROR);
)
);
// 关闭窗体
var closeButton = new Ext.Button(
text : STR_BUTTON_QUTI_OPR,
belongto : this,
listeners :
click : function()
this.belongto.win.close();
);
// formPanel
var formpanel = new Ext.form.FormPanel(
frame : true,
autoScroll : true,
labelWidth : 80,
url : 'txtfileupload',
fileUpload : true,
defaultType : 'textfield',
items : [
xtype : 'fieldset',
id : 'sm_insert_fieldset_fs',
title : src.text,
autoScroll : true,
region : 'center',
items : [file, textcomminute],
buttonAlign : 'center',
buttons : [saveButton, closeButton]
]
);
// 窗体
var win = new Ext.Window(
iconCls : 'icon-add',
title : src.text,
width : 450,
height : 190,
layout : 'fit',
items : formpanel
);
this.win = win;
this.formpanel = formpanel;
win.show();
);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
String textcomminute = ""; // 文本分隔符
String filePath = "C:/fileupload/"; // 临时文件夹路径
String txtType = "utf-8"; // 文本读取,导出格式
String filePathName = ""; // 创建服务器本地文件名
File file = new File(filePath); // 实例化文件夹
if (file.exists())
System.out.println("该文件目录已经存在不需要创建!!");
else
// 创建文件夹
file.mkdirs();
request.setCharacterEncoding(txtType); // 设置request返回格式为utf-8
RequestContext requestContext = new ServletRequestContext(request);
if (FileUpload.isMultipartContent(requestContext))
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(filePath));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(txtType); // 设置传递文本数据格式为utf-8
upload.setSizeMax(2000000);
List items = new ArrayList();
try
items = upload.parseRequest(request);
catch (FileUploadException e1)
System.out.println("文件上传发生错误" + e1.getMessage());
Iterator it = items.iterator();
while (it.hasNext())
FileItem fileItem = (FileItem) it.next();
//循环获取表单提交所有字段文本
if ("textcomminute".equals(fileItem.getFieldName()))
//如果文本分隔符id:textcomminute等于当前循环的文本id
textcomminute = new String(fileItem.getString().getBytes(
"iso8859-1"), "gbk"); //获取文本value
System.out.println("文本分隔符:" + textcomminute + ";长度:"
+ textcomminute.length());
// 获取表单"文本分隔符"字段
if (fileItem.isFormField())
System.out.println(fileItem.getFieldName()
+ " "
+ fileItem.getName()
+ " "
+ new String(fileItem.getString().getBytes(
"iso8859-1"), "gbk"));
else
System.out.println(fileItem.getFieldName() + " "
+ fileItem.getName() + " "
+ fileItem.isInMemory() + " "
+ fileItem.getContentType() + " "
+ fileItem.getSize());
if (fileItem.getName() != null && fileItem.getSize() != 0)
filePathName = fileName(); // 获取文件名
try
// 在服务器端写入文件流,创建文件
fileItem.write(new File(filePath + filePathName));
catch (Exception e)
e.printStackTrace();
else
System.out.println("文件没有选择 或 文件内容为空");
// 表单提交返回值,设置success:true,否则回调函数获取不到返回值
PrintWriter writer = response.getWriter();
writer.write(" success: true, errors: ");
追问
item.getName() 为null
追答恩恩 喝喝
编程实例:一元二次方程求解
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
一个一元二次方程为ax²+bx+c=0,请输入a、b和c的值,并计算方程的根。<br />
<input type="number" id="a" value="" placeholder="请输入a的值"/><br />
<input type="number" id="b" value="" placeholder="请输入b的值"/><br />
<input type="number" id="c" value="" placeholder="请输入c的值"/><br />
<input type="button" value="提交" onclick="jisuan()"/>
<body>
</body>
</html>
<script>
function jisuan()
{
var a1 = document.getElementById("a").value;
var b1 = document.getElementById("b").value;
var c1 = document.getElementById("c").value;
if(a1!=""&&b1!=""&&c1!="")
{
if(a1==0)
{
alert("a的值不能为0,请重新输入")
}
else
{
var d =b1*b1-4*a1*c1;
if(d<0)
{
alert("该方程没有实数根");
document.getElementById("a").value=document.getElementById("b").value=document.getElementById("c").value=""
}
else if(d==0)
{
var x =(Math.sqrt(d)-b1)/(2*a1);
alert("该方程有且只有一个实数根,根为:"+x);
document.getElementById("a").value=document.getElementById("b").value=document.getElementById("c").value=""
}
else
{
var x1 =(Math.sqrt(d)-b1)/(2*a1);
var x2 =(-Math.sqrt(d)-b1)/(2*a1);
alert("该方程有2个实数根,分别为:x1="+x1+" x2="+x2);
document.getElementById("a").value=document.getElementById("b").value=document.getElementById("c").value=""
}
}
}
}
</script>
以上是关于求解 http://tieba.baidu.com/f?kz=1110549028的主要内容,如果未能解决你的问题,请参考以下文章
tomcat提示报错 TLD skipped. URI: http://struts.apache.org/tags-tiles is already defined 求解
firefox使用 websocket 报无法建立到 ws://服务器的连接错误,ie和chrom都可以,求解释。。
求解:我想知道spring boot的controller类是怎么指定https://www.198bona.com跳转到HTML页面的?