博客---简要总结

一、数据库相关

作为一个web的新人,在练习某某某培训班视频,或者其他书上的的项目,一般对于数据库都是直接导入别人的 .sql 文件,然后进行练习的。但是长期下来,真的坑啊!!!个人建议:如果你不熟sql,那能手写的还是手写比较好。

1、自己如何设计数据库?

网上多查看别人的东西:列出对应的数据库表所需要的东西(相关的一个表、不相关的一个表),这样可以了解很多关于别人的想法。

另外,在开发过程中,先写处理业务逻辑的sql语句,方便,总体也独立一些。

为什么用javabean接受jdbc返回的数据?

ORM 对象关系映射思想

2、如果表中的数据 和 bean对象中的属性名称不一样怎么办?

解决:SQL语句起别名(直接别名或者as关键字),使不一致的属性与bean中的属性相同。如果数据的类型不一样,修改bean中的type。

二、关于主页

1、博客文章的列表及部分内容

显示页面叫main.jsp,处理业务的HomeServlet
(其中的方法main(request,response)是查询出blogs、categorys、comments
get(request,response)作用得到某篇具体的文章)

逻辑问题

  1. main.jsp首先浏览时:你需要列出所有的博文(分页待定)和部分简短内容;
  2. 点击你主页文章的分类时,你需要查询出对应类型的博客文章,并显示;
  3. 如果是点击文章的标题时,那你需要查出具体的博文内容和这篇文章的评论

流程
1,2的区别是:在sql语句中,2比1多个条件(分类的编号)。

2,3的区别是2是得到某一类文章,3是得到某一篇具体的文章(根据method参数调用不同的方法)

首先访问主页,转到HomeServlet

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<% response.sendRedirect("/blog/HomeServlet"); %>

在HomeServlet中首先进行2,3的判断(查询的是:文章的列表、或某个具体的文章)

request.setCharacterEncoding("utf-8");
String method = request.getParameter("method");
		
if (method == null) {
	main(request, response);
	request.getRequestDispatcher("/main.jsp").forward(request, response);
} else if (method.equals("get")) {
	main(request, response);
	get(request, response);
	request.getRequestDispatcher("/displayBlog.jsp").forward(request,response);
}

在main(request,response)中进行1,2的判断(注:cid为分类的id:判断是否有传入的分类id,有——按分类查询,没有——查询所有),另外查出所有的分类和评论,存到request域中。

	String cid=request.getParameter("cid");
	String sql="";
	if(cid==null){
		sql = "...";
	}else{
		sql = "....";
	}

2、右侧的分类、最近文章、最近评论之类的(复用)

都在HomeServlet的main方法中存到域中
页面获取即可。

注意:此处和主界面(不可能显示所有博文,只显示其中一部分) 用到字符传截取
举例:jsp页面顶部引入:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
如果标题太长的话 EL获取,JSTL截取 ${fn:substring(blog.title, 0, 12)}

三、细节问题

1、修改博文(注意:原博文分类的默认选中显示)

修改分为两个部分:1、查询出原来的。2、提交修改之后的

问题描述:表category和blog(含外键category_id,但是并没有分类的name)
blog实体中

	private int id;
	private String title;
	private String content;
	private String createdTime;
	private String category;
	private int categoryId;

分类实体中

	private int id;
	private String name;
	.....

在博文管理页面传入当前blog的id,访问

href="${pageContext.request.contextPath }/PreEditBlogServlet?id=${blog.id}"

在 PreEditBlogServlet中,查询出当前博文和所有分类的信息,存到域中

        // 查询博文
		try {
			sql = "select id,title,content,category_id as categoryId from blog where id="+ id; 
			blog = qr.query(sql, new BeanHandler<Blog>(Blog.class));
		} catch (Exception e) {
			e.printStackTrace();
		}
		//查询分类
		try {
			sql = "SELECT * FROM category ORDER BY LEVEL DESC,id DESC";
			list = qr.query(sql, new BeanListHandler<Category>(Category.class)); //
		} catch (SQLException e) {
			e.printStackTrace();
		}

前台获取数据时,使文章的分类默认选中

<td>类别:</td>
<td><select name="category" id="select">
		<c:forEach items="${list}" var="listlist">
				<c:if test="${blog.categoryId==listlist.id}">
					<option value="${listlist.id }" selected>${listlist.name }</option>  
				</c:if>
				<c:if test="${!(blog.categoryId==listlist.id)}">
					 <option value="${listlist.id }" >${listlist.name }</option>  
				</c:if>
		</c:forEach>
</select></td>

然后提交博客即可。

2、权限问题(一般人浏览,博主增删改查)

这里使用到了session,根据session域中是否有User数据来判断,用户是否具有权限,如果没有那就跳转到登录界面(小提示:可以做成一个jsp页面,在需要权限的地方,顶部引入这个页面即可)

HttpSession session=request.getSession();
User user=(User) session.getAttribute("user");
if(user==null){
	response.sendRedirect("/blog/admin/login.jsp");
}

3、问题分析(前台接收不到后台数据)

排查方式

排查错误,是不是这个bean对象的所有数据都接受不到?还是部分数据接收不到

在bean中 toString() 然后在相应的Servlet中输出,查看具体的属性值
如果是部分数据接收不到 查看sql语句 看具体起的什么别名(别名和bean属性相对应)
另外bean属性的类型 和 数据库表中字段的类型 要一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值