JSP内置对象.docx
《JSP内置对象.docx》由会员分享,可在线阅读,更多相关《JSP内置对象.docx(37页珍藏版)》请在冰豆网上搜索。
JSP内置对象
JSP内置对象
1、完成雇员列表,列表时取得部门名称(尽量不关联查)
登陆成功后,通过2秒跳转的形式进入列表页
if(rs.next()){
response.setHeader("refresh","2;URL="+request.getContextPath()+"/pages/emp/emp_list.jsp");
%>
用户登陆成功!
当前登陆用户为:
<%=rs.getString
(1)%>
<%
}else{
%>
forwardpage="/index.jsp">
forward>
<%
}
修改列表,先查询出所有的部门,并保存到Map中。
<%!
finalStringDBDRIVER="oracle.jdbc.driver.OracleDriver";
finalStringDBURL="jdbc:
oracle:
thin:
@localhost:
1521:
MLDN";
finalStringDBUSER="scott";
finalStringDBPASSWORD="tiger";
Connectionconn=null;
%>
<%
ResultSetrs=null;
PreparedStatementpstmt=null;
PreparedStatementpstmtDept=null;
ResultSetrsDept=null;
//接收传递过来的编号
Stringdeptno=request.getParameter("deptno");
try{
//连接数据库
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
//先查询出全部的部门,信息保存到Map对象中
Mapmap=newHashMap();
StringdeptSql="SELECTdeptno,dnameFROMdept";
pstmtDept=conn.prepareStatement(deptSql);
rsDept=pstmtDept.executeQuery();
while(rsDept.next()){
map.put(rsDept.getInt
(1),rsDept.getString
(2));
}
Stringsql="SELECT*FROMemp";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
%>
雇员编号 | 雇员姓名 | 雇员职位 | 雇员领导 | 入职时间 | 薪水 | 奖金 | 部门名称 |
<%
while(rs.next()){
%>
<%=rs.getInt (1)%> | <%=rs.getString (2)%> | <%=rs.getString(3)%> | <%=rs.getInt(4)%> | <%=rs.getDate(5)%> | <%=rs.getDouble(6)%> | <%=rs.getDouble(7)%> | <%=map.get(rs.getInt(8))%> |
<%
}
%>
<%
}catch(Exceptione){
e.printStackTrace();
}finally{
if(rs!
=null)
rs.close();
if(rsDept!
=null)
rsDept.close();
if(pstmt!
=null)
pstmt.close();
if(pstmtDept!
=null)
pstmtDept.close();
if(conn!
=null)
conn.close();
}
%>
在列表页,加入一个超连接,连接到添加页
<%@pagelanguage="java"import="java.sql.*,java.util.*"pageEncoding="GBK"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
雇员添加<%@includefile="/pages/dbc.jsp"%>
<%
try{
%>
/pages/emp/emp_insert_do.jsp"method="post">
雇员编号:
雇员姓名:
雇员职位:
雇员领导:
无
<%
Stringsql="SELECTempno,enameFROMemp";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
%>
(1)%>"><%=rs.getString
(2)%>
<%
}
%>
入职时间:
薪水:
奖金:
部门:
<%
sql="SELECTdeptno,dnameFROMdept";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
%>
(1)%>"><%=rs.getString
(2)%>
<%
}
%>
<%
}catch(Exceptione){
e.printStackTrace();
}finally{
if(conn!
=null)
conn.close();
}
%>
提交后需要在insert_do.jsp中进行数据库操作。
<%@pagelanguage="java"import="java.sql.*,java.util.*,java.text.*"pageEncoding="GBK"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
雇员添加
<%@includefile="/pages/dbc.jsp"%>
<%
try{
intempno=Integer.parseInt(request.getParameter("empno"));
Stringename=request.getParameter("ename");
Stringjob=request.getParameter("job");
intmgr=Integer.parseInt(request.getParameter("mgr"));
SimpleDateFormatsf=newSimpleDateFormat("yyyy-MM-dd");
java.util.Datehiredate=sf.parse(request.getParameter("hiredate"));
doublesal=Double.parseDouble(request.getParameter("sal"));
doublecomm=Double.parseDouble(request.getParameter("comm"));
intdeptno=Integer.parseInt(request.getParameter("deptno"));
StringsearchSql="SELECTempnoFROMempWHEREempno=?
";
pstmt=conn.prepareStatement(searchSql);
pstmt.setInt(1,empno);
rs=pstmt.executeQuery();
if(rs.next()){
%>
输入雇员编号重复,请返回重新输入!
<%
}else{
//编写sql语句
Stringsql="INSERTINTOempVALUES(?
?
?
?
?
?
?
?
)";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,empno);
pstmt.setString(2,ename);
pstmt.setString(3,job);
pstmt.setInt(4,mgr);
pstmt.setDate(5,newjava.sql.Date(hiredate.getTime()));
pstmt.setDouble(6,sal);
pstmt.setDouble(7,comm);
pstmt.setInt(8,deptno);
if(pstmt.executeUpdate()>0){
response.setHeader("refresh","2;URL="+request.getContextPath()+"/pages/emp/emp_list.jsp");
%>
添加成功!
2秒后返回列表页。
<%
}
}
}catch(NumberFormatExceptione){
%>
输入的数字格式不合法,请返回重新输入!
<%
}catch(ParseExceptione){
%>
入职时间格式不正确,按照年-月-日的格式输入,例如:
2010-11-12
<%
}catch(Exceptione){
e.printStackTrace();
}finally{
if(conn!
=null)
conn.close();
}
%>
列表页加入一个按钮
<%
while(rs.next()){
%>
<%=rs.getInt (1)%> | <%=rs.getString (2)%> | <%=rs.getString(3)%> | <%=rs.getInt(4)%> | <%=rs.getDate(5)%> | <%=rs.getDouble(6)%> | <%=rs.getDouble(7)%> | <%=map.get(rs.getInt(8))%> | (1)%>');"/>
|
<%
}
%>
functiondel(empno){
if(confirm("确定要删除该数据吗?
")){
location="<%=request.getContextPath()%>/pages/emp/emp_delete.jsp?
empno="+empno;
}
}
完成修改,先在列表页加入超连接或按钮。
functionupd(empno){
location="<%=request.getContextPath()%>/pages/emp/emp_update.jsp?
empno="+empno;
}
(1)%>');"/> (1)%>');"/>
| 完成修改页
<%@pagelanguage="java"import="java.sql.*,java.util.*,java.text.*"pageEncoding="GBK"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
雇员添加<%@includefile="/pages/dbc.jsp"%>
<%
try{
//先查询出当前要修改的雇员信息
PreparedStatementpstmtEmp=conn.prepareStatement("SELECT*FROMempWHEREempno=?
");
intempno=Integer.parseInt(request.getParameter("empno"));
pstmtEmp.setInt(1,empno);
ResultSetrsEmp=pstmtEmp.executeQuery();
if(rsEmp.next()){
%>
/pages/emp/emp_insert_do.jsp"method="post">
雇员编号:
<%=rsEmp.getInt
(1)%>(1)%>"/>
雇员姓名:
(2)%>"/>
雇员职位:
"/>
雇员领导:
无
<%
Stringsql="SELECTempno,enameFROMemp";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
if(rsEmp.getInt
(1)!
=rs.getInt
(1)){
%>
(1)%>"<%=rsEmp.getInt(4)==rs.getInt
(1)?
"selected":
""%>><%=rs.getString
(2)%>
<%
}
}
SimpleDateFormatsf=newSimpleDateFormat("yyyy-MM-dd");
%>
入职时间:
"/>
薪水:
奖金:
部门:
<%
sql="SELECTdeptno,dnameFROMdept";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
%>
(1)%>"><%=rs.getString
(2)%>
<%
}
%>
<%
}
}catch(Exceptione){
e.printStackTrace();
}finally{
if(conn!
=null)
conn.close();
}
%>
具体内容
属性范围
服务器中为了开发一些功能,可以临时保存某些属性值(例如:
完成用户是否登陆过的判断。
)。
属性根据保存和销毁时间的不同,分为4种范围:
page,request,session,application
page:
当前页范围,定义一个属性,只要离开当前页,属性就销毁。
(一般不用)
request:
一次用户请求范围,如果服务器端跳转,则属性会保留,但只要进行了客户端跳转,则属性会自动销毁(MVC中会使用)
session:
一个会话范围,一个Session会在一个浏览器中生成一个唯一的标识,来标识不同的用户,因此登陆判断可以使用这个属性范围。
application:
服务器范围,保存在服务器中,只有当服务器关闭时,才会销毁。
(<%!
%>定义的变量就是服务器范围),可以用来做在线人员列表(需要结合Listener监听器一起完成。
)
保存和取得属性都需要通过方法来完成:
setAttribute(“属性名(String)”,“属性值(Object)”):
保存属性
getAttribute(“属性名(String)”):
取得属性
getAttribute和getParameter的区别:
getAttribute是取得属性,由服务器来调用setAttribute设置后才可以取得,返回Object类型。
getParameter是取得参数,是