求解 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 求解

下面英语翻译//求解

linux /etc/fstab文件参数求解释

Itext 生成PDF文件多页,页眉、页脚乱码求解

firefox使用 websocket 报无法建立到 ws://服务器的连接错误,ie和chrom都可以,求解释。。

求解:我想知道spring boot的controller类是怎么指定https://www.198bona.com跳转到HTML页面的?