Post和get方式传值的效果比较
从传送的能力上面比较,两个方式都是可以提交表单的,但是如果要是在传送的时候额外的添加了参数的话,那么就要用post方式来传递了,否则就无法得到外加的参数的值,如下所示,为了标记这次的提交的动作,于是对它传入了一个参数,这个参数是传递的是这次活动的目的,比如从前台要操作数据库内容,用CRUD,这个时候就需要对不同的动作做相应的处理,于是就要在前台向后台传送数据的时候给定一个标记,标记出活动的目的,于是就有下面的情况了.
<form action="/test/servlet/TestLoginAndRigist?way=login" method='post'>
<input type="submit" name='login' value='login' />
</form>
<form action="/test/servlet/TestLoginAndRigist?way=regist" method='post'>
<input type="submit" name='login' value='login' />
</form>
如果是提交表单的数据way=login用这个方式来传递一个way的参数,在后台对way的方式进行判断,对于不同的方式给予不同的处理。这样就可以实现一个servlet实现对多个页面就行处理了。
需要注意的是如果在servlet中得到前台的一个变量的值,在后台进行比比较,比如上面的例子,如果要对传递过来的参数进行处理,比如
if(method.equals("regist")){
out.println("注册");
}else if(method.equals("login")){
out.println("登录");
}
这个地方要用equals进行比较而不应该用”==”或者”!=”来比较,因为这两个对象是不同的,它们在内存中的地址是不一样的,如果使用==就会出现问题,这个也提醒自己在servlet中,对与从前台获得的值而言最好在后台 进行操作和比较的时候用equals方法进行,否则就有可能会出错的。
DAO中service接口与DAO接口的区别
DAO主要是针对的数据库进行操作的,而service主要针对的是业务进行处理的,两者的作用不一样,如果业务比较复杂的话,那么service里面的方法就会比DAO中的接口要复杂多了。
DAO只是针对数据库进行操作用的,而service是针对业务进行处理的。
使用容器自身提供的连接池的配置方法
对context的配置,实现对利用tomcat自身所提供的连接池.
<Context reloadable="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
<Resource name="jdbc/mysqlds" auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="user" password="niit"
driverClassName="org.gjt.mm.mysql.Driver"
url ="jdbc:mysql://192.168.2.102/news?characterEncoding=utf-8"/>
<Resource name="jdbc/oracleds" auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="scott" password="niit"
driverClassName="oracle.jdbc.driver.OracleDriver"
url ="jdbc:oracle:thin:@192.168.2.102:1521:news" />
</Context>
要注意在修改context文件的时候一定要用Apata打开,因为用ultraedit打开的话经常会出现那种标点符号问题。
上面的是可以直接的进行数据库和主机修改之后就可以使用的文件,在配置连接池的时候可以在同一个context里面配置多个连接池,只需要把它们的<Resource/>属性给配置好就行了.
获取数据库中是否存在一条指定数据的方法
public boolean getLogin() throws Exception {
String user = "scott";
String password = "niit";
String url = "jdbc:oracl:thin:@localhost:1521:news";
Connection conn=null;
Statement st = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url,user,password);
st = conn.createStatement();
String sql="select * from users where uid=1000";
return st.execute(sql);
}
这个方法可以用来返回一个boolean值,它的作用就是在没有提供连接池的情况下也可以判断出数据库中是否存在一条给定的数据,存在返回true,否则返回false
有的时候在jsp中区获取Bean类里面的值的时候会出现一直是0的或者是自己不希望的结果,这个时候就去看看是否是自己的get和set方法出了问题了,特别是在修改了Bean中一个属性之后就更加容易出现这个问题了。
EL表达式的作用:
EL表达式里面的大于/小于既可以使用>/<也可以使用>/<如下所示
<tr><th>EL表达式</th><th>值</th></tr>
<tr><td>\${100<200}</td><td>${100<200}</td></tr>
<tr><td>\${100 lt 200}</td><td>${100 lt 200}</td></tr>
这里可以使用lt代替<号,而且在书写的时候既可以用<也可以用lt来代替<号,都可的,但是<不可以作为运算符号,而lt可以作为运算符。
在EL表达式中
表达式1<tr><td>${empty username}</td><td>${emptyusername}</td></tr>
表达式2<tr><td>${empty password}</td><td>${empty password}</td></tr>
如果username=null那么表达式一返回的结果就是false,它不认为是空,但是如果username=””;那么返回的结果就是true了
EL表达式的写法:如下所示的EL表达式中${user[userName]}这种写法是不对的,必须在被[]包括的属性上加上””或者’’
<tr><th>EL表达式</th><th>值</th></tr>
<tr><td>\${user.userName }</td><td>${user.userName }</td></tr>
<tr><td>\${user[userName]}</td><td>${user[userName] }</td></tr>
<tr><td>\${user['userName'] }</td><td>${user['userName'] }</td></tr>
<tr><td>\${user["userName"] }</td><td>${user["userName"] }</td></tr>
<tr><td>\${user.profile.email}</td><td>${user.profile.email}</td></tr>
<tr><td>\${user.profile.address.city }</td><td>${user.profile.address[0].city }</td></tr>
注意在新建一个bean类的时候要同时新建一个不带参数的构造方法,否则系统无法自动的识别,还有就是最好也同时创建一个带有所有参数的构造方法,这样在构造这个bean类的一个实例的时候就容易了。
在查询数据库中的东西的时候,有的时候会出现找不到数据的情况,这个时候如果没有报错的话,那么大部分的情况应该是没有提交地原因,所以这个时候就去数据库里面去看看,数据是否提交了,而且在对数据库进行操作的时候最好加上conn.commit();这个方法,它就把结果在数据库中给提交了。
引入包的错误:
1 import java.sql.
2 import java.util.List;
3 import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
如果在第二行出现了错误,有两种可能
第一
-》是本身这一行引入的包是不对的,比如缺少标点,缺少结束的分号。
第二
-》这一行是正确的,但是它上面的一行出现了错误,而上一行出现的问题大部分还是第一种出现的问题。
有的时候在项目中引用的类的包在左边的列表中无法找到,这个是因为自己可能把引入的包的显示给过滤掉了,这个时候只要把这个过滤给取消掉就可以找到它了。比如可以把自己引入的外部的包给人为的给隐藏掉。
function ValidateSame(){
if(document.f1..value.length==0){
return false;
alert("用户名不能为空!");
document.f1.pa
}
在写function方法的时候如果要让方法返回要注意要把返回的语句写在代码块的最后,否则方法不会执行到下面的代码的。
在function里面用到的都是form中的name属性而不是标签的id属性,所以在写的时候要把name属性给写好。