jsp隐式对象
在jsp页面中不用声明与实例化,直接就可以使用的java对象
一共9个
输入输出对象
out
request(请求对象,封装了请求信息,请求参数)
response(响应对象)
作用域对象(绑定数据)
pageContext
request
一次请求,所以绑定的数据在一次请求内有效
session
一次会话
什么是会话?
多次请求称为一次会话,一般是指浏览器一开一关之间。
application
page
config
exception
转发
只会显示第一个jsp的地址
转发只有一个请求(request),不论中间经历多少个jsp
浏览器向服务器发出一次请求,得到一个响应(获得一个html文本,图片,url...)
称为一个request
request.getRequestDispatcher("Main.jsp").forward(request, response);
重定向
浏览器地址栏会改变,显示最后一个jsp的地址
重定向是两个请求
浏览器向第一个jsp页面发出请求,第一个jsp回传一个url地址
浏览器得到这个地址后,立刻向这个地址指定的第二个jsp发送
请求,第二jsp处理请求后,向浏览器回传html文本
response.sendRedirect("Main.jsp");
作业:
用下载的网站模板写登录,注册
案例驱动:
用户登录
员工管理系统
lib中导入jdbc
建表
部门表
删除表
drop table Dept
drop table Emp
create table Dept(
deptno int primary key, --部门编号
dname varchar(200) not null,--部门名称
location varchar(400) not null -- 部门地址
)
员工表
create table Emp(
empno int primary key identity,--员工编号
ename varchar(50) not null,--姓名
sex char(3) check(sex in('男','女')) default '男',--性别
age int check(age between 18 and 60),--年龄
sal float check(sal>=3000) default 3000,--薪资
deptno int references Dept(deptno)
)
select * from dept
select * from emp
添加
insert into dept values(10,'java开发部','北京'),(20,'市场','上海'),
(30,'企划部','长沙')
select * from dept
insert into emp values('熊大','男',25,12000,10),('熊二','男',23,11000,10),
('张三','女',21,9000,10),('李四','女',26,15000,20),('王五','男',27,16000,20),
('赵六','女',20,6000,20),('孙七','男',21,10000,30),('吴八','女',23,13000,30),
('邓九','男',20,9000,30),('常十','女',21,8000,30);
select * from emp
删除表中所有的记录,如果再添加记录标识列,会重新开始
truncate table emp
package com.hj.bean;
public class Emp {
//与数据表结构一致
private Integer empno;
private String ename;
private String sex;
private Integer age;
private Float sal;
private Integer deptno;
public Emp() {
super();
// TODO Auto-generated constructor stub
}
public Emp(Integer empno, String ename, String sex, Integer age, Float sal, Integer deptno) {
super();
this.empno = empno;
this.ename = ename;
this.sex = sex;
this.age = age;
this.sal = sal;
this.deptno = deptno;
}
public Emp(String ename, String sex, Integer age, Float sal, Integer deptno) {
super();
this.ename = ename;
this.sex = sex;
this.age = age;
this.sal = sal;
this.deptno = deptno;
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Float getSal() {
return sal;
}
public void setSal(Float sal) {
this.sal = sal;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
@Override
public String toString() {
return empno+"\t"+ename+"\t"+sex+"\t"+age+"\t"+sal+"\t"+deptno;
}
}
package com.hj.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.hj.bean.Emp;
import com.hj.utils.DBUtils;
public class EmpDao {
//封装基础业务逻辑
//增
public int save(Emp emp) throws SQLException{
//声明2个核心接口
Connection conn = null;
PreparedStatement prep = null;
String sql = "insert into emp values(?,?,?,?,?)";
try {
//获得连接对象
conn = DBUtils.getConnection();
//获得预编译对象
prep = conn.prepareStatement(sql);
//设置参数
prep.setString(1,emp.getEname());
prep.setString(2, emp.getSex());
prep.setInt(3, emp.getAge());
prep.setFloat(4, emp.getSal());
prep.setInt(5, emp.getDeptno());
//prep.setDate(x, dd);
//发送预编译文件,执行sql
return prep.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}finally{
//关闭资源
DBUtils.closeAll(null, prep, conn);
}
}
//删,依据主键删除
public int delete(int empno) throws SQLException{
//声明2个核心接口
Connection conn = null;
PreparedStatement prep = null;
String sql = "delete from emp where empno=?";
try {
//获得连接对象
conn = DBUtils.getConnection();
//获得预编译对象
prep = conn.prepareStatement(sql);
//设置参数
prep.setInt(1,empno);
//发送预编译文件,执行sql
return prep.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}finally{
//关闭资源
DBUtils.closeAll(null, prep, conn);
}
}
//改
//只能修改数据库存在的记录
//修改的前提是查询
//修改应该能够修改除主键以外所有的字段
//应该依据主键去修改
//参数emp对象是数据库存在的记录,所以它是查询方法
//查询出来的
public int modify(Emp emp) throws SQLException{
//声明2个核心接口
Connection conn = null;
PreparedStatement prep = null;
//sql
String sql = "update emp set ename=?,sex=?,age=?,sal=?,deptno=? where empno=?";
try {
//获得连接对象
conn = DBUtils.getConnection();
//获得预编译对象
prep = conn.prepareStatement(sql);
//设置参数
prep.setString(1, emp.getEname());
prep.setString(2, emp.getSex());
prep.setInt(3, emp.getAge());
prep.setFloat(4, emp.getSal());
prep.setInt(5, emp.getDeptno());
prep.setInt(6, emp.getEmpno());
//发送预编译文件,执行sql
return prep.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}finally{
//关闭资源
DBUtils.closeAll(null, prep, conn);
}
}
//查(最复杂)
//只查询一条记录,依据员工编号查询
public Emp queryForId(int empno) throws SQLException{
//声明3个核心接口
Connection conn = null;
PreparedStatement prep = null;
ResultSet rs = null;
Emp emp = null;
//sql
String sql = "select * from emp where empno=?";
try {
//获得连接对象
conn = DBUtils.getConnection();
//获得预编译对象
prep = conn.prepareStatement(sql);
//设置参数
prep.setInt(1,empno);
//发送预编译文件,执行sql
//获得结果集对象
rs = prep.executeQuery();
//遍历结果集,用结果集中的数据
//封装对象
while(rs.next()){
emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setSex(rs.getString("sex"));
emp.setAge(rs.getInt("age"));
emp.setSal(rs.getFloat("sal"));
emp.setDeptno(rs.getInt("deptno"));
}
return emp;
} catch (SQLException e) {
e.printStackTrace();
throw e;
}finally{
//关闭资源
DBUtils.closeAll(rs, prep, conn);
}
}
//查询所有的记录
public List<Emp> queryAll() throws SQLException{
//声明3个核心接口
Connection conn = null;
PreparedStatement prep = null;
ResultSet rs = null;
List<Emp> emps = null;
//sql
String sql = "select * from emp";
try {
//获得连接对象
conn = DBUtils.getConnection();
//获得预编译对象
prep = conn.prepareStatement(sql);
//发送预编译文件,执行sql
//获得结果集对象
rs = prep.executeQuery();
//遍历结果集,用结果集中的数据
//封装对象
while(rs.next()){
if(emps==null){
//循环第一次,实例化集合对象
emps = new ArrayList<Emp>();
}
//实例化一个员工对象
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setSex(rs.getString("sex"));
emp.setAge(rs.getInt("age"));
emp.setSal(rs.getFloat("sal"));
emp.setDeptno(rs.getInt("deptno"));
emps.add(emp);
}
return emps;
} catch (SQLException e) {
e.printStackTrace();
throw e;
}finally{
//关闭资源
DBUtils.closeAll(rs, prep, conn);
}
}
}
package com.hj.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtils {
//jdbc的四个重要参数作为工具类的常量
//驱动字符串
public static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//连接字符串
public static final String URL = "jdbc:sqlserver://localhost:1433;dataBaseName=db01";
//用户名
public static final String USER = "sa";
//密码
public static final String PASSWORD = "123";
//在静态块中加载驱动类
//在类加载的时候,执行的代码
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获得连接对象的方法
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
//关闭资源的方法
public static void closeAll(ResultSet rs, PreparedStatement prep,Connection conn) throws SQLException{
try {
if(rs!=null){
rs.close();
}
if(prep!=null){
prep.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw e;//将异常信息继续往上抛,通知调用者
}
}
//测试
public static void main(String[] args) throws SQLException {
Connection conn = getConnection();
System.out.println(conn);
}
}
ListEmp.jsp
<%@page import="com.hj.bean.Emp"%>
<%@page import="java.util.List"%>
<%@page import="com.hj.dao.EmpDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
table{
width:600px;
border:3px solid #ccc;
border-collapse: collapse;
margin:auto;
}
table th,table td{
border:1px solid #ccc;
}
h3,p{
text-align: center;
}
</style>
</head>
<body>
<!--
从数据库获得数据,渲染到页面
-->
<%
EmpDao dao = new EmpDao();
//查询出所有10条记录
List<Emp> es = dao.queryAll();
//将数据渲染到一个table
%>
<h3>员工管理系统</h3>
<table>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>薪资</th>
<th>部门</th>
<th>操作</th>
</tr>
<%
for(int i=0;i<es.size();i++){
//从集合中取出一个员工数据
Emp e = es.get(i);
//将e的数据填充为表格的一行
%>
<tr>
<td><%=e.getEmpno() %></td>
<td><%=e.getEname() %></td>
<td><%=e.getSex() %></td>
<td><%=e.getAge() %></td>
<td><%=e.getSal() %></td>
<td><%=e.getDeptno() %></td>
<td>
<a href="DoDelete.jsp?empno=<%=e.getEmpno() %>">删除</a>
<a href="ToUpdate.jsp?empno=<%=e.getEmpno() %>">修改</a>
</td>
</tr>
<%
}
%>
</table>
<p>
<a href="ToAdd.jsp">添加员工</a>
</p>
</body>
</html>
DoDelete.jsp
<%@page import="com.hj.dao.EmpDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//request.setCharacterEncoding("UTF-8");
//获得参数,要删除的员工的empno
Integer empno = Integer.parseInt(request.getParameter("empno"));
//创建Dao
EmpDao dao = new EmpDao();
int num = dao.delete(empno);
if(num==1){
//删除成功--重定向回ListEmp.jsp
response.sendRedirect("ListEmp.jsp");
return;//后面的代码都不执行
}
out.print("<h2>系统繁忙,请稍后再试</h2>");
%>
ToAdd.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
form{
width: 210px;
margin: auto;
}
p{
text-align: center;
}
</style>
</head>
<body>
<p>添加员工</p>
<form action="AddEmp.jsp" method="POST">
姓名:<input name="ename"/> <br/>
性别:<input name="sex"/> <br/>
年龄:<input name="age"/> <br/>
薪资:<input name="sal"/> <br/>
部门:<input name="deptno"/> <br/>
<input type="submit" value="添加"/>
</form>
</body>
</html>
AddEmp.jsp
<%@page import="com.hj.dao.EmpDao"%>
<%@page import="com.hj.bean.Emp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//设置解码方式
request.setCharacterEncoding("UTF-8");
//获得参数
String ename = request.getParameter("ename");
String sex = request.getParameter("sex");
Integer age = Integer.parseInt(request.getParameter("age"));
Float sal = Float.parseFloat(request.getParameter("sal"));
Integer deptno = Integer.parseInt(request.getParameter("deptno"));
//创建一个员工对象
Emp e = new Emp(ename,sex,age,sal,deptno);
//创建Dao对象
EmpDao dao = new EmpDao();
int num = dao.save(e);
if(num==1){
//添加成功---重定向回ListEmp.jsp
response.sendRedirect("ListEmp.jsp");
return ;//后面的代码都不执行
}
out.print("<h2>系统繁忙,请稍后再试</h2>");
%>
ToUpdate.jsp
<%@page import="com.hj.bean.Emp"%>
<%@page import="com.hj.dao.EmpDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
form{
width: 210px;
margin: auto;
}
p{
text-align: center;
}
</style>
</head>
<body>
<%
//获得参数empno
Integer empno = Integer.parseInt(request.getParameter("empno"));
//创建Dao
EmpDao dao = new EmpDao();
Emp e = dao.queryForId(empno);
%>
<p>修改员工</p>
<form action="UpdateEmp.jsp" method="POST">
<!-- 隐藏域 -->
<input type="hidden" name="empno" value="<%=empno%>"/>
姓名:<input name="ename" value="<%=e.getEname()%>"/> <br/>
性别:<input name="sex" value="<%=e.getSex()%>"/> <br/>
年龄:<input name="age" value="<%=e.getAge()%>"/> <br/>
薪资:<input name="sal" value="<%=e.getSal()%>"/> <br/>
部门:<input name="deptno" value="<%=e.getDeptno()%>"/> <br/>
<input type="submit" value="修改"/>
</form>
</body>
</html>
UpdateEmp.jsp
<%@page import="com.hj.dao.EmpDao"%>
<%@page import="com.hj.bean.Emp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//设置解码方式
request.setCharacterEncoding("UTF-8");
//获取参数
String ename = request.getParameter("ename");
String sex = request.getParameter("sex");
Integer age = Integer.parseInt(request.getParameter("age"));
Float sal = Float.parseFloat(request.getParameter("sal"));
Integer deptno = Integer.parseInt(request.getParameter("deptno"));
Integer empno = Integer.parseInt(request.getParameter("empno"));
Emp e = new Emp(empno,ename,sex,age,sal,deptno);
//创建Dao
EmpDao dao = new EmpDao();
int num = dao.modify(e);
if(num==1){
//更新成功--重定向回ListEmp.jsp
response.sendRedirect("ListEmp.jsp");
return;//后面的代码不执行
}
out.print("<h2>系统繁忙,请稍后再试</h2>");
%>