精简版BBS学习札记(二)

1、JSP文件放置的位置可以与HTML文件放置的位置一样,但是[color=red]JSP文件一定不能放在WEB-INF或者META-INF文件下[/color]

2、WEB-INF文件中只能放三种文件
1)、class文件
2)、lib文件
3)、web.xml

3、在JSP文件通过URL传参数时,一定要注意参数前后的空格问题!,一般情况下是不能有空格的!
1)、如果是post的传递呢?
解决:请你把接收过来的参数打印出来(打印在后台)
2)、如果怀疑传过来的参数(如id)带空格(这样让人感到很不爽!)!
解决:在打印参数的前后加一些字符即可!

4、在提交表单时,用自身提交(即自己提交给自己),而且同时这个JSP文件也有一个外链接,如何区别是外链接?还是自身提交呢?
[color=red][size=x-large]用隐含域[/size][/color]
如:这是一个Post.jsp文件![color=red]下面两段代码是在同一个JSP文件中![/color]

//这是在HTML区域
<form action="Post.jsp" method="post">
<input type="hidden" name="action" value="post"> //隐含域
....
</form>

可以在JSP区域中写如:

String action = request.getParameter("action") ;
//if(action !=null && action.equals("post")) {
if("action".equals(action)) {
...
}


还有一个外链接是:

//这个外链接是在ShowArticleTree.jsp文件中
<a href="Post.jsp">发表新帖</a>

如果是外链接是不是执行if里的语句(因为没有传递action),而在表单中提交时会执行的(因为传递action了!)

5、在发表新主题时,pid(pid为父id)肯定为0,那rootid(根id)呢?因为rootid是数据库自动递增的id,那如何将这个自动递增的id传给rootid呢?
1)、这个新发表主题的id是当前最大的id,用SELECT语句找到这个最大的id,然后再更新一下,就可以了!,不过这时,插入新主题的SQL语句与找到最大id的SQL语句以及更新语句都必须同时放在一个事务中!
2)、在java中API提供了一个方法可以帮我们拿到PrepareStatement对象自动生成的键(key),这即Statement.RETURN_GENERATED_KEYS

conn.setAutoCommit(false) ;


String sql = "insert article values(null, 0, ?, ?, ?, now(), 0)" ;
PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) ; //Statement.RETURN_GENERATED_KEYS是拿到预编译语句中的自动生成的KEYS!这里的KEYS为什么是复数呢?因为这个方法会生成很多KEY,但是这里的KEY不是指问号!!!
Statement stmt = conn.createStatement();

pstmt.setInt(1, -1) ;
pstmt.setString(2, title) ;
pstmt.setString(3, cont) ;
pstmt.executeUpdate() ;

ResultSet rsKey = pstmt.getGeneratedKeys() ; //拿到自动生成的KEYS
rsKey.next() ;
int key = rsKey.getInt(1) ; //拿到第一个KEY,因为第一个KEY就是rootid!
rsKey.close() ; //因为后面的语句不需要rsKey参与了,因此在这里就可以关闭了!
stmt.executeUpdate("Update article set rootid =" + key + "where id=" + key) ;

conn.commit() ;
conn.setAutoCommit(true) ;

这样就可以更新rootid了!

6、将HTML文件改成JSP文件,首先引入JSP文件头部:

<%@ page contentType="text/html; charset=gbk" pageEncoding="gbk" %>


7、为什么在Login.jsp中,
1)要用session.setsession.setAttribute("admin", "true");
然后再[color=red]重定向[/color]到主页面呢?
2)而不用request.setAttribute("admin", "true") ;
然后再[color=red]转发[/color]到主页面呢?
是因为关于URL的改变吗?还是因为session和request的范围不同呢?

[color=red] 因为两者的使用范围不同[/color]
比如用方法2)来登录,虽然登录上了,但是如果进行下一步操作(如:修改或者删除帖子等)后,[color=red]刷新页面,则刷新后的页面,就退出了你以管理员身份登录后台的操作了!这是因为(也体现了)HTTP协议是不连续的(即无状态性的)[/color],如果以这样方式登录后台,操作一步,退出一步,然后再登录一步!那管理员是不是都疯了! :? :? :? :x :x
而用方法1)是在整个会话中都存在的,只要不关闭当前的浏览器窗口,你的身份就是管理员!

8、当用eclipse或者myeclipse看JSP文件时,同时这个文件含有大量的HTML语句,可以借助右边有一个Outline视图来看一个一个小标签(或者模块)!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值