1 初次jsp项目
1.1 和servlet项目完全相同
-
创建项目:导入jar 修改编码集 分包
-
实体类 工具类
-
dao
-
servlet:::只保留处理业务的servlet
-
删除拼凑页面的所有代码
1.2 创建登录页面:teacher/login.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>登录页面</title>
<link type="text/css" rel="stylesheet" href="<%=application.getContextPath()%>/css/app.css"/>
</head>
<body>
<form method="post" action="<%=application.getContextPath()%>/teacher/login.do">
<table id="tab_login">
<tr>
<th>老师名字:</th>
<td><input type="text" name="tname" value="张三丰"/></td>
</tr>
<tr>
<th>老师密码:</th>
<td><input type="text" name="tpwd" value="123456"/></td>
</tr>
<tr>
<th colspan="2"><input type="reset" value="重填"/> | <input type="submit" value="登录"/></th>
</tr>
</table>
</form>
</body>
</html>
1.3 修改登录的servlet teacher/login.do
package com.zhiyou100.servlet;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.TeacherDao;
import com.zhiyou100.entity.Teacher;
public class TeacherLogin extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
req.setCharacterEncoding("UTF-8");
String tname=req.getParameter("tname");
String tpwd=req.getParameter("tpwd");
//访问数据库
TeacherDao teacherDao=new TeacherDao();
Teacher dbTeacher=teacherDao.getOneByTname(tname);
//判断登录是否成功
String message=null;//定义引用记录错误信息
if(dbTeacher==null){
//账号错误
message="用户名("+tname+")错误!";
}else if(!dbTeacher.getTpwd().equals(tpwd)){
//密码错误
message="密码错误!";
}
if(message!=null){
//登录失败 回到登录页面
//一般情况下:jsp到jsp 请求包含::两个资源共同拼凑页面
// servlet到jsp::请求转发/重定向
// 请求转发是一次请求 可以使用request域对象
// 重定向是两次请求 不能使用request域对象
//设置域属性
req.setAttribute("message", message);
req.getRequestDispatcher("/jsp/teacher/login.jsp").forward(req, resp);
return;
}
//登录成功:跳转到学生管理页面 来展示所有学生的信息
//对登陆者的信息进行保存:使用session域
req.getSession().setAttribute("teacher", dbTeacher);
resp.sendRedirect("/java43_project_jsp_01/jsp/student/manager.jsp");
}
...
}
- 再在登录页面teacher/login.jsp添加显示登录错误信息的显示
<!-- 判断请求域属性message是否有值 有值就显示 -->
<%
String message=(String)request.getAttribute("message");
if(message!=null){
out.println("<h3>"+message+"</h3>");
}
%>
1.4 学生信息管理页面:student/manager.jsp
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@page import="com.zhiyou100.entity.Student"%>
<%@page import="java.util.List"%>
<%@page import="com.zhiyou100.entity.Teacher"%>
<%@ 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">
<link type="text/css" rel="stylesheet" href="<%=application.getContextPath()%>/css/app.css"/>
<style type="text/css">
#tab_student_list{
width:1100px;
margin:10px auto;
}
</style>
<title>学生管理页面</title>
</head>
<body>
<!-- 从session中获取当前登录者的信息 -->
<h3 style="color:blue;">当前登陆者:<%=((Teacher)session.getAttribute("teacher")).getTname()%> |
</h3>
<!-- 判断请求域属性message是否有值 有值就显示 -->
<%
String message=(String)request.getAttribute("message");
if(message!=null){
out.println("<h3>"+message+"</h3>");
}
%>
<!-- 显示所有学生的信息 -->
<!-- 请求转发到获取所有学生信息的servlet -->
<%
//通过判断request域对象中是否有studentList域属性 来判断是否要跳转到student/getAll.do
if(request.getAttribute("studentList")==null){
request.getRequestDispatcher("/student/getAll.do").forward(request, response);
return;
}
List<Student> list=(List<Student>)request.getAttribute("studentList");
%>
<table id="tab_student_list">
<tr><th>学号</th><th>名字</th><th>性别</th><th>分数</th><th>生日</th><th>政治</th><th>操作</th></tr>
<%
String path=application.getContextPath();
for(Student stu:list){
out.print("<tr><td>"+stu.getSid()+"</td><td>"+
stu.getSname()+"</td><td>"+
stu.getSex()+"</td><td>"+
stu.getScore()+"</td><td>"+
stu.getSbirth()+"</td><td>"+
stu.getSdy()+"</td><td><a href='"+path+"/jsp/student/updateOne.jsp?sid="+stu.getSid()+"'>修改</a> | <a href='"+path+"/student/delete.do?sid="+stu.getSid()+"'>删除</a></td></tr>");
}
%>
<tr><th colspan="7"><a href="<%=path%>/jsp/student/addOne.jsp">添加学生</a></th></tr>
</table>
</body>
</html>
1.5 获取所有学生信息的servlet:student/getAll.do
package com.zhiyou100.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.StudentDao;
import com.zhiyou100.entity.Student;
public class StudentGetAll extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取所有学生的信息
List<Student> list=new StudentDao().getAll();
//设置requesdt域属性
req.setAttribute("studentList", list);
//跳转到manager.jsp
req.getRequestDispatcher("/jsp/student/manager.jsp").forward(req, resp);
}
...
}
1.6 修改删除学生的servlet: student/delete.do
package com.zhiyou100.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.StudentDao;
public class StudentDelete extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
int sid=Integer.parseInt(req.getParameter("sid"));
//通过dao删除
new StudentDao().deleteOne(sid);
//删除成功 设置域属性 并再次回到管理页面
req.setAttribute("message", "删除("+sid+")成功!");
req.getRequestDispatcher("/jsp/student/manager.jsp").forward(req, resp);
}
...
}
1.7 创建修改学生的jsp:student/updateOne.jsp
<%@page import="com.zhiyou100.util.DateStrUtil"%>
<%@page import="com.zhiyou100.entity.Student"%>
<%@ 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">
<link type="text/css" rel="stylesheet" href="<%=application.getContextPath()%>/css/app.css"/>
<title>学生修改页面</title>
</head>
<body>
<!-- 显示当前学生的信息的表单 -->
<!-- 请求转发到获取一个学生信息的servlet -->
<%
//通过判断request域对象中是否有studentList域属性 来判断是否要跳转到student/getAll.do
if(request.getAttribute("student")==null){
request.getRequestDispatcher("/student/getOne.do").forward(request, response);
return;
}
Student student=(Student)request.getAttribute("student");
%>
<form method="post" action="<%=application.getContextPath()%>/student/update.do">
<input type="hidden" name="sid" value="<%=student.getSid()%>"/>
<table id="tab_student_update">
<tr>
<th>学生名字:</th>
<td><input type="text" name="sname" value="<%=student.getSname()%>"/></td>
</tr>
<tr>
<th>学生分数:</th>
<td><input type="text" name="score" value="<%=student.getScore()%>"/></td>
</tr>
<tr>
<th>学生生日(xxxx年xx月xx日):</th>
<td><input type="text" name="sbirth" value="<%=DateStrUtil.date2Str(student.getSbirth())%>"/></td>
</tr>
<tr>
<th>学生性别:</th>
<td>
男:<input type="radio" name="sex" value="男"
<%
if(student.getSex().equals("男")){
out.print("checked='checked'");
}
%>/> |
女:<input type="radio" name="sex" value="女"
<%
if(student.getSex().equals("女")){
out.print("checked='checked'");
}
%>/>
</td>
</tr>
<tr>
<th>政治面貌:</th>
<td>党员:<input type="radio" name="sdy" value="true"
<%
if(student.getSdy()){
out.print("checked='checked'");
}
%>/> |
群众:<input type="radio" name="sdy" value="false"
<%
if(!student.getSdy()){
out.print("checked='checked'");
}
%>/>
</td>
</tr>
<tr>
<th colspan="2"><input type="reset" value="重填"/> | <input type="submit" value="修改"/></th>
</tr>
</table>
</form>
<p style="width:1200px;text-align: right;margin:10px auto;"><a href="<%=application.getContextPath()%>/jsp/student/manager.jsp">回到管理页面</a></p>
</body>
</html>
1.8 创建获取一个的servlet:student/getOne.do
package com.zhiyou100.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.StudentDao;
import com.zhiyou100.entity.Student;
public class StudentGetOne extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
int sid=Integer.parseInt(req.getParameter("sid"));
//获取一个
Student student=new StudentDao().getOneBySid(sid);
//删除成功 设置域属性 并再次回到管理页面
req.setAttribute("student",student);
req.getRequestDispatcher("/jsp/student/updateOne.jsp").forward(req, resp);
}
...
}
1.9 修改修改学生的servlet: student/update.do
package com.zhiyou100.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.StudentDao;
import com.zhiyou100.entity.Student;
import com.zhiyou100.util.DateStrUtil;
public class StudentUpdate extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
req.setCharacterEncoding("UTF-8");
Student student=new Student();
student.setSid(Integer.parseInt(req.getParameter("sid")));
student.setSname(req.getParameter("sname"));
student.setScore(Float.parseFloat(req.getParameter("score")));
student.setSex(req.getParameter("sex"));
student.setSdy(Boolean.parseBoolean(req.getParameter("sdy")));
student.setSbirth(DateStrUtil.str2Date(req.getParameter("sbirth")));
//调用数据库
new StudentDao().updateOne(student);
req.setAttribute("message", "修改("+student.getSid()+")成功!");
req.getRequestDispatcher("/jsp/student/manager.jsp").forward(req, resp);
}
...
}
1.10 创建添加学生的页面:student/addOne.jsp
<%@page import="com.zhiyou100.util.DateStrUtil"%>
<%@page import="com.zhiyou100.entity.Student"%>
<%@ 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">
<link type="text/css" rel="stylesheet" href="<%=application.getContextPath()%>/css/app.css"/>
<title>学生添加页面</title>
</head>
<body>
<form method="post" action="<%=application.getContextPath()%>/student/add.do">
<table id="tab_student_add">
<tr>
<th>学生名字:</th>
<td><input type="text" name="sname" /></td>
</tr>
<tr>
<th>学生分数:</th>
<td><input type="text" name="score" /></td>
</tr>
<tr>
<th>学生生日(xxxx年xx月xx日):</th>
<td><input type="text" name="sbirth"/></td>
</tr>
<tr>
<th>学生性别:</th>
<td>
男:<input type="radio" name="sex" value="男"/> |
女:<input type="radio" name="sex" value="女"/>
</td>
</tr>
<tr>
<th>政治面貌:</th>
<td>党员:<input type="radio" name="sdy" value="true"/> |
群众:<input type="radio" name="sdy" value="false"/>
</td>
</tr>
<tr>
<th colspan="2"><input type="reset" value="重填"/> | <input type="submit" value="添加"/></th>
</tr>
</table>
</form>
<p style="width:1200px;text-align: right;margin:10px auto;"><a href="<%=application.getContextPath()%>/jsp/student/manager.jsp">回到管理页面</a></p>
</body>
</html>
1.11 修改添加学生的servlet: student/add.do
package com.zhiyou100.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhiyou100.dao.StudentDao;
import com.zhiyou100.entity.Student;
import com.zhiyou100.util.DateStrUtil;
public class StudentAdd extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求参数
req.setCharacterEncoding("UTF-8");
Student student = new Student();
student.setSname(req.getParameter("sname"));
student.setScore(Float.parseFloat(req.getParameter("score")));
student.setSex(req.getParameter("sex"));
student.setSdy(Boolean.parseBoolean(req.getParameter("sdy")));
student.setSbirth(DateStrUtil.str2Date(req.getParameter("sbirth")));
// 调用数据库
new StudentDao().addOne(student);
//删除成功 设置域属性 并再次回到管理页面
req.setAttribute("message", "添加("+student.getSname()+")成功!");
req.getRequestDispatcher("/jsp/student/manager.jsp").forward(req, resp);
return;
}
...
}
1.12 登出
- 管理页面添加登出的链接
<a href="<%=application.getContextPath()%>/teacher/logout.do">登出</a>
- 添加登出的servert: teacher/logout.do
package com.zhiyou100.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TeacherLogout extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//清楚登录的信息
req.getSession().invalidate();
//跳转到登录页面
req.setAttribute("message", "登出成功!");
req.getRequestDispatcher("/jsp/teacher/login.jsp").forward(req, resp);
}
...
}
1.13 总结
1: jsp和servlet的分工:jsp用于通过表单获取数据 、数据展示
2: 页面使用url 都要使用相当于当前主机的url 不能使用相当于当前资源
3: css的margin做的不好
4: 单选框和多选框 只要有checked属性 就会被默认选中 不在乎值
5: servlet的流程:获取参数 访问dao 设置域属性 选择跳转