在初次接触java,经过一段时间的学习,完成了新闻发布的基础功能,进行一点小总结,方便日后回顾。下面是我的一点小总结,不足之处请勿见笑。。。
我们想要完成一个‘新闻发布’系统,首先要使其能够成功发布,并且让它能够实现添加、删除、修改、查询、上传、下载等功能。
我们还调用AJAX功能查看输出为XML、JSON格式的新闻内容。为完成以上功能,我们首先要进行jdk、tomcat、eclipse的安装和配置。1、各软件的安装和配置1.1、jdk的安装和配置: 1.1.1、下载jdk:下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 1.1.2、安装jdk:安装jdk.exe 1.1.3、配置环境变量:右击"我的电脑"-->"高级"-->"环境变量" 1)在系统变量里新建"JAVA_HOME"变量,变量值为:C:\Program Files\Java\jdk (根据自己的安装路径填写) 2)新建"CLASSPATH"变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (变量值中"."是不可或缺的) 3)在PATH变量(已存在不用新建)添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin (注意变量值之间用";"隔开) 1.1.4、测试:"开始"-->"运行"-->输入"javac"-->"Enter",如果能正常打印用法说明配置成功! 1.1.5补充环境变量的解析: 1)JAVA_HOME:jdk的安装路径 2)CLASSPATH:java加载类路径,只有类在classpath中java命令才能识别,在路径前加了个"."表示当前路径。 3)PATH:系统在任何路径下都可以识别java,javac命令。1.2、tomcat的安装和配置:{其各个文件夹的功能}: 1.2.1、Tomcat的获取和安装:Apache的官方网站下载(http://tomcat.apache.org/),有两种不同的下载,一种是普通安装版本,一种是解压安装版本。使用起来是一样的,只是在普通安装版本中有一些界面可提供对Tomcat的快捷设置,而且普通安装会将Tomcat作为系统服务进行注册。 Tomcat的启动是一个bat文件(Windows下),在bin目录下。双击即可。如果启动不成功,一般的情况是控制台出来一下立即消失,说明Tomcat没有找到Java的运行时环境。简单理解,就是Tomcat找不到jdk,没办法运行。 1.2.2、Tomcat的运行环境搭建:在JAVA_HOME变量(在jdk配置时已经创建),指向jdk安装目录。启动Tomcat,在浏览器地址栏输入http://localhost:8080/如果看到关于Tomcat的介绍神马,说明配置成功。 1.2.3、Tomcat的目录结构介绍:bin目录存放一些启动运行Tomcat的可执行程序和相关内容。 conf存放关于Tomcat服务器的全局配置。 lib目录存放Tomcat运行或者站点运行所需的jar包,所有在此Tomcat上的站点共享这些jar包。 webapps目录是默认的站点根目录,可以更改。 work目录用于在服务器运行时过度资源,简单来说,就是存储jsp、servlet翻译、编译后的结果。 common文件夹是存放公共jar包的。 logs文件夹主要是存放日志文件的。 1.1.4、其他更详细的介绍:(http://www.cnblogs.com/Johness/archive/2012/07/20/2600937.html)1.3、eclipse的安装和配置: 1.3.1、下载Eclipse:( http://www.eclipse.org/downloads/) 1.3.2、Eclipse配置: 1)配置jdk:点击"window"-->"preferences"-->"java"-->"installed JRES" 2)配置tomcat:点击"window"-->"preferences"-->"Server"-->"Runtime Environment"-->"Add"2、各功能的实现2.1、连接数据库: 多项功能都需要连接数据库,我们创建一个用于连接数据库的工具(util),命名为"SQLServerConnectiont"。 1)加载JDBC驱动程序 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2)创建数据库连接 Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=test1","sa","sd951208"); JDBC连接常用数据库和基本的CURD可参考(http://www.360doc.com/content/16/0816/17/35826655_583667086.shtml)。2.2、JavaBeen: 创建"*.java",添加id、b_id、title、content、author、time、area、fileName、fileContent等属性。 鼠标右键,依次选择弹出菜单中的"源码"/"生成Getter和Setter"菜单项。 在弹出的"生成Getter和Setter"对话框中,单击"全部选中"按钮,并保留其它选项的默认值。 点击"确定"按钮,生成属性的getXxx()与setXxx()方法。2.3、新闻的发布(添加): 发布新闻时,将新闻的各种属性填写好进行发布。在jsp页面将数据提交到Servlet处理,调用sql语句insert储存进数据库。其中日期属性使用了My97DatePicker插件,简介使用textarea标签和ckeditor插件。 2.3.1、My97DatePicker插件 下载My97DatePicker插件(http://download.csdn.net/detail/emoven/8249073)。 在页面中引入该组件js文件: <script type="text/JavaScript" src="/test/My97DatePicker/WdatePicker.js"></script> 在添加日期时,<input id="1" type="text" name="time" class="Wdate" οnfοcus="WdatePicker({dateFmt:'yyyyMMdd HH:mm:ss',isShowClear:false,readOnly:true})"> 其他更详细的调用到官网查看(http://www.my97.net/dp/demo/index.htm)。 2.3.2、ckeditor插件 下载ckeditor插件(http://ckeditor.com/download)。 在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src="ckeditor/ckeditor.js"></script> 在使用编辑器时,textarea rows="10" cols="30" name="textarea1" class="ckeditor">简介内容</textarea>2.4、删除: 在jsp显示页面通过超链接提交要删除的数据id到Servlet处理,调用sql语句delete删除相应的数据。在这里使用了事务的处理,避免删除书籍信息时没有删除书籍的附件。 简单事务的详细使用方法(http://blog.sina.com.cn/s/blog_4b5bc0110100h0wz.html)。2.5、修改: 根据id,通过查询的Servlet调用sql语句select查询出新闻数据,在修改的jsp页面显示。然后将修改后的数据发送到修改的Servlet调用sql语句insert将数据储存到数据库里。2.6、查询: 按照id、关键字、日期等要求查询新闻的数据,在jsp页面发送到Servlet处理调用sql语句select查询出新闻数据。 为了让查询数据显示时,将要求一同显示在页面上:在jsp显示页面String id = (String) request.getAttribute("id"); if (id == null) { id = ""; request.removeAttribute("id"); } 在Servlet处理,获取要求:String Id = request.getParameter("Id"); if (Id != null && !Id.equals("")) { sql1 += " and ID_=?"; } 然后if(Id != null && !Id.equals("")) { ps1.setString(i, Id); i++; System.out.println("Id"+Id); }2.7、上传: 在jsp发布页面将附件上传,通过Servlet处理分析将附件数据和其他数据区分,然后通过调用sql语句insert储存进数据库。 1)上传附件需要使用commons-fileupload.jar和commons-io.jar两个包。 2)文件上传必须满足的条件: 页面表单的method必须是post,因为get传送的数据太小了 ; 页面表单的enctype必须是multipart/form-data类型的; 表单中提供上传输入域 3)具体代码可参考(http://blog.csdn.net/ajun_studio/article/details/6639306)。2.8、下载: 首先通过超链接将要下载的附件的id发送到Servlet处理,调用sql语句select查询出附件名和附件内容,然后将附件通过ServletOutputStream和InputStream和byte b[]将附件下载。 具体代码可参考(http://blog.csdn.net/doymm2008/article/details/5630814)。2.9、中文字符乱码: 方法一:tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的。resp.setContentType("text/html;charset=utf-8");//设置页面的字符编码,解决界面显示中文乱码的问题 方法二:req.setCharacterEncoding("utf-8");//必须写在第一位,因为采用这种方式去读取数据,否则数据会出错。 方法三:修改配置文件。也就是web.xml文件 更加详细方法参考(http://www.jb51.net/article/74710.htm或者http://blog.sina.com.cn/s/blog_675e9aeb0101357h.html)。2.10、特殊字符转义: String temp = news.getArea(); //获取需要转义的内容 if (temp != null) { //内容不能为空 temp = temp.replaceAll("<", "<"); //将特殊符号"<"转义为"<" temp = temp.replaceAll(">", ">"); //将特殊符号">"转义为">" temp = temp.replaceAll("&", "&"); //将特殊符号"&"转义为"&" temp = temp.replaceAll("“", """); //将特殊符号"“"转义为""" temp = temp.replaceAll(" ", " "); //将特殊符号" "转义为" " news.setArea(temp); } 其他方式可参考(http://blog.csdn.net/songlixing/article/details/6957902)。2.11、让CKEditor支持jsp上传图片 思路是:1)准备一下JSP上传文件的JAR包:commons-fileupload.jar和commons-io.jar;2)编写一个JSP用于接收上传的文件(这里除上传图片功能外,需调用一个核心JS语句);3)编写一个JSP用于浏览文件(这里除上传图片功能外,需调用一个核心JS语句);4)修改CKEditor的config.js,将上传文件和浏览文件的JSP配置进去。 具体代码可以参考(http://www.cnblogs.com/hannover/archive/2011/07/29/2121536.html)。2.12、分页显示 定义变量pageSize(每页显示多少条变量、用户指定)、pageNow(希望显示第几页、用户指定)、pageCount(总共有多少页、计算:if (rowCount % pageSize == 0) { pageCount = rowCount / pageSize; } else { pageCount = (rowCount / pageSize) + 1; })、rowCount(总共有多少条变量、通过查询)。 rowCount查询:select count(ID_) from news; 显示select top " + pageSize + " * from news where ID_ not in(select top " + (pageSize * (pageNow - 1)) + " ID_ from news order by id_ desc)order by id_ desc 设计首页、上一页、超链接跳转、下一页、末页、直接跳转XX页。 详细代码可参考(http://www.cnblogs.com/yony/archive/2012/06/15/2550607.html)。2.13、复选框 对属性设置复选框,可进行多选、全选来操作,可同时操作多条数据。这里使用了js的功能。复选框的类型type="checkbox"。思路如下: 1)将前台jsp页面中的所有你要用到checkbox的name值设为相同。 2)在后台获取参数时,使用数组获取。 3)进行数组必要的格式转换,再进行sql操作。 代码可参考(思路:http://www.cnblogs.com/haore147/p/3617968.html | 复选框的设置:http://bbs.csdn.net/topics/350072249 | 参考实例:http://zhidao.baidu.com/link?url=Y2GFIBUHCIuift_2IQzSmtQhfejgYo6_wyh9pBe-A4z5CZk4jby9DSO08MoPbVOBnP1s4-Sy3WHe8uF9WBr8YvQqOs4xKpT0soagJqeN02e)3、AJAX功能3.1、输出XML: 当用户点击上面的"Get LIST info"这个按钮,就会执行 loadXMLDoc() 函数。 loadXMLDoc() 函数创建XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。当服务器响应就绪时,会构建一个 HTML 表格,从 XML 文件中提取节点(元素),最后使用已经填充了 XML 数据的 HTML 表格来更新 copy 占位符。 Servlet中调用sql语句select查出数据,转换成XML格式输出。 AJAX XML实例(http://www.w3school.com.cn/ajax/ajax_xmlfile.asp)。 输出XML文件代码可参考(http://wentao365.iteye.com/blog/1102815)。3.2、输出JSON: 当用户点击上面的"获取json"这个按钮,就会执行 loadXMLDoc() 函数。 loadXMLDoc() 函数创建XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。当服务器响应就绪时,会构建一个 HTML 表格,从 json 文件中提取节点(元素),最后使用已经填充了 json 数据的 HTML 表格来更新 copy 占位符。 Servlet中调用sql语句select查出数据,转换成JSON格式输出。再转换成json格式时使用了jsonStringer类 AJAX取得Servlet获取输出json文件可参考(http://bbs.csdn.net/topics/390708035)8楼。 输出JSON文件代码可参考(http://www.tuicool.com/articles/6niEjy)。