要求:把程序迁移到web平台,通过用户上传TXT的方式接收文件。建议(但不强制要求)保留并维护Console版本,有利于测试。

在页面上设置上传的控件,然后在servlet中接受,得到的是一个字节流,然后转化为字符型在原有代码中进行统计。

jsp页面的代码如下

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<td>
<form action="server/CountWordServlet" method="post" enctype="multipart/form-data">
请上传要统计的文件<input type="file" name="sourceFile"/>
<input type="submit" value="上传">
</form>
</td>
</tr>
</table>
</body>
</html>

展示结果的页面如下

<%@page import="com.server.servlet.Word"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<%ArrayList<Word> list=(ArrayList<Word>)request.getAttribute("list"); %>
<title>Insert title here</title>
</head>
<body>
<table> <%
if(list!=null&&list.size()!=0){
%>
<tr> <td>单词</td><td>数量</td> </tr>
<%
for(int i=0;i<list.size();i++){
String word=((Word)list.get(i)).getWord();
int num=((Word)list.get(i)).getNum();
%><tr>
<td><%=word%></td>
<td><%=num%></td>
</tr>
<%
}
}else{ %>
<td>此文件没有单词或者文件不存在</td>
<% }
%> </table>
</body>
</html>

servle中的代码如下

public class CountWordServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
request.setCharacterEncoding("utf-8");
ArrayList<Word> list=new ArrayList<>();
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
FileItemIterator iterator=upload.getItemIterator(request);
while(iterator.hasNext()){
InputStream input=iterator.next().openStream(); WordCountFreq wcf=new WordCountFreq();
list=(ArrayList<Word>) wcf.sortAndOutput(input);
request.setAttribute("list", list);
}
} catch (FileUploadException e) {
e.printStackTrace();
}
System.out.println("成功了!");
response.setContentType("text/html;charset=utf-8"); request.getRequestDispatcher("/show.jsp").forward(request, response);
} }

然后将统计过程的关键方法sortAndOutput()展示如下

public List<Word> sortAndOutput(InputStream input) throws IOException {
BufferedInputStream bis=new BufferedInputStream(input);
byte [] buf = new byte[1024];
int len = -1;
String temp = "";
String lastWord = "";
while((len = bis.read(buf)) != -1) {
//将读取到的字节数据转化为字符串打印出来
String str = new String(buf,0,len);
temp = "";
temp += lastWord;
for (int i = 0; i < str.length(); i++) {
temp += str.charAt(i);
}
lastWord = "";
if (Character.isLetter(str.charAt(str.length()-1))) {
int j, t;
for (j = str.length() - 1, t = 0; Character.isLetter(str.charAt(j)); j--, t++);
temp = temp.substring(0, temp.length() - t);
for (int k = j + 1; k < str.length(); k++) {
lastWord += str.charAt(k);
}
}
root = generateCharTree(temp);
}

示例如下

在没做web版本之前,只是传入文件的路径进行处理。改为web版本之后将遇见的一点小困难是要将字节流转化为字符进行处理,经过查询也很快就解决了。

ssh:git@git.coding.net:muziliquan/GUIVersion.git

git:git://git.coding.net/muziliquan/GUIVersion.git

词频统计-------------web版本的更多相关文章

  1. Java实现的词频统计——Web迁移

    本次将原本控制台工程迁移到了web工程上,依旧保留原本控制台的版本. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息 ...

  2. java词频统计——web版支持

    需求概要: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件. 2.用户直接输入要统计的文本,服务器返回结果 3.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经 ...

  3. 词频统计Web工程

    本次将原本控制台工程迁移到了web工程上.. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经典英 ...

  4. 个人项目----词频统计WEB(部分功能)

    需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...

  5. 词频统计web

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  6. Hadoop之词频统计小实验

    声明:    1)本文由我原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Ubuntu操作系统,hadoop1-2-1,jdk1.8.0. 3)统计词频工作在单节点的伪分布上,至于真正实 ...

  7. python瓦登尔湖词频统计

    #瓦登尔湖词频统计: import string path = 'D:/python3/Walden.txt' with open(path,'r',encoding= 'utf-8') as tex ...

  8. c#词频统计命令行程序

    这里将用c#写一个关于词频统计的命令行程序. 预计时间分配:输入处理3h.词条排序打印2h.测试3h. 实际时间分配:输入处理1h.词条排序打印2h.测试3h.程序改进优化6h. 下面将讲解程序的完成 ...

  9. java词频统计——改进后的单元测试

    测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...

随机推荐

  1. ArcGIS API for JavaScript 4.0(一)

    原文:ArcGIS API for JavaScript 4.0(一) 最近ArcGIS推出了ArcGIS API for JavaScript 4.0,支持无插件3D显示,而且比较Unity和Sky ...

  2. [LeetCode]题解(python):061-Rotate list

    题目来源 https://leetcode.com/problems/rotate-list/ Given a list, rotate the list to the right by k plac ...

  3. 关于 Block的使用

    一.类2[类中某个值,需要反向传值到类1中,采用block方式,实现] [1.声明block属性] @property (copy, nonatomic) void(^activityPageView ...

  4. 解决libc.so.6: version `GLIBC_2.14' not found问题

    今天centos新机器上运行项目的时候出现题目所示的错误,搜索后发现是底层glibc 版本太低导致. strings /lib64/libc.so.6 |grep GLIBC_ 使用上面的命令发现 g ...

  5. Task+http请求

    Task+http请求  这个算是一个简单的事例吧

  6. jquery 日历插件datepicker格式调整

    <script> $(function() { $("#datepicker").datepicker({ dateFormat: "yy/mm/dd&quo ...

  7. Class.getResourceAsStream() VS. ClassLoader.getResourceAsStream()

    For Class.getResourceAsStream(String name), if the name parameter doesn't start with a "/" ...

  8. robotframework 测试结果写入数据库

    即将更新...........

  9. python_字符串

    1. 字符串的格式化 格式: 说明: (1)转换说明符 (2)格式化操作符右操作数可以是任何东西,如果是元组的话,每一个元素都会被单独格式化. 2. 字符串常用的方法 (1)find int = fi ...

  10. Vue.2.0.5-Vue 实例

    构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: var vm = new Vue({ // 选项 }) 虽然没有完全遵循 MVVM 模式, Vue 的设 ...