【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)

01

国庆长假终于结束了,博主想到以往这个时候,自己就已经回到学校,和一群基友扯扯犊子,顺便吹吹牛,好不快活,可惜这种生活不会再有了。虽说如此,但是参加了工作以后,毕竟有更多的时间去做自己想做的事情,没有了学校里的那么多约束,也不再需要为了考试忙活个半天,想来也是不错的。

好的,再次回到这个系列。

不知不觉,我发现自己在简书已经写了好几万字了。当我无聊的时候,就会去看看自己之前写的文章,然后感到很奇怪,似乎那些东西根本不是自己写的一样。我仿佛是在看别人的文章,好长时间我都有这种感受。

这真的是挺奇怪的,不过我转念又一想,当我看自己几个月以前的代码的时候,也经常有看不懂的情况,于是我也就释然了。

管他呢,先往下写吧。

上次登录工作做得差不多了,当我们在登录页面输入账号和密码,后台会进行一系列的验证,如果验证无误,就跳转到首页。

现在我们对首页进行一个小小的调整,就是说,如果登录成功了,右上角的登录图标就换成登录人的名字。

Paste_Image.png

这是标题栏对应的页面 —— header.jsp
Paste_Image.png

代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<div class="header">
	<div class='logo'>原创文字</div>
	<ul>
		<li class='first'><a href="index.jsp">首页</a></li>
		<li class='item'><a href="javascript:void(0)">原创故事</a></li>
		<li  class='item'><a href="javascript:void(0)">热门专题</li>
		<li  class='item'><a href="javascript:void(0)">欣赏美文</li>
		<li  class='item'><a href="javascript:void(0)">赞助</a></li>
	</ul>
	
	<div class='login'>
		<span><a href="login.jsp">登陆</a></span>  
		<span>|</span> 
		<span><a href="javascript:void(0)">注册</a></span>
	</div>
</div>

02

在上一节,我们判断当用户名和密码全部匹配的时候,就把user对象,还有username放到session中。

现在,要实现标题栏判断的功能,我们可能会这么想,就是能不能在header.jsp里面做一个简单的if判断,如果username存在,那么就把 登录|注册 这个字样给换掉。如果不存在,就维持原状。

对的,毫无疑问,这个思路肯定是可以的。

俗话说得好,只要思想不滑坡,办法总比困难多。写程序也是一样,怕就怕没思路,有了思路,啥都好说。实在不行,就百度呗。

嗯,我百度了一下(好吧,其实我也不太会。。。),解决了一点点小问题。现在开始进行代码的实现。

首先,需要导入两个jar包,
Paste_Image.png

分别是 jstl.jarstandard-1.1.2.jar

接着,在taglib.jsp中引入这个标签库

<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

这是JSTL的一个核心标签库,有了它,我们就可以为所欲为,哦不,可以在JSP页面上进行一些简单的控制了,比如说逻辑判断。

于是,代码就成了这样。

<div class='login'>
	<c:choose>
		<c:when  test="${empty sessionScope.username}">
			<span><a href="login.jsp">登陆</a></span>  
			<span>|</span>
			<span><a href="javascript:void(0)">注册</a></span>
		</c:when>
		<c:otherwise>
			<span><a href="javascript:void(0)">欢迎您,${sessionScope.username}</a></span>  
			<span> | </span>
			<span><a href="javascript:void(0)">登出</a></span>
		</c:otherwise>
	</c:choose>
</div>

其实引入标签库的时候,我有点疑惑,因为我引入的明显是一个网址,也就是说,这个标签库应该是远程的。既然是远程的,为什么我还必须要添加两个jar包不可呢?可是如果我不添加的话,编译又报错了。难道和tomcat的版本有关系?我用的是tomcat7.0。额,如果有大神知道的话,求告知一下,这个我真的不太清楚为什么。

不管了,先继续往下写吧。

好的,让我们测试一下。

Paste_Image.png

用户名: 张三
密码: 123456

点击登录

Paste_Image.png

成功了。

JSP作为一个被广泛使用的模板引擎,有着很多很多的标签库,也有不少第三方的标签库。当然,我们也可以自己编写标签,这个有时间的话,我也打算来写一写,自定义标签还是很有趣的。

03

有了登录,肯定还需要有登出功能,总不可能每次都让用户关掉浏览器吧。

登出的话,我们只需要把session中的信息都删掉就行了,然后自动跳转到登录页面。

登出按钮:

<span><a href="${basePath}/controller/logoutController.jsp">登出</a></span>

我们再在controller文件夹内新建一个logoutController:

Paste_Image.png

登出操作比较简单,我就直接上代码了:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%	
	//注销
	session.removeAttribute("username");
	session.invalidate();
	String path = request.getContextPath();
	//获取端口
	int port = request.getServerPort();
	String basePath  = null;
	if(port==80){
		basePath = request.getScheme()+"://"+request.getServerName()+path;
	}else{
		basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
	}
	response.sendRedirect(basePath + "/login.jsp");
%>

注销后,页面就自动跳转到登录页面。

然后,即便你再次访问首页,右上角也不会显示用户信息了。

Paste_Image.png

Paste_Image.png

因为我们已经将session中的用户信息给删除了。

04

接下来,我们继续画页面,之前首页的内容区一直没有做,现在我们来画一下吧。

既然是文章发布系统,主角就是各种文章,对不对?好的,文章又分很多种类,比如情感类,励志类,科技类等。于是,我们需要在首页对不同的文章进行一个分类展示。当然,只会展示前几条数据。

index.jsp

内容区代码:

<div class='h600' style='border:1px solid #ccc'>
	<div class='category'>
		<div class='title'>连载小说</div>
		<ul class='items'>
			<li class='item'></li>
			<li class='item'></li>
			<li class='item'></li>
		</ul>
	</div>

</div>

category有类型,种类的意思。

css

.category .title {
	margin-bottom: 10px;
    margin-top: 30px;
    border-bottom: 1px solid #cac5c5;
    height: 30px;
	text-indent:1em;
	font-size:18px;
	color:#666;
}

Paste_Image.png

Paste_Image.png

OK,大概有一个样子了。

接下来,我们给每一个item设置一个宽高,背景色,再加上一个左浮动。

.category .items .item {
    width: 160px;
    height: 231px;
    background: #ccc;
    margin: 20px;
    float: left;
}

就成了这样:

Paste_Image.png

因为每一个item都是左浮动,所以别忘了清除浮动。

Paste_Image.png

基于这样的一个思路,我们现在可以把页面模型搭出来了。

html

<!-- 内容区域 -->
<div style='border:1px solid #ccc'>
	<br/><br/>
	<div class='category'>
		<div class='title'>连载小说</div>
		<ul class='items'>
			<li class='item'></li>
			<li class='item'></li>
			<li class='item'></li>
			<div style='clear:both'></div>
		</ul>
	</div>
	
	<div class='category'>
		<div class='title'>编程代码类</div>
		<ul class='items'>
			<li class='item'></li>
			<li class='item'></li>
			<div style='clear:both'></div>
		</ul>
	</div>


</div>

css

.category {
	margin-top: 10px;
	margin-bottom:20px;
}
	
.category .title {
	margin-bottom: 10px;
    border-bottom: 1px solid #cac5c5;
    height: 30px;
	text-indent:1em;
	font-size:18px;
	color:#666;
}
.category .items {
	margin-left:10px;
}
.category .items .item {
    width: 230px;
    height: 320px;
    background: #ccc;
    margin: 20px;
    float: left;
    margin-right:20px;
    cursor:pointer;
}

现在的首页大概就是这个样子:
1.gif

第1篇 开发工具及框架概述  第1章 开发前奏  1.1 java web应用概述  1.2 配置开发环境  1.3 基础技术简单简介  1.4 核心框架初步认识  1.5 小结  第2章 myedipse开发工具对各种框架的支持  2.1 使用jsp的两种模式  2.2 struts框架的实现  2.3 hibernate框架的实现  2.4 jpa框架的实现  2.5 spring框架的实现  2.6 jsf框架的实现  2.7 ajax框架的实现  2.8 使用jdbc连接数据库  2.9 小结  第3章 实现各种框架的集成  3.1 spring框架与其他框架的集成原理  3.2 实现ssh三种框架环境集成    3.3 实现spring与struts 2.x集成  3.4 实现spring、struts2.x和hibernate框架集成  3.5 小结  第2篇 典型模块开发  第4章 在线文本编辑器(fckeditor)  4.1 分析fckeditor在线文本编辑器  4.2 fckeditor在线文本编辑器初级应用  4.3 fckeditor在线文本编辑器常用配置  4.4 fckeditor在线文本编辑器高级应用  4.5 小结  第5章 验证模块(jsp+servlet+jsvaildation)  5.1 表单基础  5.2 客户端表单验证框架  5.3 服务器端验证  5.4 实现图形验证码  5.5 避免重复提交功能  5.6 缩略加水印图像  5.7 小结  第6章 网络硬盘  6.1 网络硬盘功能原理  6.2 网络硬盘功能具体实现——浏览磁盘和显示文件信息  6.3 网络硬盘功能具体实现——操作文件夹和文件  6.4 小结  第7章 网站统计模块(jsp+servlet)  7.1 网站统计模块原理  7.2 实现显示欢迎信息功能,  7.3 指点迷津——cookie知识  7.4 统计访问量功能  7.5 指点迷津——session知识  7.6 统计在线人数功能  7.7 小结  第8章 网络购物车(jsp+servlet+javabean)  8.1 网络购物车原理  8.2 实现网络购物车功能  8.3 小结  第9章 搜索引擎(lucene+web spider)  9.1 关于搜索引擎的基本概念  9.2 网络蜘蛛(web spider)  9.3 下载和分析lucene全文搜索组件  9.4 初步使用lucene全文搜索组件  9.5 新闻搜索引擎具体实现  9.6 小结  第10章 在线网上支付(jsp+servlet+javabean)  10.1 在线网上支付原理  10.2 在线网上支付功能工具类  10.3 发出支付请求过程  10.4 接受支付返回过程  10.5 小结  第11章 javaweb邮件发送系统(jsp+servlet+javabean)  11.1 javaweb邮件发送系统原理  11.2 下载邮件相关jar包  11.3 普通方式电子邮件的发送  11.4 html方式电子邮件的发送  11.5 携带附件电子邮件的发送  11.6 多学两招——关于邮件的基础知识  11.7 小结  第12章 网络留言板(jsp+servlet+javabean)  12.1 网络留言板原理  12.2 添加留言  12.3 浏览留言  12.4 管理留言  12.5 使用dao模式网络留言板  12.6 小结  第13章 网络留言板续——oracle数据库  13.1 连接数据库——idbc驱动程序  13.2 数据库连接池  13.3 commons dbutils组件  13.4 小结  第14章 ajax技术jquary框架的经典应用  14.1 jquery框架的简单应用  14.2 利用jquery框架实现的经典运用  14.3 实现仿google suggest功能  14.4 google suggest功能的相关javascript代码  14.5 小结  第15章 在线文件上传和下载(struts 2.x+fileupload)  15.1 在线文件上传和下载模块原理  15.2 文件上传组件fileupload  15.3 初步使用文件上传组件(components-fileupload)  15.4 单文件的上传  15.5 多文件的上传  15.6 小结  第16章 网上投票系统(struts 2.x+hfreechart)  ]6.1 网上投票系统原理  16.2 图表组件jfreechan  16.3 初步使用图表组件(jfreechad)  16.4 实现网上投票系统  16.5 小结  第17章 商业银行网上账户管理系统(struts 2.x)  17.1 商业银行网上账户管理系统简述  17.2 商业银行网上账户管理系统前期准备  17.3 商业银行网上账户管理系统具体实现——持久层  17.4 商业银行网上账户管理系统具体实现——业务层  17.5 商业银行网上账户管理系统具体实现——表示层  17.6 商业银行网上账户管理系统具体实现——工具类、校验器及拦截器  17.7小结  第18章 hibernate分页系统(hibernate 3.0)  18.1 hibernate分页系统原理  18.2 封装javabean的commons-beanutils组件  18.3 关于hibernate框架中一些通用类  18.4 实现hibernate分页系统前期准备  18.5 关于hibernate分页系统的具体实现  18.6 关于hibernate分页系统的表示层  18.7 多学两招——分页标签  18.8 小结  第19章 生成报表(struts 2.x+hibernate+jxl)  19.1 生成报表原理  19.2 下载jxl组件  19.3 生成报表前期准备  19.4 生成报表具体开发——持久层和服务层  19.5 生成报表具体开发——表示层  19.6 多学两招——其他报表插件  19.7 小结  第20章 数据格式转换(struts 2.x+hibernate+dom4j)  20.1 关于xml文件基础知识  20.2 下载dom4j  20.3 数据格式转换功能前期准备  20.4 数据格式转换功能具体开发  20.5 多学两招——其他操作xml文件组件  20.6 小结  第21章 用户维护功能(struts 2.x+ibatis)  21.1 用户维护功能  21.2 关于用户维护基础知识——ibatis框架  21.3 用户维护系统具体实现  21.4 小结  第22章 用户登录模块(struts 2.x+guice+国际化)  22.1 用户登录概述  22.2 关于用户登录的基础知识——国际化资源  22.3 关于用户登录的基础知识——guice框架  22.4 用户登录的具体实现  22.5 小结  第3篇 项目案例实战  第23章 在线音乐管理系统(ajax+jsp+struts 2.x)  23.1 在线音乐管理系统简述  23.2 在线音乐管理系统前期准备  23.3 在线音乐管理系统具体实现——超级管理员操作  23.4 在线音乐管理系统具体实现——注册用户操作  23.5 小结  第24章 数据汇聚系统(struts 2.x+spring+ibatis)  24.1 数据汇聚系统简述  24.2 数据汇聚系统简述  24.3 关于ibatis框架的一些文件  24.4 数据汇聚系统具体实现  24.5 数据汇聚系统具体实现——表示层  24.6 小结  第25章 投票管理系统(struts 2.x+spring+hibernate)  25.1 投票管理系统简述  25.2 投票管理系统前期准备  25.3 投票管理系统的具体实现——领域模型层  25.4 投票管理系统的具体实现——持久层  25.5 投票管理系统的具体实现——业务层  25.6 关于管理员表示层  25.7 关于创建投票表示层  25.8 关于管理和查找投票表示层  25.9 关于实现投票操作表示层  25.10 小结  第26章 权限管理系统(struts 2.x+spring+jpa)  26.1 权限管理系统简述  26.2 权限管理系统前期准备  26.3 权限管理系统具体实现——关联表操作  26.4 权限管理系统具体实现——模块操作  26.5 权限管理系统具体实现——功能操作  26.6 权限管理系统具体实现——角色操作  26.7 权限管理系统具体实现——用户操作  26.8 小结  第27章 商业银行设备巡检系统(struts 2.x+spring+hibernate)  27.1 商业银行设备巡检系统概述  27.2 商业银行设备巡检系统前期准备  27.3 商业银行设备巡检系统具体实现——系统管理应用  27.4 商业银行设备巡检系统具体实现——设备报修管理  27.5 商业银行设备巡检系统具体实现——设备巡检管理  27.6 多学两招——关于postgresql数据库  27.7 小结  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

剽悍一小兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值