一、B/S系统结构的角色与协议
- 在B/S结构中有哪些角色呢?
- 浏览器开发团队(谷歌,百度,火狐,IE)
- WEB Server 开发团队(Tomcat ,Jetty,WebLogic...)
- DB Server 开发团队(My SQL,Oracle...)
- webapps的开发团队(程序员...)
角色与角色之间需要遵守哪些规范,哪些协议?
- 先思考一个问题:假设我们的手机充电器坏掉了,在别的厂家买了一个充电器,不仅我们手机能用这个充电器,别的手机也能用。这说明了什么?是不是说明了手机的厂家与充电器的厂家都共同遵守了一个规范。才能使充电器与手机匹配上
- WEB Server 服务器与 webapps 都共同遵守一套规范,这个规范就是 Serverlet ,SUN公司制定,能保证 我们在 Tomcat 服务器上开发的webapps 在其他服务器上也能运行
- Browser 与 WEB Server 之间有一套传输协议:HTTP(超文本链接协议)W3C组织制定
- DB Server 与 WEB Server 之间的规范:JDBC,SUN公司制定
- 通过我们分析,路径 与 java小程序之间的对应关系应该有什么指定呢?
- 将路径 和 java小程序【某个Servlet 】对应的关系 写入配置文件中,Tomcat 通过解析配置文件匹配与路径对应的java小程序【某个Servlet】
- 对于我们程序员来说,只需要干俩件事:
- 1、编写一个类实现 Servlet 接口
- 2、将 路径 和 类 的对应关系写到配置文件中
- 注意:这个配置文件不能瞎写,文件名是固定的,文件的存放路径也是固定的。
- 所以,其实Servlet不仅仅是一个接口,同时还规定了配置文件以及webapps 存放位置的一些个规范。
二、Servlet 的简单应用
- 开发一个带有Servlet【java小程序】的webapp
- 第一步:在webapps目录下新建一个目录,crm【目录名随意】。
- crm 就是 webapp 的根目录
- 第二步:在 crm 目录下新建一个目录:WEB-INF。
- 注意:名字不能随便乱写,必须大写,这是Servlet 中规范的。
- 第三步:在WEB-INF目录下新建一个目录:classes
- 这个目录名字也不能随便写,都是小写,也是规范之一。这个目录下存放的是字节码文件,Java编译之后的文件
- 第四步:在WEB-INF 目录下新建一个目录:lib
- 这个目录不是必须的,但是如果 webapp 需要第三方的 jar 包的话,这个 jar 包需要放到这个目录下边
- 第五步:在WEB-INF 目录下新建一个文件:web.xml
- 这个文件是必须要有的,名字必须一模一样,这个 web.xml 文件 就是配置文件,在这个配置文件中 描述了 Servlet 与 路径之间的关系。【可以从其他webapp中拷贝这个文件,最好别手写】
- 第一步:在webapps目录下新建一个目录,crm【目录名随意】。
-
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1"
- metadata-complete="true">
-
- web-app>
- 第六步:编写一个 java 小程序,这个程序必须要实现 Servlet 接口
- Servlet 接口 属于是 JavaEE中的规范了,并不在JDK中。
- Tomcat 也需要实现Servlet 规范。所以在Tomcat 中也实现了Servlet 接口。
- 在Tomcat 的lib 目录下有这个servlet-api.jar 包,解压之后你会在 Javaax-Servlet 目录下看到有 Servlet .class。这个完整的类名是:jakarta.serverlet 【自从javaEE9 之后改成 :jakarta】
- 编写 这个 java小程序,在哪里写都可以,但是需要将编译之后的 字节码文件放到 classes目录下
- 第七步:编辑配置文件,让 请求路径 和 Servlet 类名能够匹配上
-
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1"
- metadata-complete="true">
- <servlet>
- <servlet-name>javajavaservlet-name>
- <servlet-class>完整包名.类名servlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>javajavaservlet-name>
- <url-pattern>/a/b/c/durl-pattern>
- servlet-mapping>
- web-app>
-
地址栏上的 url 要与 web.xml 中
的路径保持一致。 -
地址栏上的url 与
的区别就是:地址栏上的 url 带项目名 :/crm
- 如何使用集成开发工具开发Servlet【IDEA】
- 创建工程,按下图直接点OK即可
- .
- 创建完之后,IDEA 会自动生成一个符合Servlet 规范的目录webapp的目录结构
- 注意:在IDEA生成的目录中有一个 web 目录,它就是webapp的根
- 编写Servlet之前先把 Tomcat 中的 jar 包引进来
- File ——Project Structure
- 将类库引进模块中
- 在WEB-INF 目录下新建一个 lib 子目录,将连接数据库的jar包引进来
-
- 实现 Servlet 中的 5 个方法,在 service() 方法中编写代码
-
- public class StudentServlet implements Servlet {
- @Override
- public void init(ServletConfig servletConfig) throws ServletException {
- }
- @Override
- public ServletConfig getServletConfig() {
- return null;
- }
- @Override
- public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
- //设置相应内容类型
- servletResponse.setContentType("text/html");
- //打印到浏览器
- PrintWriter writer = servletResponse.getWriter();
- //连接数据库
- Connection conn = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/studentgrade", "root", "root");
- String sql = "select * from course";
- ps = conn.prepareStatement(sql);
- rs = ps.executeQuery();
- //处理结果集
- while (rs.next()) {
- String cno = rs.getString("cno");
- String cname = rs.getString("cname");
- String classHour = rs.getString("classHour");
- //打印
- writer.print(cno + "," + cname + "," + classHour + "
"); - }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //释放资源
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (ps != null) {
- try {
- ps.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
- @Override
- public String getServletInfo() {
- return null;
- }
- @Override
- public void destroy() {
- }
- }
-
编辑配置文件 web.xml
-
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
- <servlet>
- <servlet-name>StudentListservlet-name>
- <servlet-class>yangzhaoguang.servlet.StudentServletservlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>StudentListservlet-name>
- <url-pattern>/servlet/Studenturl-pattern>
- servlet-mapping>
- web-app>
-
在 webapp 中新建 HTML 网页,注意:不能在WEB-INF 中创建
-
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Titletitle>
- head>
- <body>
- <a href="/xmm/servlet/Student">StudentLista>
- body>
- html>
-
部署Tomcat
-
-
部署完成后就启动Tomcat 服务器,在地址栏上输入
-
最终将数据库中的内容成功的显示到了页面上。
-
-
以下是 Tomcat 部署的配置信息
-