标签:
1.package元素的abstract属性表示该包是抽象的,不能直接使用,需要由子包几层才能使用。struts-defult这个package就是abstract的,因此需要我们继承这个包来使用。
2.命名空间,package元素的namespace属性起到命名空间分割的作用。通常将namespace的属性值定义成页面所在的目录名。name属性会被子包用到。namespace是路径名。最后的访问链接:http://localhost:8080/struts2/hello/login.jsp
<package name="frist" extend="struts-defult" namespace="/hello">
3.文件上传,进行文件上传时,必须将表单的method属性设置为post,将enctype属性设为multipart/form-data
例子:fileload.jsp
<body> <form action="fileuploadResult.jsp" method="post" enctype="multipart/form-data"> username:<input type="text" name="username" ><br> file:<input type="file" name="file"><br> <input type="submit" value="sumbit"> </form>
fileuploadResult.jsp
<body> <% InputStream is = request.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is));//字符流与字节流的桥接 String buffer = null; if(null != (buffer=br.readLine())) { out.print(buffer+"<br>"); } br.close(); is.close(); %> </body>
4.处理文件上传fileupload组件
我们主要使用Commons-fileupload.jar中的类,commons-io是提供流服务用的,我们没有对它进行操作。
ServletFileUpload类 处理表单数据,将数据封装到 FileItem 对象中。
ServletFileUpload 处理上传的文件的数据,优先保存在缓冲区,如果数据超过了缓冲区大小,则保存到硬盘上,存储在DiskFileItemFactory指定目录下的临时文件。数据都接收完后,它再在从临时文件中将数据写入到上传文件目录下的指定文件中,并删除临时文件。
fileload.jsp
<form action="FileuploadServlet1" method="post" enctype="multipart/form-data"> username:<input type="text" name="username" ><br> file:<input type="file" name="file"><br> file2:<input type="file" name="file2"><br> <input type="submit" value="sumbit"> </form>
FileuploadServlet1
public class FileuploadServlet1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); DiskFileItemFactory factory = new DiskFileItemFactory(); String path = request.getRealPath("/fileupload");//设置文件上传的位置 factory.setRepository(new File(path));//设置临时文件目录 factory.setSizeThreshold(1024*1024);//设置默认文件的大小 ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> list = null; try { list = (List<FileItem>) upload.parseRequest(request);//解析request请求 } catch (FileUploadException e1) { e1.printStackTrace(); } try { for(FileItem item:list)//FileItem包含了文件本身与文本域 { String name = item.getFieldName();//获得name属性的值 if(item.isFormField())//判断是否是文本域 { String value = item.getString();//获得value属性的值 System.out.println(name+":"+value); request.setAttribute(name,value); } else //为文件本身 { String value = item.getName();//对于大部分浏览器获得文件名,个别浏览器获得路径 int strat = value.lastIndexOf("\\");//String 在此实例内的最后一个匹配项的索引位置。 String fileName = value.substring(strat+1);//从此实例检索子字符串。子字符串从指定的字符位置开始。 request.setAttribute(name,value); item.write(new File(path,fileName));//写入文件 } } } catch(Exception e) { e.printStackTrace(); } request.getRequestDispatcher("fileloadResult2.jsp").forward(request,response); } }
Struts(十一)Struts2的 命名空间与各种配置详解
标签:
原文地址:http://www.cnblogs.com/liu-Gray/p/4951780.html