要求:把程序迁移到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. angularJS平行控制器间共享数据

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. The Beginner’s Guide to iptables, the Linux Firewall

    Iptables is an extremely flexible firewall utility built for Linux operating systems. Whether you’re ...

  3. Magento多语言功能

    Magento多语言功能是建立在视图(view)基础之上的,可以通过后台创建店铺视图来创建基于Magento的多语言店铺.本文为大家讲解如何创建多语言的功能.首先,进入“管理店铺”节点,如下所示. S ...

  4. 判断是否是 首次 进入app,,以及Xcode7之后前导页的设置

    我的解决方案:... 1.在appdelegate.m中找到 “application:didFinishLaunchingWithOptions:”方法, 添加以下代码: /** *      前导 ...

  5. JS之mouseover和mouseenter

    mouseenter事件只会触发一次,触发对象是注册对象或者注册对象的子元素 mouseover事件可以触发多次,触发对象是注册对象或者注册对象的子元素 <!DOCTYPE html> & ...

  6. Malformed POM expected START_TAG or END_TAG not TEXT

    I resolved this problem by replacing blank space to tab. 规范些就解决这个问题了!!! 由此可见规范的重要性!

  7. 两排滚动js

    html: <div class="mr_frbox">        <div class="showtitle">          ...

  8. extjs form.load()加载服务端数据

    formPanel.getForm().load({ url: 'getApproveRefundInf?refundIdDetail=${refundIdDetail}', waitMsg: '请稍 ...

  9. ESXI

    ESXI设置时间 esxi设置时间命令:Usage: esxcli system time set [cmd options] Description:   set                   ...

  10. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...