本周开始深入编码实践。主要围绕Java Web的Servlet和JDBC展开,成功实现了第一个具有完整CRUD(增删改查)功能的模块。Hadoop环境也终于搭建成功。
总学习时长: 约 32 小时
投入代码时间: 约 18 小时
解决问题时间:约 10 小时
理论学习时间: 约 4 小时
Java Web 方面 (约 20 小时):
学习内容: 深入学习了Servlet的doGet和doPost方法区别,RequestDispatcher进行请求转发,以及使用HttpServletRequest对象获取前端参数。
代码实践: 实现了一个简单的学生信息管理系统。包含了:
addStudent.html:添加学生的表单页面。
AddStudentServlet:处理表单提交,将数据插入数据库。
ListStudentServlet:查询所有学生信息,并以表格形式展示在JSP页面上。
使用了JDBCPreparedStatement来防止SQL注入,并学习了如何封装实体类(Student.java)和工具类(JDBCUtil.java)。
数据库: 在SQL Server中创建了student表,包含id, name, gender等字段。
Hadoop 方面 (约 10 小时):
环境搭建: 按照教程,修改了Hadoop的多个配置文件(core-site.xml, hdfs-site.xml等)。格式化NameNode (hdfs namenode -format),并成功使用start-dfs.sh和start-yarn.sh启动了所有进程。
实践: 使用hdfs dfs -mkdir /input在HDFS上创建目录,使用hdfs dfs -put localfile /input上传本地文件到HDFS。运行了自带的MapReduce例子hadoop jar ... grep,感受到了分布式计算的魅力。
Python 方面 (约 2 小时):
实践: 使用requests和BeautifulSoup库,写了一个爬取某新闻网站头条新闻标题和链接的小脚本。
问题一: 在JSP页面上显示中文乱码,插入到数据库的中文也是乱码。
解决过程: 这是一个经典问题。需要多端统一编码。
解决方案:
确保所有JSP页面和HTML页面开头添加了<%@ page contentType="text/html;charset=UTF-8" language="java" %>。
在Servlet中,在获取参数前,使用request.setCharacterEncoding("UTF-8")设置请求编码。
在Servlet中,在输出到页面前,使用response.setContentType("text/html;charset=utf-8")设置响应编码。
确保数据库和表的编码也是UTF-8(或类似编码,如Chinese_PRC_CI_AS)。这样统一后,乱码问题解决。
问题二: Hadoop的DataNode进程启动后马上自动关闭。
解决过程: 查看日志文件(logs/hadoop--datanode-.log)发现是clusterID不匹配。
解决方案: 原因是多次执行了hdfs namenode -format,导致VERSION文件中的集群ID不一致。解决方法是停止Hadoop,删除/tmp/hadoop-*目录(或你配置的dfs.name.dir和dfs.data.dir路径),重新格式化,再启动。切记:格式化NameNode会清空所有数据!
下周计划:
Java Web: 学习Session和Cookie机制,实现用户登录和权限控制功能。学习JSP脚本元素(<% %>, <%= %>等)。
Hadoop: 开始学习MapReduce编程模型,理解WordCount示例程序的详细执行流程。
Python: 学习使用pandas进行简单的数据清洗和分析。
浙公网安备 33010602011771号