blog
该项目属于java中级阶段,jsp+servlet+mysql
前端页面是网上下载的,后面改了一些
后台主要实现 对数据库 查,增,主要有分页查询,插入评论,倒叙查询,更多的是查询,过程中遇到了很多bug,经过多次改良后,懂了许多
主要是学习了EL表达式还有分页查询,session,request对象作用域,预编译,转发和重定向,分层思想,现在改bug也快了许多,更熟悉创作流程
话不多说,上代码
以上是整个项目代码一览图
entity层
Album 相册
Article 文章
Critique 评论
Me (关于我)页面的数据
Photo 照片
每一个都是定义好后给于getter和setter还有toString(本项目没用到),(enp,emp1,Manager没用到)
Album
package com.bbx.entity;
public class Album {
private int id;
private String title;
private String image;
private String content;
private String notice;
private String time;
private String week;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getNotice() {
return notice;
}
public void setNotice(String notice) {
this.notice = notice;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
@Override
public String toString() {
return "Album{" +
"id=" + id +
", title='" + title + '\'' +
", image='" + image + '\'' +
", content='" + content + '\'' +
", notice='" + notice + '\'' +
", time='" + time + '\'' +
", week='" + week + '\'' +
'}';
}
}
Article
package com.bbx.entity;
public class Article {
private int id;
private String title;
private String content;
private String image;
private String time;
private String editer;
private int count;
private int count1;
private String type;
private String notice;
private String keywords;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getEditer() {
return editer;
}
public void setEditer(String editer) {
this.editer = editer;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getCount1() {
return count1;
}
public void setCount1(int count1) {
this.count1 = count1;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
public String getNotice() {
return notice;
}
public void setNotice(String notice) {
this.notice = notice;
}
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
@Override
public String toString() {
return "Article{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
", image='" + image + '\'' +
", time='" + time + '\'' +
", editer='" + editer + '\'' +
", count=" + count +
", count1=" + count1 +
", type='" + type + '\'' +
", notice='" + notice + '\'' +
", keywords='" + keywords + '\'' +
'}';
}
}
Critique
package com.bbx.entity;
public class Critique {
private int id;
private int article_id;
private String content;
private String name;
private String time;
private String photo;
private String type;
private String notice;
@Override
public String toString() {
return "critique{" +
"id=" + id +
", article_id=" + article_id +
", content='" + content + '\'' +
", name='" + name + '\'' +
", time='" + time + '\'' +
", photo='" + photo + '\'' +
", type='" + type + '\'' +
", notice='" + notice + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getArticle_id() {
return article_id;
}
public void setArticle_id(int article_id) {
this.article_id = article_id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getNotice() {
return notice;
}
public void setNotice(String notice) {
this.notice = notice;
}
}
Me
package com.bbx.entity;
public class Me {
private int id;
private String content;
private String name;
private String notice;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNotice() {
return notice;
}
public void setNotice(String notice) {
this.notice = notice;
}
@Override
public String toString() {
return "Me{" +
"id=" + id +
", content='" + content + '\'' +
", name='" + name + '\'' +
", notice='" + notice + '\'' +
'}';
}
}
Photo
package com.bbx.entity;
public class Photo {
private int id;
private String image;
private String note;
private String type;
private String notice;
private String time;
private int album_id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getNotic() {
return notice;
}
public void setNotic(String notic) {
this.notice = notic;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public int getAlbum_id() {
return album_id;
}
public void setAlbum_id(int album_id) {
this.album_id = album_id;
}
@Override
public String toString() {
return "Photo{" +
"id=" + id +
", image='" + image + '\'' +
", note='" + note + '\'' +
", type='" + type + '\'' +
", notic='" + notice + '\'' +
", time='" + time + '\'' +
", album_id=" + album_id +
'}';
}
}
factor目录该项目没用到
Dbutil
DB类用于存放JDBC连接池和 各种方法
package com.bbx.DButils;
import com.bbx.entity.*;
import com.bbx.servlet.CritiqueInsertServlet;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class Dbutil {
//final表示该值只能手动改变,不允许中途赋值改变
//static表示能快速执行,可以被其他类调用
private static final String driverClass = "com.mysql.jdbc.Driver"; //数据库驱动
//连接数据库的URL地址
private static final String url = "jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=UTF-8";
private static final String username = "root";
private static final String password = "root";
private static Connection connection = null;
//静态代码块负责加载驱动
static {
try {
Class.forName(driverClass);
//单例模式返回数据库连接对象
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
return connection;
}
//工具方法,sql语句集合,方便调用
//遍历出数据库中的数据显示在网页
public static List<Critique> critiqueFind(String sql, Object... objects) throws SQLException {
//预编译,PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
PreparedStatement pstm = connection.prepareStatement(sql);
//多个?查询
for (int i = 0;i<objects.length;i++){
pstm.setObject(i+1,objects[i]);
}
ResultSet rs = pstm.executeQuery();
// System.out.println("$$$$$$$$$$$$$$$$$$$$$"+sql);
List<Critique> list = new ArrayList<>();
while (rs.next()) {
Critique critique = new Critique();
critique.setId(rs.getInt("id"));
critique.setArticle_id(rs.getInt("article_id"));
critique.setContent(rs.getString("content"));
critique.setName(rs.getString("name"));
critique.setTime(rs.getString("time"));
critique.setPhoto(rs.getString("photo"));
critique.setType(rs.getString("type"));
critique.setNotice(rs.getString("notice"));
list.add(critique);
}
return list;
}
//求表中数据总条数
public static int findAll(String sql, Object... objects) throws SQLException {
int countpage=0;
//预编译,PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
PreparedStatement pstm = connection.prepareStatement(sql);
//多个?查询
for (int i = 0;i<objects.length;i++){
pstm.setObject(i+1,objects[i]);
}
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
countpage++;
}
return countpage;
}
public static List<Photo> photosFind(String sql, Object... objects) throws SQLException {
//预编译,PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
PreparedStatement pstm = connection.prepareStatement(sql);
//多个?查询
for (int i = 0;i<objects.length;i++){
pstm.setObject(i+1,objects[i]);
}
ResultSet rs = pstm.executeQuery();
List<Photo> list = new ArrayList<>();
while (rs.next()) {
Photo photo = new Photo();
photo.setId(rs.getInt("id"));
photo.setImage(rs.getString("image"));
photo.setNote(rs.getString("note"));
photo.setType(rs.getString("type"));
list.add(photo);
}
return list;
}
public static List<Me> mesFind(String sql, Object... objects) throws SQLException {
//预编译,PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
PreparedStatement pstm = connection.prepareStatement(sql);
//多个?查询
for (int i = 0;i<objects.length;i++){
pstm.setObject(i+1,objects[i]);
}
ResultSet rs = pstm.executeQuery();
List<Me> list = new ArrayList<>();
while (rs.next()) {
Me me = new Me();
me.setId(rs.getInt("id"));
me.setContent(rs.getString("content"));
list.add(me);
}
return list;
}
public static List<Article> articlesFind(String sql, Object... objects) throws SQLException {
//预编译,PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
PreparedStatement pstm = connection.prepareStatement(sql);
//多个?查询
for (int i = 0;i<objects.length;i++){
pstm.setObject(i+1,objects[i]);
}
ResultSet rs = pstm.executeQuery();
List<Article> list = new ArrayList<>();
while (rs.next()) {
Article article = new Article();
article.setId(rs.getInt("id"));
article.setTitle(rs.getString("title"));
article.setContent(rs.getString("content"));
article.setImage(rs.getString("image"));
article.setTime(rs.getString("time"));
article.setEditer(rs.getString("editer"));
article.setCount(rs.getInt("count"));
article.setCount1(rs.getInt("count1"));
article.setType(rs.getString("type"));
article.setNotice(rs.getString("notice"));
article.setKeywords(rs.getString("keywords"));
list.add(article);
}
return list;
}
}
dao层
dao层主要用来写sql语句,调用DB中的方法,如果觉得很多方法写在DB很乱可以写在dao或者service
AlbumDao
package com.bbx.dao;
import com.bbx.DButils.Dbutil;
import com.bbx.entity.Photo;
import java.sql.SQLException;
import java.util.List;
public class AlbumDao {
Dbutil dbutil=new Dbutil();
//查找相册1
public List<Photo> SelectAlbum1() throws SQLException {
String sql="select * from photo where type=1";
List<Photo> select=dbutil.photosFind(sql);
return select;
}
//查找相册2
public List<Photo> SelectAlbum2() throws SQLException {
String sql="select * from photo where type=2";
List<Photo> select=dbutil.photosFind(sql);
return select;
}
}
ArticleDao
package com.bbx.dao;
import com.bbx.DButils.Dbutil;
import com.bbx.entity.Article;
import com.bbx.entity.Critique;
import com.bbx.service.ArticleService;
import com.bbx.service.CritiqueService;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class ArticleDao {
Dbutil dbutil=new Dbutil();
//第一次进入article.jsp页面时,调用该方法获取数据
public List<Article> firstSelectArticle() throws SQLException {
int all=getallNumArticle();
List<Article> select=null;
String sql1 = "select * from article";
String sql2 = "select * from article limit 0,3";
if(all<3){
select = dbutil.articlesFind(sql1);
}else {
select = dbutil.articlesFind(sql2);
}
return select;
}
//根据用户点击的文章,按传输过来的id值选择下面7个方法查询
public List<Article> SelectArticle1() throws SQLException {
String sql="select * from article where id=1";
List<Article> select=dbutil.articlesFind(sql);
return select;
}
public List<Article> SelectArticle2() throws SQLException {
String sql="select * from article where id=2";
List<Article> select=dbutil.articlesFind(sql);
return select;
}
public List<Article> SelectArticle3() throws SQLException {
String sql="select * from article where id=3";
List<Article> select=dbutil.articlesFind(sql);
return select;
}
public List<Article> SelectArticle4() throws SQLException {
String sql="select * from article where id=4";
List<Article> select=dbutil.articlesFind(sql);
return select;
}
public List<Article> SelectArticle5() throws SQLException {
String sql="select * from article where id=5";
List<Article> select=dbutil.articlesFind(sql);
return select;
}
public List<Article> SelectArticle7() throws SQLException {
String sql="select * from article where id=7";
List<Article> select=dbutil.articlesFind(sql);
return select;
}
//根据当前页数,求搜索的起始位置
public int startpageArticle(int currentpage){
int page=currentpage;
int start=0;
if(page==1){
start=0;
}else {
start = (page - 1) * 3;
}
return start;
}
//根据当前页数,求搜索的末尾位置
public int endpageArticle(int currentpage) throws SQLException {
int end=0;
//如果等于最后一页
if(currentpage==getpageNumArticle()){
end=getallNumArticle();
}else {
end = currentpage * 3;
}
return end;
}
//当最后一页不足3个时
public int endpage(int currentpage) throws SQLException {
int end=endpageArticle(currentpage);
int c=currentpage;
int i=end-((c-1)*3);
int limt=3;
//如果超过
if(i<3){
limt=i;
}
return limt;
}
//分页查询
public List<Article> changePage(int currentpage, int start, int limt) throws SQLException {
//limit索引,显示索引以后多少行
String sql="select * from article limit ?,?";
List<Article> strings5= dbutil.articlesFind(sql,start,limt);
return strings5;
}
//获取article总条数
public int getallNumArticle() throws SQLException {
String sql="select * from article";
int all=dbutil.findAll(sql);
return all;
}
//获取critique总页数
public int getpageNumArticle() throws SQLException {
int all=getallNumArticle();
int countpage=0;
if(all%3==0){
countpage=all/3;
}else if(all%3!=0){
countpage=(all/3)+1;
}
return countpage;
}
}
CritiqueDao
package com.bbx.dao;
import com.bbx.DButils.Dbutil;
import com.bbx.entity.Critique;
import com.bbx.service.CritiqueService;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
public class CritiqueDao {
Dbutil dbutil = new Dbutil();
//首次进入页面,获取评论
public List<Critique> firstSelectCritique() throws SQLException {
int all=getallNumCritique();
List<Critique> select=null;
String sql1 = "select * from critique";
String sql2 = "select * from critique limit 0,5";
if(all<5){
select = dbutil.critiqueFind(sql1);
}else {
select = dbutil.critiqueFind(sql2);
}
return select;
}
//实现album相册里的最新评论
public List<Critique> descSlectCritique() throws SQLException {
List<Critique> select=null;
//在critique表中按照time的倒叙desc输出5条
String sql="select * from critique order by time desc limit 5";
select=dbutil.critiqueFind(sql);
return select;
}
//实现Critique插入语句的方法
public int addCritique(String name,String content) throws SQLException {
CritiqueService service=new CritiqueService();
//获取当天时间
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
String time = s.format(c.getTime());
//获取数据库连接对象
Connection connection = Dbutil.getConnection();
//sql插入语句
String sql = "insert into critique(content,name,time) values(?,?,?)";
//PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
PreparedStatement ps=(PreparedStatement)connection.prepareStatement(sql);
ps.setString(1,content);
ps.setString(2,name);
ps.setString(3,time);
//i为执行成功的条数
int i = ps.executeUpdate();
//将i返回到service层
return i;
}
//根据当前页数,求搜索的起始位置
public int startpageCritique(int currentpage){
int page=currentpage;
int start=0;
if(page==1){
start=0;
}else {
start = (page - 1) * 5;
}
return start;
}
//根据当前页数,求搜索的末尾位置
public int endpageCritique(int currentpage) throws SQLException {
int end=0;
//如果等于最后一页
if(currentpage==getpageNumCritique()){
end=getallNumCritique();
}else {
end = currentpage * 5;
}
return end;
}
//当最后一页不足5个时
public int endpage(int currentpage) throws SQLException {
int end=endpageCritique(currentpage);
int c=currentpage;
int i=end-((c-1)*5);
int limt=5;
//如果超过
if(i<5){
limt=i;
}
return limt;
}
//分页查询
public List<Critique> changePage(int currentpage,int start,int limt) throws SQLException {
//limit索引,显示索引以后多少行
String sql="select * from critique limit ?,?";
List<Critique> strings5= dbutil.critiqueFind(sql,start,limt);
return strings5;
}
//获取critique总条数
public int getallNumCritique() throws SQLException {
String sql="select * from critique";
int all=dbutil.findAll(sql);
return all;
}
//获取critique总页数
public int getpageNumCritique() throws SQLException {
int all=getallNumCritique();
int countpage=0;
if(all%5==0){
countpage=all/5;
}else if(all%5!=0){
countpage=(all/5)+1;
}
return countpage;
}
}
MeDao
package com.bbx.dao;
import com.bbx.DButils.Dbutil;
import com.bbx.entity.Me;
import com.bbx.entity.Photo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class MeDao {
Dbutil dbutil=new Dbutil();
//查找Me
public List<Me> SelectMe() throws SQLException {
String sql="select * from me where id=1";
List<Me> select= dbutil.mesFind(sql);
return select;
}
}
service层
service主要用来连接dao层和servlet层,可以写一些方法,有利于项目封装和可读性
AlbumService
package com.bbx.service;
import com.bbx.dao.AlbumDao;
import com.bbx.entity.Album;
import com.bbx.entity.Photo;
import java.sql.SQLException;
import java.util.List;
public class AlbumService {
AlbumDao dao=new AlbumDao();
//查找相册1
public List<Photo> finaAll1(){
List<Photo> strings=null;
try {
strings=dao.SelectAlbum1();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
//查找相册2
public List<Photo> finaAll2(){
List<Photo> strings=null;
try {
strings=dao.SelectAlbum2();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
}
ArticleService
package com.bbx.service;
import com.bbx.dao.ArticleDao;
import com.bbx.entity.Article;
import com.bbx.entity.Critique;
import java.sql.SQLException;
import java.util.List;
public class ArticleService {
ArticleDao dao=new ArticleDao();
//第一次进入article.jsp页面时调用该方法
public List<Article> finaAll(){
List<Article> strings=null;
try {
strings=dao.firstSelectArticle();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
//一下7个方法都是根据用户点击的id值,分别查询对应的内容
public List<Article> finaAll1(){
List<Article> strings=null;
try {
strings=dao.SelectArticle1();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
public List<Article> finaAll2(){
List<Article> strings=null;
try {
strings=dao.SelectArticle2();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
public List<Article> finaAll3(){
List<Article> strings=null;
try {
strings=dao.SelectArticle3();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
public List<Article> finaAll4(){
List<Article> strings=null;
try {
strings=dao.SelectArticle4();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
public List<Article> finaAll5(){
List<Article> strings=null;
try {
strings=dao.SelectArticle5();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
public List<Article> finaAll7(){
List<Article> strings=null;
try {
strings=dao.SelectArticle7();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
//用户再article.jsp页面点击其他页时,调用该方法,实现分页效果
public List<Article> changePage(String currentpage1) throws SQLException {
//critique表总条数
int all=dao.getallNumArticle();
//按总数分,获取总页数
int coutpage=dao.getpageNumArticle();
int currentpage=Integer.parseInt(currentpage1);
//每次查多少条
int limt=dao.endpage(currentpage);
//起始位置
int start=dao.startpageArticle(currentpage);
//末尾位置
int end=dao.endpageArticle(currentpage);
//查询
List<Article> strings5=dao.changePage(currentpage,start,limt);
return strings5;
}
}
CritiqueService
package com.bbx.service;
import com.bbx.dao.*;
import com.bbx.entity.Album;
import com.bbx.entity.Critique;
import com.bbx.servlet.CritiqueInsertServlet;
import sun.misc.Request;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CritiqueService {
CritiqueDao dao = new CritiqueDao();
//用户第一次进入critique.jsp中时,调用该方法,获取数条评论
public List<Critique> firstFind(){
List<Critique> strings = null;
try {
strings = dao.firstSelectCritique();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
public int addCritique(String name,String content) throws SQLException {
//将参数传递到dao层执行再返回
int i = dao.addCritique(name, content);
return i;
}
//非首次进入,点击分页后调用该方法
public List<Critique> changePage(String currentpage1) throws SQLException {
//critique表总条数
int all=dao.getallNumCritique();
//按总数分,获取总页数
int coutpage=dao.getpageNumCritique();
int currentpage=Integer.parseInt(currentpage1);
//每次查多少条
int limt=dao.endpage(currentpage);
//起始位置
int start=dao.startpageCritique(currentpage);
//末尾位置
int end=dao.endpageCritique(currentpage);
//查询
List<Critique> strings5=dao.changePage(currentpage,start,limt);
return strings5;
}
//album相册倒叙输出5条
public List<Critique> descSelectCritique() throws SQLException {
CritiqueDao dao=new CritiqueDao();
List<Critique> select=dao.descSlectCritique();
return select;
}
}
MeService
package com.bbx.service;
import com.bbx.dao.MeDao;
import com.bbx.entity.Me;
import java.sql.SQLException;
import java.util.List;
public class MeService {
MeDao dao=new MeDao();
//用户进入about页面时,调用该方法,获取数据,传送到jsp
public List<Me> finaAll(){
List<Me> strings=null;
try {
strings=dao.SelectMe();
} catch (SQLException e) {
e.printStackTrace();
}
return strings;
}
}
servlet层
servlet主要用于转发用户请求,跳转页面,与jsp交流
IndexFirstServlet(首页index.jsp的,用户首次进入项目时调用,创建了aend sesson对象,ArticleFirstServlet也能获取到总页数)
package com.bbx.servlet;
import com.bbx.dao.ArticleDao;
import com.bbx.dao.CritiqueDao;
import com.bbx.entity.Article;
import com.bbx.service.ArticleService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet(name = "IndexFirstServlet")
public class IndexFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
ArticleService service = new ArticleService();
ArticleDao dao = new ArticleDao();
CritiqueDao cdao=new CritiqueDao();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//创建session对象,该对象直到项目关闭才消失
HttpSession session = request.getSession();
int currentpage = 1;
int aend=1;
try {
aend=dao.getpageNumArticle();
} catch (SQLException e) {
e.printStackTrace();
}
List<Article> articles = service.finaAll();
request.setAttribute("articles", articles);
//reques对象保存的值作用域在该servlet里面
request.setAttribute("currentpage", currentpage);
//session保存的值直到项目关闭才消失
session.setAttribute("aend", aend);
request.getRequestDispatcher("/WEB-INF/page/index.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
IndexServlet(非首次进入,用户点击其他页之后,调用实现分页效果)
package com.bbx.servlet;
import com.bbx.dao.ArticleDao;
import com.bbx.dao.CritiqueDao;
import com.bbx.entity.Article;
import com.bbx.service.ArticleService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet(name = "IndexFirstServlet")
public class IndexFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
ArticleService service = new ArticleService();
ArticleDao dao = new ArticleDao();
CritiqueDao cdao=new CritiqueDao();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//创建session对象,该对象直到项目关闭才消失
HttpSession session = request.getSession();
int currentpage = 1;
int aend=1;
try {
aend=dao.getpageNumArticle();
} catch (SQLException e) {
e.printStackTrace();
}
List<Article> articles = service.finaAll();
request.setAttribute("articles", articles);
//reques对象保存的值作用域在该servlet里面
request.setAttribute("currentpage", currentpage);
//session保存的值直到项目关闭才消失
session.setAttribute("aend", aend);
request.getRequestDispatcher("/WEB-INF/page/index.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
MeServlet(关于我,about.jsp页面的,调用获取数据)
package com.bbx.servlet;
import com.bbx.entity.Me;
import com.bbx.service.MeService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "MeServlet")
public class MeServlet extends HttpServlet {
private static final long serialVersionUID=1L;
MeService service=new MeService();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//将service.finaAll中的String数据传入mes对象中
List<Me> mes=service.finaAll();
//request对象在servlet外会失效,保存critiques这个对象,使得页面能获取到该值
request.setAttribute("mes",mes);
//转发
request.getRequestDispatcher("/WEB-INF/page/about.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
AriticleFirstServlet(用于首次进入文章区article.jsp)
package com.bbx.servlet;
import com.bbx.dao.ArticleDao;
import com.bbx.dao.CritiqueDao;
import com.bbx.entity.Article;
import com.bbx.entity.Critique;
import com.bbx.service.ArticleService;
import com.bbx.service.CritiqueService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet(name = "ArticleFirstServlet")
public class ArticleFirstServlet extends HttpServlet {
private static final long serialVersionUID=1L;
ArticleService service=new ArticleService();
ArticleDao dao=new ArticleDao();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
int currentpage=1;
List<Article> articles=service.finaAll();
request.setAttribute("articles",articles);
request.setAttribute("currentpage",currentpage);
request.getRequestDispatcher("/WEB-INF/page/article.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
ArticleServlet(非首次进入article.jsp,用于实现分页)
package com.bbx.servlet;
import com.bbx.entity.Article;
import com.bbx.entity.Critique;
import com.bbx.service.ArticleService;
import com.bbx.service.CritiqueService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet(name = "ArticleServlet")
public class ArticleServlet extends HttpServlet {
private static final long serialVersionUID=1L;
ArticleService service=new ArticleService();
CritiqueService service2=new CritiqueService();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//当前所在页数
String currentpage = request.getParameter("currentpage");
int currentpage1=Integer.parseInt(currentpage);
List<Article> articles = null;
try {
articles = service.changePage(currentpage);
} catch (SQLException e) {
e.printStackTrace();
}
//request对象在servlet外会失效,保存critiques这个对象,使得页面能获取到该值
request.setAttribute("articles", articles);
request.setAttribute("currentpage",currentpage);
//获取CritiqueService中的方法,调用获取critique数据库表中的数据
List<Critique> critiques2=service2.firstFind();
//request对象在servlet外会失效,保存critiques这个对象,使得页面能获取到该值
request.setAttribute("critiques2",critiques2);
//转发
request.getRequestDispatcher("/WEB-INF/page/article.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
AriticleDetailServlet(用于用户点击小文章时,跳到指定文章)
package com.bbx.servlet;
import com.bbx.entity.Article;
import com.bbx.entity.Critique;
import com.bbx.service.ArticleService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "ArticleDetailServlet")
public class ArticleDetailServlet extends HttpServlet {
private static final long serialVersionUID=1L;
ArticleService service=new ArticleService();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//获取用户点击a标签传输的参数
String article = request.getParameter("id");
//String类型转int类型
int id = Integer.valueOf(article).intValue();
//获取CritiqueService中的方法,调用获取critique数据库表中的数据
List<Article> articles1=service.finaAll1();
List<Article> articles2=service.finaAll2();
List<Article> articles3=service.finaAll3();
List<Article> articles4=service.finaAll4();
List<Article> articles5=service.finaAll5();
List<Article> articles7=service.finaAll7();
//request对象在servlet外会失效,保存critiques这个对象,使得页面能获取到该值
//判断用户点击的是相册1还是相册2
if(id==1){
request.setAttribute("articles",articles1);
}else if(id==2){
request.setAttribute("articles",articles2);
}else if(id==3){
request.setAttribute("articles",articles3);
}else if(id==4){
request.setAttribute("articles",articles4);
}else if(id==5){
request.setAttribute("articles",articles5);
}else if(id==7){
request.setAttribute("articles",articles7);
}
request.getRequestDispatcher("/WEB-INF/page/article_detail.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
AlbumFindServlet(用于查找相册,跳到album.jsp页面,页面有最新评论)
package com.bbx.servlet;
import com.bbx.entity.Album;
import com.bbx.entity.Critique;
import com.bbx.service.AlbumService;
import com.bbx.service.CritiqueService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet(name = "AlbumFindServlet")
public class AlbumFindServlet extends HttpServlet {
private static final long serialVersionUID=1L;
CritiqueService service = new CritiqueService();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取CritiqueService中的方法,调用获取critique数据库表中的数据
List<Critique> critiques= null;
try {
//按时间time倒叙输出5条
critiques = service.descSelectCritique();
} catch (SQLException e) {
e.printStackTrace();
}
//request对象在servlet外会失效,保存critiques这个对象,使得页面能获取到该值
request.setAttribute("critiques",critiques);
//转发
request.getRequestDispatcher("/WEB-INF/page/album.jsp").forward(request,response);
}
}
AlbumDetailServlet(跳转到点击的指定相册)
package com.bbx.servlet;
import com.bbx.entity.Critique;
import com.bbx.entity.Photo;
import com.bbx.service.AlbumService;
import com.bbx.service.CritiqueService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "AlbumDetailServlet")
public class AlbumDetailServlet extends HttpServlet {
private static final long serialVersionUID=1L;
CritiqueService critiqueService = new CritiqueService();
AlbumService albumService=new AlbumService();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//将service.finaAll中的list数据传入photos对象中
List<Photo> photos1 = albumService.finaAll1();
List<Photo> photos2 = albumService.finaAll2();
//获取CritiqueService中的方法,调用获取critique数据库表中的数据
List<Critique> critiques=critiqueService.firstFind();
//request对象在servlet外会失效,保存critiques这个对象,使得页面能获取到该值
request.setAttribute("critiques",critiques);
//获取用户点击a标签传输的参数
String album = request.getParameter("album");
//String类型转int类型
int id = Integer.valueOf(album).intValue();
//判断用户点击的是相册1还是相册2
if(id==1){
request.setAttribute("photos",photos1);
}else if(id==2){
request.setAttribute("photos",photos2);
}
//转发
request.getRequestDispatcher("/WEB-INF/page/album_detail.jsp").forward(request,response);
}
}
CritiqueFirstFindServlet(用于首次访问评论区,定义session对象cend)
package com.bbx.servlet;
import com.bbx.dao.CritiqueDao;
import com.bbx.entity.Critique;
import com.bbx.service.CritiqueService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet(name = "CritiqueFirstFindServlet")
public class CritiqueFirstFindServlet extends HttpServlet {
private static final long serialVersionUID=1L;
CritiqueService service = new CritiqueService();
CritiqueDao dao=new CritiqueDao();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//定义session对象,该对象保存的值生命周期为项目运行开始到项目结束
HttpSession session=request.getSession();
int currentpage=1;
int cend=1;
try {
//获取评论的总页数
cend=dao.getpageNumCritique();
} catch (SQLException e) {
e.printStackTrace();
}
List<Critique> critiques=service.firstFind();
request.setAttribute("critiques",critiques);
request.setAttribute("currentpage",currentpage);
session.setAttribute("cend", cend);
System.out.println(cend);
request.getRequestDispatcher("/WEB-INF/page/critique.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
CritiqueFindServlet(非首次访问,用于用户点击其他页时,实现分页效果)
package com.bbx.servlet;
import com.bbx.DButils.Dbutil;
import com.bbx.dao.CritiqueDao;
import com.bbx.entity.Critique;
import com.bbx.service.CritiqueService;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@WebServlet(name = "CritiqueFindServlet")
public class CritiqueFindServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = 1L;
CritiqueService service = new CritiqueService();
CritiqueDao dao=new CritiqueDao();
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request, response);
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//当前所在页数
String currentpage = request.getParameter("currentpage");
int currentpage1=Integer.parseInt(currentpage);
List<Critique> critiques = null;
try {
critiques = service.changePage(currentpage);
} catch (SQLException e) {
e.printStackTrace();
}
//request对象在servlet外会失效,保存critiques这个对象,使得页面能获取到该值
request.setAttribute("critiques", critiques);
request.setAttribute("currentpage",currentpage);
//转发
request.getRequestDispatcher("/WEB-INF/page/critique.jsp").forward(request, response);
}
}
CritiqueInsertServlet(用于插入评论)
package com.bbx.servlet;
import com.bbx.service.AlbumService;
import com.bbx.service.CritiqueService;
import sun.misc.Request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet(name = "CritiqueInsertServlet")
public class CritiqueInsertServlet extends HttpServlet {
private static final long serialVersionUID=1L;
CritiqueService service = new CritiqueService();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置HttpServletResponse使用的utf-8编码
request.setCharacterEncoding("UTF-8");
//通知浏览器解码方式使用UTF-8
response.setContentType("text/html;chatset=UTF-8");
//获取页面输入的name和content
String name=new String(request.getParameter("name"));
String content=request.getParameter("content");
try {
//i为成功插入数据库中的条数
int i = service.addCritique(name, content);
System.out.println("success insert"+i);
} catch (SQLException e) {
e.printStackTrace();
}
//重定向
response.sendRedirect("CritiqueFindServlet");
}
}
Test层
导入这个包,才能测试,用于写代码过程中不断测试数据有无报错
package com.bbx.test;
import com.bbx.DButils.Dbutil;
import com.bbx.dao.AlbumDao;
import com.bbx.dao.ArticleDao;
import com.bbx.dao.CritiqueDao;
import com.bbx.dao.MeDao;
import com.bbx.entity.Critique;
import com.bbx.service.AlbumService;
import com.bbx.service.ArticleService;
import com.bbx.service.CritiqueService;
import com.bbx.service.MeService;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
public class Test1 {
// @Test
// public void serviceTest(){
// CritiqueService c=new CritiqueService();
// System.out.println(c.finaAll());
//
// }
// public void AlbumDaoTest() throws SQLException {
// AlbumDao a=new AlbumDao();
// System.out.println(a.SelectAlbum());
// }
// public void AlbumServiceTest(){
// AlbumService c=new AlbumService();
// System.out.println(c.finaAll2());
//
// }
// public void MeServiceTest(){
// MeService m=new MeService();
// System.out.println(m.finaAll());
// }
// public void MeDaoTest(){
// MeDao m=new MeDao();
// try {
// System.out.println(m.SelectMe());
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
@Test
public void ArticleTest() {
ArticleService a = new ArticleService();
System.out.println(a.finaAll());
}
@Test
public void ArticleDaoTest() throws SQLException {
ArticleDao dao=new ArticleDao();
System.out.println("总条数:"+dao.getallNumArticle());
System.out.println("总页数:"+dao.getpageNumArticle());
}
@Test
public void DbutilTest() {
String sql0 = "select * from critique";
Dbutil d = new Dbutil();
try {
System.out.println(d.critiqueFind(sql0));
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void CritiqueDao() throws SQLException {
CritiqueDao dao = new CritiqueDao();
System.out.println(dao.descSlectCritique());
}
@Test
public void CritiqueService() {
CritiqueService c = new CritiqueService();
System.out.println(c.firstFind());
}
}
WEB-INF
lib目录
很多包可以去该网站下载:https://mvnrepository.com/artifact/taglibs/standard/1.0.6
使用EL表达式得导入第1,2个包
junit包用于测试类
mysql包用于连接数据库
page目录
用于存放jsp页面,jsp页面放入WEB-INF下可以得到保护,只有通过servlet才能进入到jsp页面中
jsp层
该项目很多css,js都是封装好了的,要找的话,在网站上检查元素寻找
EL表达式使用
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
遍历list
<c:forEach items="${articles}" var="article">
<h3><a href="ArticleDetailServlet?id=${article.id}">
${article.title}
</a>
</h3>
<figure><img src="${article.image}"></figure>
<ul>
<div class="content" style="height:12em;clear:both;">
${article.content}
</div>
<ul>
</ul>
<a href="ArticleDetailServlet?id=2" target="_blank" class="readmore" style="color:white;">阅读全文>></a>
</ul>
<p class="autor"><span>作者:${article.editer}</span><span>分类:【<a href="IndexServlet">${article.type}</a>】</span><span>浏览(<a href="IndexServlet">${article.count}</a>)</span><span>评论(<a href="IndexServlet">${article.count1}</a>)</span></p>
<div class="dateview">${article.time}</div>
</c:forEach>
做判断
<c:if test="${currentpage==1}" var="result">
<a href="#"><</a>
</c:if>
<c:if test="${!result}">
<a href="IndexServlet?currentpage=${currentpage-1}"><</a>
</c:if>
<b>${currentpage}</b>
<c:if test="${currentpage == aend}" var="result2">
<a href="#">></a>
</c:if>
<c:if test="${!result2}">
<a href="IndexServlet?currentpage=${currentpage+1}">></a>
</c:if>
index.jsp(首页)
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%--
Created by IntelliJ IDEA.
User: �Ե�
Date: 2019/9/7
Time: 20:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0056)http://localhost:8080/BlogJSPServlet2/index/index?page=1 -->
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>个人博客——主页</title>
<meta name="keywords" content="个人博客模板,博客模板,响应式">
<meta name="description" content="如影随形主题的个人博客模板,神秘、俏皮。">
<link href="../../index_files/base.css" rel="stylesheet">
<link href="../../index_files/index.css" rel="stylesheet">
<link href="../../index_files/style.css" rel="stylesheet">
<link href="../../index_files/media.css" rel="stylesheet">
<style type="text/css">
/*为段落定义样式*/
</style>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<!--[if lt IE 9]>
<script src="../include/js/modernizr.js"></script>
<![endif]-->
<script src="../../index_files/share.js.下载"></script><link rel="stylesheet" href="../../index_files/share_style1_32.css"></head>
<body>
<div class="ibody">
<header>
<h1>A blog for astronomy enthusiasts</h1>
<h2>It has been said that astronomy is a humbling and character-building experience</h2>
<div class="logo"><a href="IndexFirstServlet"></a></div>
<nav id="topnav">
<a href="IndexFirstServlet" id="topnav_current">首页</a>
<a href="MeServlet">关于我</a>
<a href="ArticleFirstServlet">慢生活</a>
<a href="AlbumFindServlet">我的相册</a>
<a href="CritiqueFirstFindServlet">留言板</a>
</nav>
</header>
<article>
<div class="banner">
<ul class="texts">
<p>2015年7月14日19时49分</p>
<p> 新视野号探测器飞掠冥王星</p>
</ul>
</div>
<div class="bloglist">
<h2>
<p><span>推荐</span>文章</p>
</h2>
<div class="blogs">
<c:forEach items="${articles}" var="article">
<h3><a href="ArticleDetailServlet?id=${article.id}">
${article.title}
</a>
</h3>
<figure><img src="${article.image}"></figure>
<ul>
<div class="content" style="height:12em;clear:both;">
${article.content}
</div>
<ul>
</ul>
<a href="ArticleDetailServlet?id=2" target="_blank" class="readmore" style="color:white;">阅读全文>></a>
</ul>
<p class="autor"><span>作者:${article.editer}</span><span>分类:【<a href="IndexServlet">${article.type}</a>】</span><span>浏览(<a href="IndexServlet">${article.count}</a>)</span><span>评论(<a href="IndexServlet">${article.count1}</a>)</span></p>
<div class="dateview">${article.time}</div>
</c:forEach>
</div>
</div>
<div class="page">
<c:if test="${currentpage==1}" var="result">
<a href="#"><</a>
</c:if>
<c:if test="${!result}">
<a href="IndexServlet?currentpage=${currentpage-1}"><</a>
</c:if>
<b>${currentpage}</b>
<c:if test="${currentpage == aend}" var="result2">
<a href="#">></a>
</c:if>
<c:if test="${!result2}">
<a href="IndexServlet?currentpage=${currentpage+1}">></a>
</c:if>
</div>
</article>
<aside>
<div class="avatar"><a href="IndexFirstServlet"><span>明辉</span></a></div>
<div class="topspaceinfo">
<h1>给岁月以文明</h1>
<p>宇宙就是一座黑暗森林,每个文明都是带枪的猎人...</p>
</div>
<div class="about_c">
<p>网名:pluto</p>
<p>职业:Java工程师</p>
<p>籍贯:中国-韶关</p>
<p>QQ:1481184032</p>
<p>邮箱:13112033929@163.com</p>
</div>
<div class="bdsharebuttonbox bdshare-button-style1-32" data-bd-bind="1527750390322"><a href="http://localhost:8080/BlogJSPServlet2/index/index?page=1#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a><a href="http://localhost:8080/BlogJSPServlet2/index/index?page=1#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a><a href="http://localhost:8080/BlogJSPServlet2/index/index?page=1#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博"></a><a href="http://localhost:8080/BlogJSPServlet2/index/index?page=1#" class="bds_renren" data-cmd="renren" title="分享到人人网"></a><a href="http://localhost:8080/BlogJSPServlet2/index/index?page=1#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a><a href="http://localhost:8080/BlogJSPServlet2/index/index?page=1#" class="bds_more" data-cmd="more"></a></div>
<div class="tj_news">
<h2>
<p class="tj_t1">最新文章</p>
</h2>
<ul>
<li><a href="ArticleDetailServlet?id=1">鼠标悬停图片、文字css3效果</a></li>
<li><a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></li>
<li><a href="ArticleDetailServlet?id=4">HTML5技术将推动移动浏览器变革</a></li>
<li><a href="ArticleDetailServlet?id=5">css3制作3D图书翻页效果</a></li>
<li><a href="ArticleDetailServlet?id=7">使用css3伪元素制作时间轴并且实现鼠标选中高亮效果</a></li>
</ul>
<h2>
<p class="tj_t2">推荐文章</p>
</h2>
<ul>
<li><a href="ArticleDetailServlet?id=2">鼠标悬停图片、文字css3效果</a></li>
<li><a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></li>
<li><a href="ArticleDetailServlet?id=7">CSS3动画_liffect effect</a></li>
</ul>
</div>
<div class="links">
<h2>
<p>友情链接</p>
</h2>
<ul>
<li><a href="MeServlet">个人博客</a></li>
<li><a href="http://user.qzone.qq.com/1481184032">QQ空间</a></li>
</ul>
</div>
<div class="copyright">
<ul>
<p> Design by <a href="IndexFirstServlet">pluto</a></p>
<p></p>
<p></p>
</ul>
</div>
</aside>
<script src="../../index_files/silder.js.下载"></script>
<div class="clear"></div>
<!-- 清除浮动 -->
</div>
</body></html>
about.jsp
<%--
Created by IntelliJ IDEA.
User: 辉弟
Date: 2019/9/8
Time: 8:34
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0049)http://localhost:8080/BlogJSPServlet2/about/about -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>个人博客——关于我</title>
<meta name="keywords" content="个人博客模板,博客模板,响应式">
<meta name="description" content="如影随形主题的个人博客模板,神秘、俏皮。">
<link href="../../about_files/base.css" rel="stylesheet">
<link href="../../about_files/about.css" rel="stylesheet">
<link href="../../about_files/media.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<!--[if lt IE 9]>
<script src="../include/js/modernizr.js"></script>
<![endif]-->
<script src="../../about_files/share.js.下载"></script><link rel="stylesheet" href="../../about_files/share_style1_32.css">
</head>
<body>
<div class="ibody">
<header>
<h1>提拉米苏.甜腻的苦涩</h1>
<h2>做好的提拉米苏被遗忘在角落 我的手再也挽留不住你离去的脚步 爱情是甜蜜的苦涩,无奈的别离 苦涩的怕不是味道,而是心绪</h2>
<div class="logo"><a href="IndexFirstServlet"></a></div>
<nav id="topnav">
<a href="IndexFirstServlet">首页</a>
<a href="MeServlet" id="topnav_current">关于我</a>
<a href="ArticleFirstServlet">慢生活</a>
<a href="AlbumFindServlet">我的相册</a>
<a href="CritiqueFirstFindServlet">留言板</a>
</nav>
</header>
<article>
<h3 class="about_h">您现在的位置是:<a href="IndexServlet">首页</a><a href="MeServlet">关于我</a></h3>
<div class="about">
<h2>Just about me</h2>
<ul>
<c:forEach items="${mes}" var="me">
${me.content}
</c:forEach>
</ul>
<h2>About my blog</h2>
<ul class="blog_a">
<p>域 名:www.pluto.tk
</p><p>服务器:京东云
</p><p>程 序:原创程序</p>
<p>微信公众号:pluto</p>
</ul>
</div>
</article>
<aside>
<div class="avatar"><a href="MeServlet"><span>pluto</span></a></div>
<div class="topspaceinfo">
<h1>执子之手,与子偕老</h1>
<p>于千万人之中,我遇见了我所遇见的人....</p>
</div>
<div class="about_c">
<p>网名:pluto</p>
<p>职业:Java程序员</p>
<p>籍贯:广东-韶关</p>
<p>QQ:1481184032</p>
<p>邮箱:1481184032@qq.com</p>
</div>
<div class="bdsharebuttonbox bdshare-button-style1-32" data-bd-bind="1527750586617"><a href="http://localhost:8080/BlogJSPServlet2/about/about#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a><a href="http://localhost:8080/BlogJSPServlet2/about/about#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a><a href="http://localhost:8080/BlogJSPServlet2/about/about#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博"></a><a href="http://localhost:8080/BlogJSPServlet2/about/about#" class="bds_renren" data-cmd="renren" title="分享到人人网"></a><a href="http://localhost:8080/BlogJSPServlet2/about/about#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a><a href="http://localhost:8080/BlogJSPServlet2/about/about#" class="bds_more" data-cmd="more"></a></div>
</aside>
<script src="../../about_files/silder.js.下载"></script>
<div class="clear"></div>
<!-- 清除浮动 -->
</div>
</body></html>
article.jsp(文章区)
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%--
Created by IntelliJ IDEA.
User: 辉弟
Date: 2019/9/8
Time: 8:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0053)http://localhost:8080/BlogJSPServlet2/article/article -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>个人博客——jim</title>
<meta name="keywords" content="个人博客,博客,响应式">
<meta name="description" content="如影随形主题的个人博客,神秘、俏皮。">
<link href="../../article_files/base.css" rel="stylesheet">
<link href="../../article_files/style.css" rel="stylesheet">
<link href="../../article_files/media.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<!--[if lt IE 9]>
<script src="include/js/modernizr.js"></script>
<![endif]-->
<script src="./article_files/share.js.下载"></script><link rel="stylesheet" href="./article_files/share_style1_32.css"></head>
<body>
<div class="ibody">
<header>
<h1>提拉米苏.甜腻的苦涩</h1>
<h2>做好的提拉米苏被遗忘在角落 我的手再也挽留不住你离去的脚步 爱情是甜蜜的苦涩,无奈的别离 苦涩的怕不是味道,而是心绪</h2>
<div class="logo"><a href="IndexFirstServlet"></a></div>
<nav id="topnav">
<a href="IndexFirstServlet" >首页</a>
<a href="MeServlet">关于我</a>
<a href="ArticleFirstServlet" id="topnav_current">慢生活</a>
<a href="AlbumFindServlet">我的相册</a>
<a href="CritiqueFirstFindServlet">留言板</a>
</nav>
</header>
<article>
<h2 class="about_h">您现在的位置是:<a href="IndexFirstServlet">首页</a><a href="ArticleFirstServlet">慢生活</a></h2>
<div class="bloglist">
<c:forEach items="${articles}" var="article">
<div class="newblog">
<ul>
<h3><a href="ArticleDetailServlet?id=${article.id}">${article.title}</a></h3>
<div class="autor"><span>作者:<a>${article.editer}</a></span><span>分类:[<a href="ArticleFirstServlet">${article.type}</a>]</span><span>浏览(<a href="ArticleFirstServlet">${article.count}</a>)</span><span>评论(<a href="ArticleFirstServlet">${article.count1}</a>)</span>
<span>
</span></div>
<div class="content" style="width:100%">
${article.content}
<ul>
</ul>
</div>
<a href="ArticleDetailServlet?id=3" class="readmore" style="display:inline-block;">全文</a>
</ul>
<figure><img src="${article.image}" width="200" height="100"></figure>
<div class="dateview">${article.time}</div>
</div>
</c:forEach>
</div>
<div class="page">
<c:if test="${currentpage==1}" var="result">
<a href="#"><</a>
</c:if>
<c:if test="${!result}">
<a href="ArticleServlet?currentpage=${currentpage-1}"><</a>
</c:if>
<b>${currentpage}</b>
<c:if test="${currentpage == aend}" var="result2">
<a href="#">></a>
</c:if>
<c:if test="${!result2}">
<a href="ArticleServlet?currentpage=${currentpage+1}">></a>
</c:if>
</div>
</article>
<aside>
<div class="rnav">
<li class="rnav1 "><a href="ArticleFirstServlet">日记</a></li>
<li class="rnav2 "><a href="ArticleFirstServlet">欣赏</a></li>
<li class="rnav3 "><a href="ArticleFirstServlet">程序人生</a></li>
<li class="rnav4 "><a href="ArticleFirstServlet">经典语录</a></li>
</div>
<div class="ph_news">
<h2>
<p>点击排行</p>
</h2>
<ul class="ph_n">
1
<li><span class="num1">
1
</span>
<a href="ArticleDetailServlet?id=2">
鼠标悬停图片、文字css3效果
</a>
</li>
2
<li><span class="num1">
2
</span>
<a href="ArticleDetailServlet?id=3">
从摄影作品中获取网页颜色搭配技巧
</a>
</li>
3
<li><span class="num1">
3
</span>
<a href="ArticleDetailServlet?id=7">
CSS3动画_liffect effect
</a>
</li>
4
<li>
<span>
4
</span>
<a href="ArticleDetailServlet?id=4">
HTML5技术将推动移动浏览器变革
</a>
</li>
5
<li>
<span>
5
</span>
<a href="ArticleDetailServlet?id=5">
css3制作3D图书翻页效果
</a>
</li>
6
<li>
<span>
6
</span>
<a href="ArticleDetailServlet?id=7">
使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
</a>
</li>
</ul>
<h2>
<p>栏目推荐</p>
</h2>
<ul>
<li><a href="ArticleDetailServlet?id=2">鼠标悬停图片、文字css3效果</a></li>
<li><a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></li>
<li><a href="ArticleDetailServlet?id=7">CSS3动画_liffect effect</a></li>
</ul>
<h2>
<p>最新评论</p>
</h2>
<ul class="pl_n">
<c:forEach items="${critiques2}" var="critique">
<dl>
<dt><img src="${critique.photo}"> </dt>
<dt> </dt>
<dd>周三
<time>${critique.time}</time>
</dd>
<dd>
<a href="ArticleFirstServlet">
${critique.content}
<!-- <s:property value="content" escape="false"/> -->
</a>
</dd>
</dl>
</c:forEach>
</ul>
</div>
<div class="copyright">
<ul>
<p> Design by <a href="ArticleFirstServlet">pluto</a></p>
<p></p>
<p></p>
</ul>
</div>
</aside>
<script src="./article_files/silder.js.下载"></script>
<div class="clear"></div>
<!-- 清除浮动 -->
</div>
</body></html>
article_detail.jsp(小文章)
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%--
Created by IntelliJ IDEA.
User: 辉弟
Date: 2019/9/8
Time: 8:44
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0065)http://localhost:8080/BlogJSPServlet2/article/article_detail?id=2 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>个人博客——博客</title>
<meta name="keywords" content="个人博客模板,博客模板,响应式">
<meta name="description" content="如影随形主题的个人博客模板,神秘、俏皮。">
<link href="../../article_detail_files/base.css" rel="stylesheet">
<link href="../../article_detail_files/style.css" rel="stylesheet">
<link href="../../article_detail_files/media.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<!--[if lt IE 9]>
<script src="../include/js/modernizr.js"></script>
<![endif]-->
<script src="../../article_detail_files/share.js.下载"></script><link rel="stylesheet" href="../../article_detail_files/share_style1_32.css">
</head>
<body>
<div class="ibody">
<header>
<h1>提拉米苏.甜腻的苦涩</h1>
<h2>做好的提拉米苏被遗忘在角落 我的手再也挽留不住你离去的脚步 爱情是甜蜜的苦涩,无奈的别离 苦涩的怕不是味道,而是心绪</h2>
<div class="logo"><a href="IndexFirstServlet"></a></div>
<nav id="topnav">
<a href="IndexFirstServlet">首页</a>
<a href="MeServlet">关于我</a>
<a href="ArticleFirstServlet" id="topnav_current">慢生活</a>
<a href="AlbumFindServlet">我的相册</a>
<a href="CritiqueFirstFindServlet">留言板</a></nav>
</header>
<article>
<h2 class="about_h">您现在的位置是:<a href="IndexFirstServlet">首页</a>><a href="ArticleFirstServlet">慢生活</a>><a href="ArticleDetailServlet?id=2">详细内容</a></h2>
<c:forEach items="${articles}" var="article">
<div class="index_about">
<h2 class="c_titile">${article.title}</h2>
<p class="box_c"><span class="d_time">发布时间:${article.time}</span><span>编辑:${article.editer}</span><span>浏览(${article.count})</span><span>评论(${article.count1})</span></p>
<ul class="infos">
<p><span style="color:rgb(102, 102, 102); font-family:宋体,arial,helvetica,sans-serif; font-size:14px"> 其实这样的效果也很常见,但是我平时用到很少,在其他网站看到这样的效果,第一反应就是查看源代码,看他怎么运用的,结果用了很多的div,最主要的是用js来实现。目前很多浏览器也都兼容css3新属性,这个例子就可以使用rgba(0,0,0,0.5)、opacity、当然关键也要看怎么定位,还是会用到position属性。</span></p>
<p><span style="color:rgb(102, 102, 102); font-family:宋体,arial,helvetica,sans-serif; font-size:14px"> </span></p>
<p>Html:</p>
<div class="shili" style="margin: 0px; padding: 10px; background-color: rgb(245, 245, 245); border: 1px dotted rgb(119, 136, 85); word-wrap: break-word;">
${article.content}
</div>
<p>CSS代码片段:</p>
<div class="shili" style="margin: 0px; padding: 10px; background-color: rgb(245, 245, 245); border: 1px dotted rgb(119, 136, 85); word-wrap: break-word;">
<p>/* ex01 */</p>
<p>.ex01 li{ width:170px; float:left; margin:5px}</p>
<p>.ex01 li a { position:relative; display:block }</p>
<p>.ex01 li span{ position: absolute; left: 0px; bottom: 0px;color:#FFF; line-height:24px; display:block; width:170px; -webkit-transition: all 0.5s; -moz-transition: all 0.5s; -o-transition: all 0.5s; -ms-transition: all 0.5s; background:rgba(0,0,0,0.5); text-align:center}</p>
<p>.ex01 img { width: 170px; height: 120px; -webkit-transition: all 0.5s; -moz-transition: all 0.5s; -o-transition: all 0.5s; display:block}</p>
<p>.ex01 img:hover { -webkit-transform: scale(1.1); -moz-transform: scale(1.1); -o-transform: scale(1.1); -ms-transform: scale(1.1); }</p>
<p>.ex01 li:hover span{ opacity:0}</p>
<p>/* ex02 */</p>
<p>.ex02 li{width:170px;margin:5px;float:left;}</p>
<p>.ex02 li img{width: 170px; height: 120px;display:block;}</p>
<p>.ex02 li span{ opacity:0}</p>
<p>.ex02 li:hover span{ opacity:1}</p>
<p>.ex02 li a { position:relative; display:block }</p>
<p>.ex02 li span{ position: absolute; left: 0px; top: 0px; background:rgba(0,0,0,0.5); color:#FFF; line-height:24px; display:block; width:170px;text-align:center;-webkit-transition: all 0.5s; -moz-transition: all 0.5s; -o-transition: all 0.5s; -ms-transition: all 0.5s; }</p>
</div>
<ul>
</ul>
</ul>
<div class="keybq">
<p><span>关键字词</span>:${article.keywords}</p>
</c:forEach>
</div>
<div class="nextinfo">
<p>下一篇:<a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></p>
</div>
</div>
</article>
<aside>
<div class="rnav">
<li class="rnav1 "><a href="ArticleFirstServlet">日记</a></li>
<li class="rnav2 "><a href="ArticleFirstServlet">欣赏</a></li>
<li class="rnav3 "><a href="ArticleFirstServlet">程序人生</a></li>
<li class="rnav4 "><a href="ArticleFirstServlet">经典语录</a></li>
</div>
<div class="ph_news">
<h2>
<p>点击排行</p>
</h2>
<ul class="ph_n">
1
<li><span class="num1">
1
</span>
<a href="ArticleDetailServlet?id=2">
鼠标悬停图片、文字css3效果
</a>
</li>
2
<li><span class="num1">
2
</span>
<a href="ArticleDetailServlet?id=3">
从摄影作品中获取网页颜色搭配技巧
</a>
</li>
3
<li><span class="num1">
3
</span>
<a href="ArticleDetailServlet?id=7">
CSS3动画_liffect effect
</a>
</li>
4
<li>
<span>
4
</span>
<a href="ArticleDetailServlet?id=4">
HTML5技术将推动移动浏览器变革
</a>
</li>
5
<li>
<span>
5
</span>
<a href="ArticleDetailServlet?id=5">
css3制作3D图书翻页效果
</a>
</li>
6
<li>
<span>
6
</span>
<a href="ArticleDetailServlet?id=7">
使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
</a>
</li>
</ul>
<h2>
<p>栏目推荐</p>
</h2>
<ul>
<li><a href="ArticleDetailServlet?id=2">鼠标悬停图片、文字css3效果</a></li>
<li><a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></li>
<li><a href="ArticleDetailServlet?id=7">CSS3动画_liffect effect</a></li>
</ul>
<h2>
<p>最新评论</p>
</h2>
<ul class="pl_n">
<dl>
<dt><img src="../../article_detail_files/s8.jpg"> </dt>
<dt> </dt>
<dd>周三
<time>2018-05-30</time>
</dd>
<dd>
<a href="ArticleDetailServlet?id=2#">
今天真热!
<!-- <s:property value="content" escape="false"/> -->
</a>
</dd>
</dl>
</ul>
</div>
<div class="copyright">
<ul>
<p> Design by <a href="ArticleServlet">jim</a></p>
<p></p>
<p></p>
</ul>
</div>
</aside>
<script src="../../article_detail_files/silder.js.下载"></script>
<div class="clear"></div>
<!-- 清除浮动 -->
</div>
</body></html>
album.jsp(相册)
<%--
Created by IntelliJ IDEA.
User: 辉弟
Date: 2019/9/8
Time: 8:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0049)http://localhost:8080/BlogJSPServlet2/album/album -->
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>个人博客——相册</title>
<meta name="keywords" content="个人博客模板,博客模板,响应式">
<meta name="description" content="如影随形主题的个人博客模板,神秘、俏皮。">
<link href="../../album_files/base.css" rel="stylesheet">
<link href="../../album_files/style.css" rel="stylesheet">
<link href="../../album_files/media.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<!--[if lt IE 9]>
<script src="js/modernizr.js"></script>
<![endif]-->
<script src="../../album_files/share.js.下载"></script><link rel="stylesheet" href="../../album_files/share_style1_32.css"></head>
<body>
<div class="ibody">
<header>
<h1>提拉米苏.甜腻的苦涩</h1>
<h2>做好的提拉米苏被遗忘在角落 我的手再也挽留不住你离去的脚步 爱情是甜蜜的苦涩,无奈的别离 苦涩的怕不是味道,而是心绪</h2>
<div class="logo"><a href="IndexFirstServlet"></a></div>
<nav id="topnav">
<a href="IndexFirstServlet" >首页</a>
<a href="MeServlet">关于我</a>
<a href="ArticleFirstServlet">慢生活</a>
<a href="AlbumFindServlet" id="topnav_current">我的相册</a>
<a href="CritiqueFirstFindServlet">留言板</a>
</nav>
</header>
<article>
<h2 class="about_h">您现在的位置是:<a href="IndexFirstServlet">首页</a><a href="AlbumFindServlet">相册</a></h2>
<div class="template">
<h3>
<p><span>个人相册</span></p>
<a href="AlbumFindServlet" class="more"></a> </h3>
<ul>
<!-- ../article/article_detail -->
<li><a href="AlbumDetailServlet?album=1"><img src="../../album_files/1.jpg" "=""></a><span>第一个相册</span></li>
<!-- ../article/article_detail -->
<li><a href="AlbumDetailServlet?album=2"><img src="../../album_files/002.jpg" "=""></a><span>第二个相册</span></li>
</ul>
<h3>
<p><span>最新评论</span></p>
</h3>
<ul class="pl_n">
<c:forEach items="${critiques}" var="critique">
<dl>
<dt><img src="${critique.photo}"> </dt>
<dt> </dt>
<dd>周三
<time>${critique.time}</time>
</dd>
<dd>
<a href="AlbumFindServlet">
${critique.content}
<!-- <s:property value="content" escape="false"/> -->
</a>
</dd>
</dl>
</c:forEach>
</ul>
</div></article>
<aside>
<div class="rnav">
<li class="rnav1 "><a href="IndexFirstServlet">个人博客</a></li>
<li class="rnav2 "><a href="http://user.qzone.qq.com/657682618">QQ空间</a></li>
<li class="rnav3 "><a href="AlbumFindServlet">个人作品</a></li>
<li class="rnav4 "><a href="AlbumFindServlet">原创程序</a></li>
</div>
<div class="ph_news">
<h2>
<p>点击排行</p>
</h2>
<ul class="ph_n">
1
<li><span class="num1">
1
</span>
<a href="ArticleDetailServlet?id=2">
鼠标悬停图片、文字css3效果
</a>
</li>
2
<li><span class="num1">
2
</span>
<a href="ArticleDetailServlet?id=3">
从摄影作品中获取网页颜色搭配技巧
</a>
</li>
3
<li><span class="num1">
3
</span>
<a href="ArticleDetailServlet?id=7">
CSS3动画_liffect effect
</a>
</li>
4
<li>
<span>
4
</span>
<a href="ArticleDetailServlet?id=4">
HTML5技术将推动移动浏览器变革
</a>
</li>
5
<li>
<span>
5
</span>
<a href="ArticleDetailServlet?id=5">
css3制作3D图书翻页效果
</a>
</li>
6
<li>
<span>
6
</span>
<a href="ArticleDetailServlet?id=6">
使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
</a>
</li>
</ul>
<h2>
<p>栏目推荐</p>
</h2>
<ul>
<li><a href="ArticleDetailServlet?id=2">鼠标悬停图片、文字css3效果</a></li>
<li><a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></li>
<li><a href="ArticleDetailServlet?id=7">CSS3动画_liffect effect</a></li>
</ul>
</div>
<div class="copyright">
<ul>
<p> Design by <a href="AlbumFindServlet">jim</a></p>
<p></p>
<p></p>
</ul>
</div>
</aside>
<script src="../../album_files/silder.js.下载"></script>
<div class="clear"></div>
<!-- 清除浮动 -->
</div>
</body></html>
album_detail.jsp(小相册)
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%--
Created by IntelliJ IDEA.
User: 辉弟
Date: 2019/9/8
Time: 8:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0061)http://localhost:8080/BlogJSPServlet2/album/album_detail?id=1 -->
<html xmlns="http://www.w3.org/1999/xhtml" class=" js csstransforms csstransforms3d csstransitions">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1,text/html; charset=utf-8">
<link rel="shortcut icon" href="http://localhost:8080/BlogJSPServlet2/favicon.ico">
<title>个人博客——照片</title>
<meta name="keywords" content="个人博客模板,博客模板,响应式">
<meta name="description" content="如影随形主题的个人博客模板,神秘、俏皮。">
<link href="../../album_detail_files/base.css" rel="stylesheet">
<link href="../../album_detail_files/style.css" rel="stylesheet">
<link href="../../album_detail_files/media.css" rel="stylesheet">
<script type="text/javascript" src="../../album_detail_files/jquery.min.js.下载"></script>
<script type="text/javascript" src="../../album_detail_files/jquery.gallery.js.下载"></script>
<script type="text/javascript" src="../../album_detail_files/modernizr.custom.53451.js.下载"></script>
<meta name="viewport" content="width=device-width, minimum-scale=1.0,initial-scale=1.0,maximum-scale=1.0">
<!--[if lt IE 9]>
<script src="../include/js/modernizr.js"></script>
<![endif]-->
<script src="../../album_detail_files/share.js.下载"></script><link rel="stylesheet" href="../../album_detail_files/share_style1_32.css"></head>
<body>
<div class="ibody">
<header>
<h1>提拉米苏.甜腻的苦涩</h1>
<h2>做好的提拉米苏被遗忘在角落 我的手再也挽留不住你离去的脚步 爱情是甜蜜的苦涩,无奈的别离 苦涩的怕不是味道,而是心绪</h2>
<div class="logo"><a href="http://localhost:8080/BlogJSPServlet2/index/index"></a></div>
<nav id="topnav">
<a href="IndexFirstServlet" >首页</a>
<a href="MeServlet">关于我</a>
<a href="ArticleFirstServlet">慢生活</a>
<a href="AlbumFindServlet" id="topnav_current">我的相册</a>
<a href="CritiqueFirstFindServlet">留言板</a>
</nav>
</header>
<article>
<h2 class="about_h">您现在的位置是:<a href="IndexFirstServlet">首页</a>><a href="AlbumFindServlet">个人相册</a>><a href="AlbumDetailServlet?album=1">照片</a></h2>
<div class="template">
<h3>
<p><span>个人相册</span></p>
</h3>
<ul>
<div class="container">
<section id="dg-container" class="dg-container">
<div class="dg-wrapper">
<c:forEach items="${photos}" var="photo">
<a href="AlbumDetailServlet?album=1" class="dg-center" style="opacity: 1; visibility: visible;"><img src="${photo.image}" width="480px" height="260px">
<div>${photo.note}</div>
</a>
</c:forEach>
</div>
<nav>
<span class="dg-prev">
<
</span>
<span class="dg-next">
>
</span>
</nav>
</section>
</div>
<script type="text/javascript">
$(function() {
$('#dg-container').gallery();
});
</script>
</ul>
<h3>
<p><span>最新评论</span></p>
</h3>
<ul class="pl_n">
<c:forEach items="${critiques}" var="critique">
<dl>
<dt><img src="../../album_detail_files/s8.jpg"> </dt>
<dt> </dt>
<dd>周三
<time>${critique.time}</time>
</dd>
<dd>
<a href="AlbumDetailServlet?album=1">
${critique.content}
</a>
</dd>
</dl>
</c:forEach>
</ul>
</div></article>
<aside>
<div class="rnav">
<li class="rnav1 "><a href="IndexFirstServlet">个人博客</a></li>
<li class="rnav2 "><a href="http://user.qzone.qq.com/1481184032">QQ空间</a></li>
<li class="rnav3 "><a href="AlbumFindServlet">个人作品</a></li>
<li class="rnav4 "><a href="AlbumFindServlet">原创程序</a></li>
</div>
<div class="ph_news">
<h2>
<p>点击排行</p>
</h2>
<ul class="ph_n">
<li><span class="num1">
1
</span>
<a href="ArticleDetailServlet?id=2">
鼠标悬停图片、文字css3效果
</a>
</li>
<li><span class="num1">
2
</span>
<a href="ArticleDetailServlet?id=3">
从摄影作品中获取网页颜色搭配技巧
</a>
</li>
<li><span class="num1">
3
</span>
<a href="ArticleDetailServlet?id=7">
CSS3动画_liffect effect
</a>
</li>
<li>
<span>
4
</span>
<a href="ArticleDetailServlet?id=4">
HTML5技术将推动移动浏览器变革
</a>
</li>
<li>
<span>
5
</span>
<a href="ArticleDetailServlet?id=5">
css3制作3D图书翻页效果
</a>
</li>
<li>
<span>
6
</span>
<a href="ArticleDetailServlet?id=6">
使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
</a>
</li>
</ul>
<h2>
<p>栏目推荐</p>
</h2>
<ul>
<li><a href="ArticleDetailServlet?id=2">鼠标悬停图片、文字css3效果</a></li>
<li><a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></li>
<li><a href="ArticleDetailServlet?id=7">CSS3动画_liffect effect</a></li>
</ul>
<div class="copyright">
<ul>
<p> Design by <a href="ArticleDetailServlet?id=1#">jim</a></p>
<p></p>
<p></p>
</ul>
</div>
</div></aside>
<script src="../../album_detail_files/silder.js.下载"></script>
<div class="clear"></div>
<!-- 清除浮动 -->
</div>
</body></html>
critique.jsp(评论)
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@page import="com.bbx.entity.Critique" %>
<%@page import="java.util.List" %>
<%@page import="com.bbx.servlet.CritiqueFirstFindServlet" %>
<%@page import="com.bbx.servlet.CritiqueFindServlet"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0055)http://localhost:8080/BlogJSPServlet2/critique/critique -->
<html xmlns="http://www.w3.org/1999/xhtml" class=" js csstransforms csstransforms3d csstransitions">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1,text/html; charset=utf-8">
<link rel="shortcut icon" href="http://localhost:8080/BlogJSPServlet2/favicon.ico">
<title>个人博客——留言板</title>
<meta name="keywords" content="个人博客模板,博客模板,响应式">
<meta name="description" content="如影随形主题的个人博客模板,神秘、俏皮。">
<link href="../../critique_files/base.css" rel="stylesheet">
<link href="../../critique_files/style.css" rel="stylesheet">
<link href="../../critique_files/media.css" rel="stylesheet">
<script type="text/javascript" src="../../critique_files/jquery.min.js.下载"></script>
<script type="text/javascript" src="../../critique_files/jquery.gallery.js.下载"></script>
<script type="text/javascript" src="../../critique_files/modernizr.custom.53451.js.下载"></script>
<script type="text/javascript" src="../../critique_files/ckeditor.js.下载"></script>
<style>.cke {
visibility: hidden;
}</style>
<meta name="viewport" content="width=device-width, minimum-scale=1.0,initial-scale=1.0,maximum-scale=1.0">
<!--[if lt IE 9]>
<script src="../include/js/modernizr.js"></script>
<![endif]-->
<script src="../critique_files/share.js.下载"></script>
<link rel="stylesheet" href="../critique_files/share_style1_32.css">
</head>
<body>
<div class="ibody">
<header>
<h1>提拉米苏.甜腻的苦涩</h1>
<h2>做好的提拉米苏被遗忘在角落 我的手再也挽留不住你离去的脚步 爱情是甜蜜的苦涩,无奈的别离 苦涩的怕不是味道,而是心绪</h2>
<div class="logo"><a href="IndexFirstServlet"></a></div>
<nav id="topnav">
<a href="IndexFirstServlet">首页</a>
<a href="MeServlet">关于我</a>
<a href="ArticleFirstServlet">慢生活</a>
<a href="AlbumFindServlet">我的相册</a>
<a href="CritiqueFirstFindServlet" id="topnav_current">留言板</a>
</nav>
</header>
<article>
<h2 class="about_h">您现在的位置是:<a href="IndexFirstServlet">首页</a>><a href="CritiqueFindServlet">留言板</a></h2>
<div class="template">
<h3>
<p><span>最新留言</span></p>
</h3>
<ul class="pl_n">
<c:forEach items="${critiques}" var="critique">
<dl>
<dt><img src="${critique.photo}"></dt>
<dt></dt>
<dd>
<table align="left" width="200">
<tbody>
<tr>
<td width="80">${critique.name}</td>
<td>${critique.time}</td>
</tr>
</tbody>
</table>
</dd>
<dd>
<a href="CritiqueFirstFindServlet">
${critique.content}
<!-- <s:property value="content" escape="false"/> -->
</a>
</dd>
</dl>
</c:forEach>
</ul>
<div class="page">
<c:if test="${currentpage==1}" var="result">
<a href="#"><</a>
</c:if>
<c:if test="${!result}">
<a href="CritiqueFindServlet?currentpage=${currentpage-1}"><</a>
</c:if>
<b>${currentpage}</b>
<c:if test="${currentpage==cend}" var="result2">
<a href="#">></a>
</c:if>
<c:if test="${!result2}">
<a href="CritiqueFindServlet?currentpage=${currentpage+1}">></a>
</c:if>
</div>
<h3>
<p><span>随便说说</span></p>
<a href="CritiqueFirstFindServlet" target="_blank" class="more"></a>
</h3>
<form action="CritiqueInsertServlet" method="get">
<table>
<tbody>
<tr>
<td><span>您的姓名:</span></td>
<td><input name="name"></td>
</tr>
<tr>
<td>
<div style="width:70px;padding-bottom: 189px;"><span>留言内容:</span></div>
</td>
<td><textarea name="content" style="height:200px; width:630px;"></textarea></td>
</tr>
<tr>
<td></td>
<td>
<button type="submit" style="width: 60px;height: 30px;font-size: larger;">提交</button>
</td>
</tr>
</tbody>
</table>
</form>
</div>
</article>
<aside>
<div class="rnav">
<li class="rnav1 "><a href="IndexFirstServlet">个人博客</a></li>
<li class="rnav2 "><a href="http://user.qzone.qq.com/1481184032">QQ空间</a></li>
<li class="rnav3 "><a href="CritiqueFirstFindServlet">个人作品</a></li>
<li class="rnav4 "><a href="CritiqueFirstFindServlet">随便逛逛</a></li>
</div>
<div class="ph_news">
<h2>
<p>点击排行</p>
</h2>
<ul class="ph_n">
1
<li><span class="num1">
1
</span>
<a href="ArticleDetailServlet?id=2">
鼠标悬停图片、文字css3效果
</a>
</li>
2
<li><span class="num1">
2
</span>
<a href="ArticleDetailServlet?id=3">
从摄影作品中获取网页颜色搭配技巧
</a>
</li>
3
<li><span class="num1">
3
</span>
<a href="ArticleDetailServlet?id=7">
CSS3动画_liffect effect
</a>
</li>
4
<li>
<span>
4
</span>
<a href="ArticleDetailServlet?id=4">
HTML5技术将推动移动浏览器变革
</a>
</li>
5
<li>
<span>
5
</span>
<a href="ArticleDetailServlet?id=5">
css3制作3D图书翻页效果
</a>
</li>
6
<li>
<span>
6
</span>
<a href="ArticleDetailServlet?id=6">
使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
</a>
</li>
</ul>
<h2>
<p>栏目推荐</p>
</h2>
<ul>
<li><a href="ArticleDetailServlet?id=2">鼠标悬停图片、文字css3效果</a></li>
<li><a href="ArticleDetailServlet?id=3">从摄影作品中获取网页颜色搭配技巧</a></li>
<li><a href="ArticleDetailServlet?id=7">CSS3动画_liffect effect</a></li>
</ul>
<div class="copyright">
<ul>
<p> Design by <a href="CritiqueFirstFindServlet"></a>pluto</p>
<p></p>
<p></p>
</ul>
</div>
</div>
</aside>
<script src="../critique_files/silder.js.下载"></script>
<div class="clear"></div>
<!-- 清除浮动 -->
</div>
</body>
</html>
web.xml文件
每次创建完一个servlet,就要记得加该servlet的映射
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>CritiqueFindServlet</servlet-name>
<servlet-class>com.bbx.servlet.CritiqueFindServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CritiqueFindServlet</servlet-name>
<url-pattern>/CritiqueFindServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CritiqueInsertServlet</servlet-name>
<servlet-class>com.bbx.servlet.CritiqueInsertServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CritiqueInsertServlet</servlet-name>
<url-pattern>/CritiqueInsertServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AlbumFindServlet</servlet-name>
<servlet-class>com.bbx.servlet.AlbumFindServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AlbumFindServlet</servlet-name>
<url-pattern>/AlbumFindServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AlbumDetailServlet</servlet-name>
<servlet-class>com.bbx.servlet.AlbumDetailServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AlbumDetailServlet</servlet-name>
<url-pattern>/AlbumDetailServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MeServlet</servlet-name>
<servlet-class>com.bbx.servlet.MeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MeServlet</servlet-name>
<url-pattern>/MeServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ArticleServlet</servlet-name>
<servlet-class>com.bbx.servlet.ArticleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ArticleServlet</servlet-name>
<url-pattern>/ArticleServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ArticleDetailServlet</servlet-name>
<servlet-class>com.bbx.servlet.ArticleDetailServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ArticleDetailServlet</servlet-name>
<url-pattern>/ArticleDetailServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>com.bbx.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/IndexServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CritiqueFirstFindServlet</servlet-name>
<servlet-class>com.bbx.servlet.CritiqueFirstFindServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CritiqueFirstFindServlet</servlet-name>
<url-pattern>/CritiqueFirstFindServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ArticleFirstServlet</servlet-name>
<servlet-class>com.bbx.servlet.ArticleFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ArticleFirstServlet</servlet-name>
<url-pattern>/ArticleFirstServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>IndexFirstServlet</servlet-name>
<servlet-class>com.bbx.servlet.IndexFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexFirstServlet</servlet-name>
<url-pattern>/IndexFirstServlet</url-pattern>
</servlet-mapping>
</web-app>