学习JavaWeb的第3天(2021-11-09)
学习JavaWeb的第3天(2021-11-09)1、public interface Servletpackage javax.rtl.servlet;//javax.rtl.servlet.Servletpublic interface Servlet{void service();}2、public class BankServlet implements Servletpackage co
学习JavaWeb的第3天(2021-11-09)
1、public interface Servlet
package javax.rtl.servlet;
//javax.rtl.servlet.Servlet
public interface Servlet{
void service();
}
2、
public class BankServlet implements Servlet
package com.rtl.servlet;
import javax.rtl.servlet.Servlet;
//com.rtl.servlet.BankServlet
public class BankServlet implements Servlet{
public void service(){
System.out.println("BankServlet's service.........");
}
}
3、public class UserListServlet implements Servlet
package com.rtl.servlet;
import javax.rtl.servlet.Servlet;
//com.rtl.servlet.UserListServlet
public class UserListServlet implements Servlet{
public void service(){
System.out.println("UserListServlet's service.........");
}
}
4、public class UserLoginServlet implements Servlet
package com.rtl.servlet;
import javax.rtl.servlet.Servlet;
//com.rtl.servlet.UserLoginServlet
public class UserLoginServlet implements Servlet{
public void service(){
System.out.println("UserLoginServlet's service.........");
}
}
5、public class Tomcat这个类很重要
package org.apache;
import javax.rtl.servlet.Servlet;
import java.io.FileReader;
import java.util.Properties;
import java.util.Scanner;
public class Tomcat{
public static void main(String[] args) throws Exception{
System.out.println("Tomcat服务器启动成功!开始接收用户的访问。");
System.out.println("请输入您的访问路径:");
Scanner s = new Scanner(System.in);
//接收用户输入的请求路径
String path = s.nextLine();
//这里就是Tomcat模拟解析配置文件里面请求路径和xxxServlet的映射关系。
FileReader reader = new FileReader("web.properties");
Properties pro = new Properties();
pro.load(reader);
reader.close();
//根据用户的请求路径来获取value值,就是具体的Servlet的类名
String className = pro.getProperty(path);
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
//拿到这个obj之后,Tomcat服务器的开发者是不知道具体是哪个Servlet的,但是它一定知道这个具体的Servlet的类
//实现了接口Servlet,所以,我们可以把这个得到的obj强转成Servlet类。
Servlet servlet = (Servlet) obj;
servlet.service();
}
}
现在访问的地址都是显示一些写死再HTML文档里面的静态资源,怎么能将这些静态资源变成动态的呢?
显然需要连接数据库。
连接数据库需要JDBC程序。也就是需要编写java程序连接数据库,查出来有多少条记录,页面上就显示多少条。这种技术称为动态网页技术。
注意:动态网页技术并不是说页面中有flash动画,而是说,动态网页里面的数据是动态的,是根据数据库中的变化而变化的。
画图:
WEB Server 目前使用的是Tomcat服务器。这个Tomcat服务器是纯java语言写的。
在tomcat服务器里面有个东西是webapps。
在webapps里面有很多个web项目。
其中有一个是oa;办公系统。
计算机里面有很多个服务,其中这台电脑的8080端口就是用来给tomcat服务器的。
oa办公系统里面有很多个资源:index.html,login.html
我们上海的一台用户机使用浏览器这个软件输入URL之后,就可以去访问深圳这台服务器里面的tomcat服务器里面的资源、
浏览器输入:
http://127.0.0.1:8080/oa/index.html
http://127.0.0.1:8080/oa/login.html
输入这些url可以访问oa里面的静态资源。
那,现在怎么访问小java程序呢?
比如:在oa系统里面定义一个java小程序用来获取所有的用户信息的。
和静态资源一样,也是取决于路径,取决于你写的url;
一个路径代表一个资源。
这个资源可能代表静态资源,也可能是动态资源。
但是静态资源访问的时候,前面的路径写的就是我呢见的名字,这个好搞一点。
但是:访问动态资源的路径怎么和这些java小程序对应呢?
比如:在oa办公系统里面,动态资源就是UserServlet.java这个java小程序来获取所有用户的信息列表。
比如:输入http://127.0.0.1:8080/oa/userList。
这个URL就可以访问UserServlet.java小程序来获取用户列表。
需要知道的就是:
你后端需要执行哪个java小程序,是由前端浏览器发送的请求路径是什么。一个路径代表一个servlet程序。
对于一个动态的web应用来说,一个请求和响应的过程需要多少个角色去参与,角色和角色之间有多少个协议。
在整个BS的系统中,有多少个角色?
浏览器软件的开发商(谷歌,火狐,IE)
WebServer的开发团队(Tomcat,JBoss)
DB Server:Mysql,Oracle
接下来就是webapp项目的开发。这个是作为javaweb程序员来写的。
所以:我们在写这个web应用的时候,不止是能在Tomcat里面部署。
所以,大家必须要解耦合。
大家都要遵循一个规则,规则就是接口,这个接口就是Servlet
Servlet规范的作用是:WebAPP和WebServer解耦合。
http协议:浏览器和WebServer服务器之间有传输协议-超文本传输协议。
JDBC规范:webapp开发团队与DB Server团队需要遵循的协议。
我们现在准备学习Servlet规范。
模拟Servlet的本质(只是模拟)
前提知识点:
1、浏览器和Tomcat服务之间需要遵循HTTP协议,这个协议是由W3School制定。
2、Tomcat服务器和我们编写web应用需要遵循servlet规范。这个是由sun公司编写。
3、我们编写的web应用里面需要和数据库进行交互(CRUD),需要遵循JDBC规范。
1、制定Servlet规范。
2、充当Tomcat服务器的开发者。
3、充当WebApp的开发者。
因为我们写的web app程序遵循servlet规范,所以我们的程序不仅可以部署在tomcat服务器上,还可以部署在其它服务器上。
1、首先我们是sun公司里面的一员,正在写规范。
写接口Servlet:
2、写一个java小程序去查询用户信息列表的。后期通过浏览器的访问对应的url才能查到对应的资源。
现在我们是充当web app的开发者去写一些小程序,这些小程序要实现sun公司编写的Servlet接口
例如:BankServlet接口,UserListServlet接口,
UserLoginServlet接口
编写BankServlet类:
编写UserListServlet.java
编写UserLoginServlet类
我们前面写的这几个xxxServlet的类都是继承了sun公司里面编写的Servlet规范。
我们是充当了web app的开发者去写了这几个xxxServlet类。
3、充当Tomcat服务器的开发者。
Tomcat服务器是使用纯java语言编写的。
实际上,只要启动Tomcat服务器,我i们就会接收来自浏览器端用户写上URL敲回车的访问。
编写Tomcat.class
实际情况就是:
用户在浏览器上输入不同的URL,它会调用不同的资源。如果是动态资源的话,它就会调用不同的Servlet程序。
那我们模拟Tomcat接收用户不同的请求就是通过用户输入不同的字符串,来调用不同的Servlet程序。
例如:
输入:/userList 调用UserListServlet
输入:/login 调用UserLoginServlet
输入:/bank 调用BankServlet
使用Scanner来模拟。
写到这里,我们先去编译一下:
首先编译Tomcat.java,但是他在包下org.apache下面。
使用命令
javac -encoding UTF-8 -d . Tomcat.java
编译之后,就会多出编译之后的文件来。
因为我们写的Tomcat.java的源代码在包org.apache里面。
执行这个编译好的类:
使用命令:
java org.apache.Tomcat
Tomcat.java:
这里模拟的就是到时候,用户在浏览器那里写的请求路径,请求路径写的不同,就会访问不同的XxxServlet.java
请求路径和Servlet应该是有一个对应关系的:
例如:
输入:/userList 调用UserListServlet
输入:/login 调用UserLoginServlet
输入:/bank 调用BankServlet
那么指定这个请求路径和哪个具体的Servlet的映射关系是由我们自己(WebApp的开发者)来制定的。
问:我们如何指定?
1、配置文件:描述对照关系。
所以我们准备写一个配置文件先把这些映射关系给存储起来,后续,Tomcat服务器启动的时候,需要先去解析这个配置文件。
/userList=com.rtl.servlet.UserListServlet
/login=com.rtl.servlet.UserLoginServlet
/bank=com.rtl.servlet.BankServlet
2、配置文件写好之后,继续写Tomcat.class,在启动的时候,需要对它进行解析。(IO流)
//这里就是Tomcat模拟解析配置文件里面请求路径和xxxServlet的映射关系。
FileReader reader = new FileReader("web.properties");
Properties pro = new Properties();
pro.load(reader);
reader.close();
3、解析之后,我们可以根据前面用户输入的请求路径,再结合这个解析配置文件之后得到的Properties对象,就知道对应的具体待执行的Servlet类了,但是对于Tomcat开发商来说不知道具体的,但是它知道你一定实现了Servlet接口。
//根据用户的请求路径来获取value值,就是具体的Servlet的类名
String className = pro.get(path);
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
//拿到这个obj之后,Tomcat服务器的开发者是不知道具体是哪个Servlet的,但是它一定知道这个具体的Servlet的类
//实现了接口Servlet,所以,我们可以把这个得到的obj强转成Servlet类。
Servlet servlet = (Servlet) obj;
servlet.service();
非常重要的Tomcat.java完整版:
package org.apache;
import javax.rtl.servlet;
import java.io.FileReader;
import java.util.Properties;
import java.util.Scanner;
public class Tomcat{
public static void main(String[] args) throws Exception{
System.out.println("Tomcat服务器启动成功!开始接收用户的访问。");
System.out.println("请输入您的访问路径:");
Scanner s = new Scanner(System.in);
//接收用户输入的请求路径
String path = s.nextLine();
//这里就是Tomcat模拟解析配置文件里面请求路径和xxxServlet的映射关系。
FileReader reader = new FileReader("web.properties");
Properties pro = new Properties();
pro.load(reader);
reader.close();
//根据用户的请求路径来获取value值,就是具体的Servlet的类名
String className = pro.get(path);
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
//拿到这个obj之后,Tomcat服务器的开发者是不知道具体是哪个Servlet的,但是它一定知道这个具体的Servlet的类
//实现了接口Servlet,所以,我们可以把这个得到的obj强转成Servlet类。
Servlet servlet = (Servlet) obj;
servlet.service();
}
}
现在开始i运行程序:
我们先编译所有的java文件:
javac -encoding UTF-8 -d . *.java
编译好程序之后,现在开始运行程序:
先是启动Tomcat服务器:
java org.apache.Tomcat
启动Tomcat之后,就等待我们输入请求路径了。
输入请求路径之后,会执行对应的Servlet方法。
更多推荐
所有评论(0)