JavaEE
github 源码连接点击这里
1. 知识储备
-
Mysql
数据库语句知识,基本可以用到的都是简单的增删改查表记录语句,学习地址:菜鸟教程的MySQL。
jdbc连接:Class.forName(DRIVER); //注册驱动 Connection conn = DriverManager.getConnection(URL,USER,PASSWORD); // 创建连接 String sql= "INSERT INTO STUDENT VALUES (?,?,?)"; PrepareStatement stmt = conn.prepareStatement(sql); // 创建语句 stmt.setString(1, student.getSno()); //设置参数 stmt.setString(2, student.getSname()); stmt.setString(3, student.getPassword()); stmt.executeUpdate(); //执行更新语句,还有一种执行查询操作 stmt.executeQuery();
-
Servlet
Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。// WebServlet注解表示这是一个Servlet,并映射到地址/: @WebServlet(urlPatterns = "/") public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置响应类型: resp.setContentType("text/html"); List<Homework> homework_list = student_jdbc.QueryHomework(login_no); req.setAttribute("homework_list", homework_list); //setAttribute方法设置属性,传数据 req.getSession().setAttribute("sno",login_no); //Session 识别用户的标志 req.getRequestDispatcher("student.jsp").forward(req, resp); // getRequestDispatcher方法跳转网页,forword传递参数 // 获取输出流: PrintWriter pw = resp.getWriter(); // 写入响应: pw.write("<h1>Hello, world!</h1>"); // 最后不要忘记flush强制输出: pw.flush(); } }
一个Servlet总是继承自HttpServlet,然后覆写doGet()或doPost()方法。注意到doGet()方法传入了HttpServletRequest和HttpServletResponse两个对象,分别代表HTTP请求和响应。我们使用Servlet API时,并不直接与底层TCP交互,也不需要解析HTTP协议,因为HttpServletRequest和HttpServletResponse就已经封装好了请求和响应。以发送响应为例,我们只需要设置正确的响应类
型,然后获取PrintWriter,写入响应即可。getRequestDispatcher()和sendRedirect()区别
-
request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。
request.getRequestDispather();返回的是一个RequestDispatcher对象。 -
RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。
-
-
JSP
整个JSP的内容实际上是一个HTML,但是稍有不同:
包含在<%--和--%>之间的是JSP的注释,它们会被完全忽略;
包含在<%和%>之间的是Java代码,可以编写任意Java代码;
如果使用<%= xxx %>则可以快捷输出一个变量的值。JSP页面内置了几个变量:
out:表示HttpServletResponse的PrintWriter;
session:表示当前HttpSession对象;
request:表示HttpServletRequest对象。
这几个变量可以直接使用。
2. 项目介绍
功能简介
完成了用户注册登录功能,对于教师,可以查看自己所教授学生、查看自己所布置的作业、添加学生和布置作业,对于学生,可以查看自己老师布置的作业、完成作业。
数据库设计
使用Powerdesigner画出概念模型图(ER图 .cdm),生成物理模型(.pdm),导出sql脚本文件,使用Navicat for Mysql 创建数据库执行脚本,完成数据库设计。ER图如下:
项目结构
工程文件截图:
Java源代码在com.homework.java文件夹下,包括JDBC连接、Model模型构建和Servlet设计。
* jdbc封装个工具类jdbcUtil。StudentJdbc和TeacherJdbc都调用这个工具类的对象完成驱动注册和连接,可以避免代码重复。
* 工程开始,最先着手于数据库设计,所以最开始编写的就是model,基本就是数据库每个表一个model,用于数据访问。
* Servlet和网页设计同步进行,因为这不是前后端分离开发,按操作,几乎每一个操作对应着一个Servlet和一个JSP网页
界面展示
- 用户登录注册界面,根据不同身份,登录进入系统后的功能也不同:
教师
-
查看自己布置的作业,会统计学生提交的人数,还可以编辑作业:
-
布置作业:
布置完成:
-
查看自己教授的学生信息:
-
添加学生:
添加完成
学生
-
查看自己老师布置的作业,会显示是否已经提交:
-
提交作业:
提交完成后:
3. 总结:
一个项目的完成需要精细了思路和扎实的基础知识。设计是完成的一半,一定要先学习相关知识,最好有个类似的项目研究技术。