B/S架构
创建一个Servlet
方法一:
第一步:
新建一个包(com.bzxy.emp),右击选择Servlet
第二步:
显示没有,故选择Other…
第三步:
搜索servlet
方法二:
不需要选择Other…而能够直接选择Servlet
第一步:
选择红框
右击close
显示效果为:
第二步:
用MyEclipse Java Enterprise(default)窗口好处,可显示处Servlet
最终效果为:
把该关闭的关闭,保留自己需要的Console和Servers
第三步:
新建一个包(com.bzxy.emp),右击选择Servlet
修改Servlet属性
第一步:
如图默认显示为:
添加名字为EmpListServlet
注意:类名每一个单词首字母大写
第二步:
只勾选doGet(),点击Next
第三步:
勾选红框内容
第四步:
Servlet/JSP Name相当于<servlet-name>
见名知意即可
默认是类名
Servlet/JSP Mapping URL相当于<url-pattern>
/ 必须有
描述性的东西,删了即可
最终效果如图所示,点击Finish创建完成
优点及测试代码:
自动的继承HttpServlet和生成web.html
EmpListServlet.java
默认效果为:
修改下代码:
解释:doGet只能接收get请求方式,不能接收post请求方式
service接收get和post请求方式,两种方式都可
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("测试...");
}
}
web.html
默认格式所有的servlet写在一起,所有的servlet-mapping写在一起,效果为:
修改下代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 对com.bzxy.test包下的HelloServlet进行配置 -->
<servlet>
<servlet-name>hello</servlet-name> <!-- 对要配置的Servlet起别名 -->
<servlet-class>com.bzxy.test.HelloServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
<url-pattern>/ho</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
</servlet-mapping>
<!-- 对com.bzxy.test包下的RegisteServlet进行配置 -->
<servlet>
<servlet-name>RegisteServlet</servlet-name> <!-- 对要配置的Servlet起别名 -->
<servlet-class>com.bzxy.test.RegisteServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
</servlet>
<!-- 对com.bzxy.emp包下的EmpListServlet进行配置 -->
<servlet>
<servlet-name>EmpListServlet</servlet-name>
<servlet-class>com.bzxy.emp.EmpListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisteServlet</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
<url-pattern>/registe</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
</servlet-mapping>
<servlet-mapping>
<servlet-name>EmpListServlet</servlet-name>
<url-pattern>/list</url-pattern>
</servlet-mapping>
</web-app>
注意:修改完这些操作需要重新部署一下
效果图:
- 浏览器端:
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
空白
- 控制台:
控制台输出测试...
,故测试成功
通过servlet技术将mysql数据库中的数据获取到
导入jar包
直接把已经下载好的jar包复制到WebRoot,WEB-INF中的lib里面
自动生成Referenced Libraries
如何在Java项目中导入jar包可点击本处
servlet技术使用步骤
第一步:注册加载驱动
照着写,Class.forName("com.mysql.jdbc.Driver");
报错,捕获异常
修改代码:
Exception:是所有异常的父类
第二步:获得数据库mysql的连接
测试数据库mysql是否连接成功
代码如下:
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
try {
//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
//!Java项目不需要,Web项目
Class.forName("com.mysql.jdbc.Driver");
//② 获得数据库mysql的连接
//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println("连接为:" + con);
//③ 预编译sql语句
//④ 执行sql语句,获得结果集
} catch (Exception e) {
e.printStackTrace();
}
//2)在该Servlet中将获取的数据显示在页面中
}
}
控制台显示为这种格式的,说明连接成功
第三步:预编译sql语句
第四步:执行sql语句,获得结果集
代码部分:
package com.bzxy.emp;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EmpListServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
ResultSet rs = null;
try {
//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
//!Java项目不需要,Web项目
Class.forName("com.mysql.jdbc.Driver");
//② 获得数据库mysql的连接
//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println("连接为:" + con);
//③ 预编译sql语句
String sql = "select * from emp";
PreparedStatement prep = con.prepareStatement(sql);
//④ 执行sql语句,获得结果集
rs = prep.executeQuery();
//先将结果集rs中数据输出在控制台上测试一下
/*
while (rs.next()) {
System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
+ rs.getDouble("salary") + "," + rs.getDate("birthday"));
}
*/
} catch (Exception e) {
e.printStackTrace();
}
//2)在该Servlet中将获取的数据显示在页面中
}
}
效果图:
通过servlet技术将获得mysql中的数据显示在页面端
rs问题
rs报错
原因:作用域问题
解决方法:
在try
外面声明ResultSet rs = null;
,从而放大它的作用域
显然,仍需要异常处理
页面端显示内容 1.0
代码部分:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
ResultSet rs = null;
try {
//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
//!Java项目不需要,Web项目
Class.forName("com.mysql.jdbc.Driver");
//② 获得数据库mysql的连接
//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println("连接为:" + con);
//③ 预编译sql语句
String sql = "select * from emp";
PreparedStatement prep = con.prepareStatement(sql);
//④ 执行sql语句,获得结果集
rs = prep.executeQuery();
//先将结果集rs中数据输出在控制台上测试一下
/*
while (rs.next()) {
System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
+ rs.getDouble("salary") + "," + rs.getDate("birthday"));
}
*/
} catch (Exception e) {
e.printStackTrace();
}
//2)在该Servlet中将获取的数据显示在页面中
response.setContentType("text/html;charset=utf-8");
try {
//获得PrintWriter,向页面端写内容
PrintWriter pw = response.getWriter();
while (rs.next()) {
pw.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
+ rs.getDouble("salary") + "," + rs.getDate("birthday") + "<br/>");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
效果图:
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
页面端显示内容 2.0
代码部分:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
ResultSet rs = null;
try {
//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
//!Java项目不需要,Web项目
Class.forName("com.mysql.jdbc.Driver");
//② 获得数据库mysql的连接
//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println("连接为:" + con);
//③ 预编译sql语句
String sql = "select * from emp";
PreparedStatement prep = con.prepareStatement(sql);
//④ 执行sql语句,获得结果集
rs = prep.executeQuery();
//先将结果集rs中数据输出在控制台上测试一下
/*
while (rs.next()) {
System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
+ rs.getDouble("salary") + "," + rs.getDate("birthday"));
}
*/
} catch (Exception e) {
e.printStackTrace();
}
//2)在该Servlet中将获取的数据显示在页面中
response.setContentType("text/html;charset=utf-8");
try {
//获得PrintWriter,向页面端写内容
PrintWriter pw = response.getWriter();
//使用pw向页面输出一个表格
pw.println("<table border='1' cellspacing='0' width='600' align='center'>");
//表格的标题
pw.println("<caption>员工信息表</caption>");
//表格的第一行 编号、姓名、密码、工资、
pw.println("<tr align='center'><td>编号</td><td>姓名</td><td>密码</td><td>工资</td><td>生日</td></tr>");
//表格的第二行到第N行
while (rs.next()) {
//pw.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
//+ rs.getDouble("salary") + "," + rs.getDate("birthday") + "<br/>");
pw.println("<tr align='center'><td>" + rs.getInt("id")+ "</td><td>" + rs.getString("name") + "</td><td>"
+ rs.getString("pwd") + "</td><td>" + rs.getDouble("salary") + "</td><td>"
+ rs.getDate("birthday") + "</td></tr>");
}
pw.println("</table>");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
效果图:
若在浏览器中输入http://localhost:8080/servlettest/list
,则如图下显示:
直接在mysql中添加数据
直接刷新页面,效果为:
页面端显示内容 3.0
代码部分:
package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
ResultSet rs = null;
try {
//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
//!Java项目不需要,Web项目
Class.forName("com.mysql.jdbc.Driver");
//② 获得数据库mysql的连接
//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
String url = "jdbc:mysql://localhost:3306/test1";
String username = "root";
String pwd = "";
Connection con = DriverManager.getConnection(url, username, pwd);
System.out.println("连接为:" + con);
//③ 预编译sql语句
String sql = "select * from emp";
PreparedStatement prep = con.prepareStatement(sql);
//④ 执行sql语句,获得结果集
rs = prep.executeQuery();
//先将结果集rs中数据输出在控制台上测试一下
/*
while (rs.next()) {
System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
+ rs.getDouble("salary") + "," + rs.getDate("birthday"));
}
*/
} catch (Exception e) {
e.printStackTrace();
}
//2)在该Servlet中将获取的数据显示在页面中
response.setContentType("text/html;charset=utf-8");
try {
//获得PrintWriter,向页面端写内容
PrintWriter pw = response.getWriter();
//使用pw向页面输出一个表格
pw.println("<table border='1' cellspacing='0' width='600' align='center'>");
//表格的标题
pw.println("<caption>员工信息表</caption>");
//表格的第一行 编号、姓名、密码、工资、
pw.println("<tr align='center'><td>编号</td><td>姓名</td><td>密码</td><td>工资</td><td>生日</td><td>操作</td></tr>");
//表格的第二行到第N行
while (rs.next()) {
//pw.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
//+ rs.getDouble("salary") + "," + rs.getDate("birthday") + "<br/>");
pw.println("<tr align='center'><td>" + rs.getInt("id")+ "</td><td>" + rs.getString("name") + "</td><td>"
+ rs.getString("pwd") + "</td><td>" + rs.getDouble("salary") + "</td><td>"
+ rs.getDate("birthday") + "</td><td>删除" +"</td></tr>");
}
//表格的最后一行
pw.println("<td colspan='6'><a href='http://www.baidu.com'>点我添加员工信息</a></td>");
pw.println("</table>");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
效果图:
bug解决:
引入jar包是否正确
具体引入步骤,可往上查看
手动启动服务
oracle是安装版本的,服务已经开机电脑就启动了
mysql是免安装版本的,需要手动启动服务
故,准备操作必备的是打开启动数据库
具体步骤可点击本处
import导入选择java.sql
pwd
String pwd = "";
本身启动mysql时候时是没有密码的,不可在""
填写内容
test1
String url = "jdbc:mysql://localhost:3306/test1";
选择正确的库,按实际需要而定
emp
emp表中的数据如图所示:
tips:
看到控制台中一大堆爆红,读懂错误,才能改错误