web学习02(模拟Servlet本质)

模拟Servlet本质

充当SUN公司的角色,制定Servlet规范
        javax.servlet.Servlet接口
充当Tomcat服务器的开发者

充当Webapp的开发者
         BankServlet implements Servlet

        UserListServlet implements Servlet

        UserLoginServlet implements Servlet


        对于javaweb程序员来说,我们只需要做两件事:
                编写一个类实现Servlet接口。
                将编写的类配置到配置文件中,在配置文件中:指定请求路径和类名的关系。

        注意:
                这个配置文件的文件名不能乱来。固定的

                这个配置文件的存放路径不能乱来。固定的。

                文件名、文件路径都是SUN公司制定的Servlet规范中的明细。

        严格意义上来说Servlet其实并不是简单的一个接口:
                Servlet规范中规定了:
                        一个合格的webapp应该是一个怎样的目录结构

                        一个合格的webapp应该有一个怎样的配置文件

                        一个合格的webapp配置文件路径放在哪里

                        一个合格的webapp中java程序放在哪里

                        这些都是Servlet规范中规定的。
         Tomcat服务器要遵循Servlet规范。JavaWEB程序员也要遵循这个Servlet规范。这样Tomcat           服务器和webapp才能解耦合。

Servlet规范是一个什么规范?
        遵循Servlet规范的webapp,这个webapp就可以放在不同的WEB服务器中运行。(因为这个             webapp是遵循Servlet规范的。)

Servlet规范包括什么呢?        

        规范了哪些接口

        规范了哪些类

        规范了一个web应用中应该有哪些配置文件

        规范了一个web应用中配置文件的名字

        规范了一个web应用中配置文件存放的路径

        规范了一个web应用中配置文件的内容

        规范了一个合法有效的web应用它的目录结构应该是怎样的。……

开发一个带有Servlet

(Java小程序)的webapp(重点)

1.开发步骤是怎样的?
        第一步:在webapps目录下新建一个目录,起名crm (这个crm就是webapp的名字)。当然,也                         可以是其它项目,比如银行项目,可以创建—个目录bank,办公系统可以创建—个                         oa.
                注意:crm就是这个webapp的根
        第二步:在webapp的根下新建一个目录:WEB-INF
                注意:这个目录的名字是Servlet规范中规定的,必须全部大写,必须一模一样。必须的

        第三步:在WEB-INF目录下新建—个目录:classes
                注意;这个目录的名字必须是全部小写的classes。这也是Servlet规范中规定的。另外这                            个目录下一定存放的是Java程序编译之后的class文件(这里存放的是字节码文件)

        第四步:在WEB-INF目录下新建—个目录:lib
                注意;这个目录不是必须的。但如果一个webapp需要第三方的jar包的话,这个jar包要放                           到这个lib目录下,这个目录的名字也不能随意编写,必须是全部小写的lib。例如                              java语言连接数据库需要数据库的驱动jar包。那么这个jar包就一定要放到lib目录                              下。这Serlet规范中规定的。
        第五步;在WEB-INF目录下新建—个文件: web.xml
                注意:这个文件是必须的,这个文件名必须叫做web.xml。这个文件必须放在这里。一个                           合法的webapp,web.xml文件是必须的,这个web.xml文件就是一个配置文件,在                            这个配置文件中描述了请求路径和Servlet类之间的对照关系。
                        这个文件最好从其他的webapp中拷贝,最好别手写。复制粘贴

        第六步:编写一个java程序,这个小Java程序也不能随意开发,这个小java程序必须实现                              Servlet接口。

                这个Servlet接口不在JDK当中。(因为Servlet不是JawaSE了。Servlet属于lavaEE,是另                  外的一套类库。)

                Servlet接口(Servlet.class文件)是Oracle提供的。(最原始的是sun公司提供的。)

                Servlet接口是JavaEE的规范中的一员。

                Tomcat服务器实现了Servlet规范,所以Tomcat服务器也需要使用Servlet接口。Tomcat                  服务器中应该有这个接口,Tomcat服务器的CATALINA_HOMElib目录下有一个servlet-                     api.jar,解压这个servlet-api.jar之后,你会看到里面有一个Servlet.class文件。

                重点:从JakartaEE9开始,Serlet接口的全名变了: jakarta.servlet.Servlet

                注意:编写这个java小程序的时候,java源代码你愿意在哪里就在哪里,位置无所谓,你                          只需要将java源代码编译之后的class文件放到classes目录下即可。
        第七步:编译我们编写的HelloServlet
                重点:你怎么能让你的HelloSerMlet编译通过呢?配置环境变量                                         CLASSPATHCLASSPATH=.;C:ldevlapache-tomcat-10.0.12Nliblservlet-api.jar

                思考:以上配置的CLASSPATH和Tomcat服务器运行有没有关系?
                        没有任何关系,以上配置这个环境变量只是为了让你的HelloServlet能够正常编译                           生成class文件。、

        第八步:将以上编译之后的HelloServlet.class文件拷贝到WEB-INF\classes目录下

        第九步:在web.xml文件中编写配置信息,让"请求路径"夭和"Servlet类名"关联在一起。
                这一步用专业术语描述:在web.xml文件中注册Servlet类。

        第十步:启动Tomcat服务器

        第十一步:打开浏览器,在浏览器地址栏上输入一个url,这个URL必须是:
                        http://127.0.0.1:8080/crm/fdsa/fd/safld/sa/fd/sa/fd
        非常重要的一件事:
浏览器上的请求路径不能随便写这个请求路径必须和web.xml文件中的            url-pattern一致

        注意:浏览器上的请求路径和web.xml文件中的url-pattern的唯一区别就是:浏览器上的请求路                    径带项目名:/crm。浏览器上编写的路径太复杂,可以使用超链接。

                    (非常重要: html页面只能放到WEB-INF目录外面。)

                以后不需要我们编写main方法了。tomcat服务器负责调用main方法,Tomcat服务器启                    动的时候执行的就是main方法。我们javaweb程序员只需要编写Servlet接口的实现类,                 然后将其注册到web.xml文件中,即可。

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xm1ns="https ://jakarta.ee/xml/ns/jakartaee"xmlns : xsi="http: //www. w3.or g/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xm1/ns/jakartaee
https://jakarta.ee/xm1/ns/jakartaee/web-app_5_0.xsd"
version="5.0"
metadata-complete="true ">

</web-app>

 

 

向浏览器响应一段HTML代码

public void service(ServletRequest request, ServletResponse response) throws                     
    ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.print("<h1>hello Servlet</h1>");
}

Servlet连接数据库

Servlet是java程序,所有在Servlet中完全可以编写JDBC代码连接数据库

在一个webapp中去连接数据库,需要将驱动jar包放到WEB-INF/lib目录下(com.mysql.cj.jdbc.Driver这个类就在驱动jar包当中)

    @Override
    public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException {
        //设置响应的内容类型
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        //jdbc连接数据库
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/textdatabase01";
            String root = "root";
            String password = "666";
            conn = DriverManager.getConnection(url,root,password);

            //3.获取预编译的操作对象
            String sql = "select s.no,s.name from t_student s";
            ps = conn.prepareStatement(sql);

            //4.执行sql语句
            rs = ps.executeQuery();

            //5.处理结果集
            while (rs.next()){
                String no = rs.getString("no");
                String name = rs.getString("name");
                //System.out.println(no + ":" + name);
                //输出到控制台
                out.print(no + ":" + name + "<br>");
                //输出到浏览器上
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException 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();
                }
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/m0_63061397/article/details/125733570