网站功能
用户注册
游客可以注册为网站会员,会员享有发表主题和回复主题(其他会员发表)的权限。
密码找回
会员可以提供注册时填写的安全问题、回答、邮箱找回自己的密码。
展示主题帖
1.网站首页分页展示了论坛的所有主题帖,点击“上一页”、“下一页”链接可以翻页浏览主题帖。 2.每个主题帖的展示内容包括:主题帖标题、发表人用户名、发表时间、最后回复人用户名、最后回复时间。 3.点击主题帖展示内容中的发表人用户名、最后回复人用户名,可以查看该用户的详细信息。
展示回复帖
1.网站回复帖页分页展示了用户从其它页选中的主题帖和其所有回复帖,点击“上一页”、“下一页”链接可以翻页浏览其回复帖。
2.每条回复帖内容包括:回复帖楼号(按回复时间递增)、回复帖标题、回复帖内容、回复时间、回复用户信息。
3.点击回复用户信息中的用户头像可以查看用户的详细信息。
发表帖子
会员登陆后可以发表主题贴。
回复帖子
会员登陆后可以回复其他会员发表的主题帖,不能回复自己发表的主题帖。
查看会员信息
1.会员信息内容:用户名、用户ID、性别、发表主题帖数、回复主题帖数、注册会员时间、上次登录时间、上次发表时间、发表的主题帖列表、回复的主题帖列表。
2.查看权限:没有限制,包括游客和注册用户。
3.查看范围:发表过主题帖或者回复过主题帖的会员。
网站实现
开发平台
开发工具:MyEclipse 8.5
Datebase:MySQL 5.5.27
Web Server: Tomcat 7.0.33
开发技术
前台网页:XHTML CSS
网页脚本:JavaScript
后台: JSP
数据库访问:JDBC
开发流程
需求分析:
确定网站要实现的功能,编辑并保存为《网站需求概况》文档。
界面原型设计
设计网站要实现的界面原型,也就是用户可以看到页面展示效果,此时的页面中的数据为静态的。
程序开发
1. 封装实体对象类型:根据界面原型分析有哪些实体对象,各自具有哪些属性和方法,封装好实体类型。
2. 创建数据库与表:遵守项目的命名规则,创建项目的数据库和与实体类对应的数据库表。
3. 封装数据库访问类型:根据数据库服务器的种类,封装需要的数据库访问方法(连接数据库、创建Statement、执行查询、关闭连接、关闭Statement、关闭结果集等)。
4. 封装实体对象服务类型:封装实体对象在数据库中的增删改查等方法。
5. 界面原型静态数据转换为动态数据:通过对数据库的增删改查操作,将页面静态数据转换为数据库中的相应真实数据,实现动态页面。
测试
部署项目,启动WebServer(Tomcat),尝试在不同的浏览器中访问部署的项目,测试所有的功能有没有实现,如果测试结果出现错误或者没有达到预期效果,修改程序后,继续测试,直到所有的功能达到预期的要求。
维护与升级
项目测试通过后,可以作为第一个版本使用,后期的工作就是项目中隐藏bug的修改以及功能的修改和完善。
问题解决
中文乱码
表单提交中文乱码
现象:注册用户登陆后,发表主题帖或者回复主题帖,其中输入的中文部分在页面更新后显示为乱码。
分析:从用户发表主题帖(或者回复主题帖)到页面更新后显示主题帖的过程中,提交的文字都经过了哪些流程:
首先,发表主题帖页面到发表主题帖处理页面。
其次,发表主题帖处理页面到数据库。
最后,数据库到主题帖展示页面。
依据流程,首先看看发表主题帖页面接收过来的文字是否正确,为了验证,使用System.out.println()在后台打印,验证结果为中文部分在后台打印为乱码。第一步就出错了,数据库里肯定也是乱码,查看数据库里的数据,同样也是乱码。
原因:数据在传送和接收的过程中,编码不一致导致。表单提交页面(发表主题页面)表单以post方式提交,因为tomcat的默认编码方式为iso-8859-1,如果没有设置提交的编码方式,表单提交时数据以iso-8859-1编码方式提交,而接收数据页面(发表主题处理页面)以utf-8编码方式接收,所以导致出现乱码现象。
解决:
方法1:接收参数时进行编码转换
Strign str = new String(request.getParameter("parameter").getBytes("iso-8859-1"), "utf-8");
弊端:每个参数接收时都必须进行转码
方法2:在请求页面的开始位置,设置request的转换编码
request.setCharacterEncoding(“utf-8”);
弊端:每个接收参数包含中文的页面都必须设置request的转换编码。
方法3:使用过滤器filter
在web.xml中设置字符编码过滤器
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.wukewei.bbs.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
字符编码过滤器类:
publicclass CharacterEncodingFilterimplements Filter {
protected FilterConfigfilterConfig =null;
protected Stringencoding ="";
publicvoid destroy() {
filterConfig =null;
encoding =null;
}
publicvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
if (encoding !=null) {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
}
publicvoid init(FilterConfig fc)throws ServletException {
this.filterConfig = fc;
this.encoding = fc.getInitParameter("encoding");
}
}
url传值中文乱码
现象:通过url形式传值中文,接收页面使用request.getParameter()接收后显示为乱码
原因:数据在传送和接收的过程中,编码不一致导致。
解决:
方法1:接收参数时进行编码转换
String str = newString(request.getParameter(“parameter”).getBytes(“iso-8859-1”), “utf-8”); 弊端:每个参数接收都必须进行转码。
方法2:配置server.xml文件
在tomcat安装路径的conf文件夹下的server.xml配置文件中配置URIEncoding属性
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"/>
时间显示的精度丢失
现象:MySql数据库表中的datetime类型用java.sql.Date类型保存,在HTML中用SimpleDateFormat格式化为(yyyy-MM-dd hh:mm:ss),显示在浏览器时,出现时间部分(hh:mm:ss)精度丢失,显示为00:00:00。
原因:数据类型的不正确使用导致:java.sql.Date来保存MySql数据库表中的类型为datetime的字段。MySql中的datetime数据类型为日期时间类型,而java.sql.Date为日期类型,没有时间部分,导致了上面的问题出现。
解决:将实体类中用于保存数据库表中datetime的字段类型更改为java.sql.Timestamp类型,java.sql.Timestamp是日期时间类型。