Java EE——基于Mysql、Servlet、JSP的作业管理系统(1)-准备阶段
1.目标
1)老师:添加作业,添加学生。查询学生作业;
2)学生:根据老师添加的作业,进行作业提交;
2.实现方法
一,数据库方面
(1)数据库的连接和准备工作
连接通过JDBC实现Java连接数据库
参见之前的《JavaEE 学习笔记》link
准备相应的数据库
下载老师发的发的**“javaee.sql”**文件,
一、用cmd的调试环境导入.sql文件中的数据:
WinR键打开cmd输入:
MySQL -u root -p(后面紧跟着密码!!)
MySQL>use school; //数据库的库名
MySQL> sourceD:\javaee.sql
javaee.sql是你下载的数据库的内容,注意javaee.sql是要放在磁盘的最外层目录的,否则无法导入数据。
(2)对于数据库查找和插入操作
以添加学生来举例
通过JDBC向数据库中添加数据,可以使用INSERT语句实现插入数据SQL语句,对于SQL语句中的参数可以只用占位符“?”代替,然后通过PreparedStatement对其赋值以及执行SQL。代码如下:
try(Connection connection = DriverManager.getConnection(url,"root","123456")){ // 创建连接
try(Statement statement = connection.createStatement()){ // 通过链接获取statement
String sql = "insert into s_student (id,name,create_time,update_time) values(? ,?,?,?)";
PreparedStatement ps = connection.prepareStatement(sql);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
java.util.Date date = new java.util.Date();
// 为sql语句中第一个问号赋值
ps.setLong(1,student.getId());
// 为sql语句中第二个问号赋值
ps.setString(2, student.getName());
// 为sql语句中第三个问号赋值
ps.setTimestamp(3, Timestamp.valueOf(df.format(student.getCreateTime())));
// 为sql语句中第四个问号赋值
ps.setTimestamp(4, Timestamp.valueOf(df.format(date.getTime())));
// 执行sql语句
ps.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
}catch (SQLException e) {
e.printStackTrace();
}
}
查找上一次已经说过了,不再赘述
二,Servlet
介绍
什么是Servlet
Servlet 是Java 语言中编写Web服务器扩展功能的重要技术,同时又时JSP技术的底层运行基础。
Servlet是为了解决实现动态页面而衍生的东西,它基于B/S 模式,用来处理请求和发送相应。它是一个规范,编写一个Servlet 实际上是按照Servlet规范编写一个java类,作为web组件,被Servlet容器所管理。
Servlet 和 Tomcat 的关系
上面提到Servlet是一个web组件,需要部署到容器中才能运行,Tomcat就是一个容器,符合一定规范,提供组件运行环境。
Tomcat 是一个web应用服务器,也是一个servlet/jsp 容器。用于将客户端的请求传送给servle容器,servlet容器实例化一个servlet,将请求传送给实例化的servlet,并将servlet的相应传送回客户端。
【tomcat服务器接受客户端请求并做出响应】补充描述:
① 客户端(通常都是浏览器)访问web服务器,发送http请求
② web服务器接收到请求后,传递给Servlet容器。
③ Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象。
④ Servlet实例使用请求对象得到的客户端的请求信息,然后进行相应的处理。
⑤ servlet实例将处理结果通过相应对象发送回客户端,容器负责确保相应正确送出,同时将控制返回给web服务器。
工作原理(请求到web服务器到Servlet流程)
客户端(浏览器)是通过URL 地址访问web服务器中的资源,URL地址(http://hostname: port/contextpath/servletpath)
hostname和port 用来与服务器建立TCP连接,后面的URL 用来选择在服务器中哪个子容器服务用户的请求,这个是在web.xml 中部署完成的。
下面是一个在web.xml部署servlet的例子例子
<servlet>
<servlet-name>testServlet</servlet-name> //servlet名称,这个名字自定义,与下面的名字保持一致
<servlet-class>com.java.code.class2.servlet.TestServlet</servlet-class> //servlet的全限定类名,找到servlet在项目中的位置
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name> //这里的名称必须和上面的</servlet-name> 保持一致
<url-pattern>/testServletV1</url-pattern> //<-- 浏览器通过该url 找到servlet -->
</servlet-mapping>
也可以在Servlet类上面加一个注释 @WebServlet("/********************")来简化部署
三, JSP文件
介绍
1)JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常
以**<%开头
以%>**结束。
2)JSP本质上也是一个servlet!!!!!!
为了servlet展示信息的不方便,引入了JSP。
JSP就是在HTML页面中嵌入了java代码。
3)JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
4)JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
当浏览器访问.jsp文件。服务器发现后缀为.jsp,它会根据路径找到.jsp文件,会将.jsp翻译成jsp.java文件,对这个java文件进行编译,产生一个jsp.class文件,将class文件加载运行。将JSP翻译成java文件,它是将JSP中的所有的HTML代码通过流进行输出,也就是说最终翻译成class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的方式写回浏览器。所以在JSP中展示出了HTML代码。
插入java代码方法
标签 | 语法 | 用途 |
声明标签 | <%! 变量或方法声明%> | 声明JSP内所使用的全局变量或方法或内部类(它用于定义成员)(写的内容在成员位置上) |
表达式 | <%= 表达式 %> | 输出java中变量或者表达式的值到页面上(它用于输出) out.print(内容) |
程序代码标签 | <%程序代码%> | 编写java程序代码,但不可以定义代码(它用于定义局部)(声明的变量在局部位置_jspService方法中) |
下面是一个展示所有学生_作业数据的表格的部分
<table align="center" width = "960" border="1" bgcolor="white" cellpadding="1" cellspacing="1">
<tr align="center" bgcolor="#f2ffbe" height="30">
<td>ID</td> //表格第一行
<td>学生学号</td>
<td>作业编号</td>
<td>作业标题</td>
<td>作业内容</td>
<td>创建时间</td>
</tr>
<% //开始插入java代码
List<StudentHomework> list = (List<StudentHomework>) request.getAttribute("list"); //得到list
if( list == null || list.size() <= 0 ){ //判定list 不为空
out.println("none Data");
}else{
for(StudentHomework sh : list){ //遍历list
%>
<tr align="center">
<td><%=sh.getId()%></td> //<%=表达式%> 代表打印一个变量
<td><%=sh.getStudentId()%></td>
<td><%=sh.getHomeworkId()%></td>
<td><%=sh.getHomeworkTitle()%></td>
<td><%=sh.getHomeworkContent()%></td>
<td><%=sh.getCreateTime()%></td>
</tr>
<%
}
}
%>
</table>
以上就是我们制作这个系统的准备阶段