B/S系统结构的角色与协议与Servlet简单的应用

一、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中拷贝这个文件,最好别手写】
<?xml version="1.0" encoding="UTF-8"?>

<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 类名能够匹配上
    • <?xml version="1.0" encoding="UTF-8"?>
      <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都对应一个servlet-mapping-->
        <servlet>
      	<servlet-name>javajava</servlet-name>
      	<!--这个位置必须是带包名的全限定类名-->
      	<servlet-class>完整包名.类名</servlet-class>
        </servlet>
      
      	<!--Servlet映射信息-->
        <servlet-mapping>
          <!--这里的name 要和上面的name一致-->
      	<servlet-name>javajava</servlet-name>
      	<!--这里需要一个路径名,可以随便写,唯一的要求就是 以 "/" 开始-->
          <!--这个路径是要在浏览器发送请求的路径。也就是在浏览器的地址栏输入:crm + 请求路径-->
      	<url-pattern>/a/b/c/d</url-pattern>
        
        </servlet-mapping>
      
      </web-app>
    • 地址栏上的 url 要与 web.xml 中<url-pattern> 的路径保持一致。

    • http://127.0.0.1:8080/crm//a/b/c/d

    •  地址栏上的url 与 <url-pattern>的区别就是:地址栏上的 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 + "<br>");
                  }
      
              } 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

    • <?xml version="1.0" encoding="UTF-8"?>
      <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>StudentList</servlet-name>
              <!--完整包名-->
              <servlet-class>yangzhaoguang.servlet.StudentServlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>StudentList</servlet-name>
              <!--请求路径,这个是要输入在浏览器的地址栏-->
              <url-pattern>/servlet/Student</url-pattern>
          </servlet-mapping>
      </web-app>
    • 在 webapp 中新建 HTML 网页,注意:不能在WEB-INF 中创建

    • <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
      <!--这里要记着加上项目名:xmm ,不是JSP无法动态获取-->
          <a href="/xmm/servlet/Student">StudentList</a>
      </body>
      </html>
    • 部署Tomcat 

    •  

       部署完成后就启动Tomcat 服务器,在地址栏上输入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲨瓜2号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值