以下代码均非IDE开发,所以都不规范,仅供参考

模拟Servlet本质:

  模拟Servlet接口:

 /*
SUN公司制定的JavaEE规范:Servlet规范
Servlet接口是Servlet规范中核心接口
接口注意:调用者谁?实现者谁?
*/ public interface Servlet //服务器端小java程序不能随意编写,必须实现Servlet接口
{
/*
服务器端的小java程序必须将service方法实现
*/
void service();
}

  服务器端小java程序(即Servlet接口的实现类):

 /*
JavaWeb程序员编写服务器端小java程序的时候,不能随意编写,必须实现Servlert接口
*/
public class LoginServlet implements Servlet
{
public void service(){
System.out.println("连接数据库,正在验证用户名和密码。。。。");
}
}
 /*
JavaWeb程序员编写服务器端小java程序的时候,不能随意编写,必须实现Servlert接口
*/
public class SaveServlet implements Servlet
{
public void service(){
System.out.println("连接数据库,正在保存数据请稍后。。。。");
}
}
 /*
JavaWeb程序员编写服务器端小java程序的时候,不能随意编写,必须实现Servlert接口
*/
public class DeleteServlet implements Servlet
{
public void service(){
System.out.println("连接数据库,正在删除数据请稍后。。。。");
}
}

  模拟Tomcat容器:

 /*
Tomcat
WebServer
Web服务器
Web Container
Web 容器 Web容器面向Servlert接口调用
*/
import java.util.Scanner;
import java.util.Properties;
import java.io.FileReader; public class Tomcat{
public static void main(String[] args) throws Exception{
Scanner s = new Scanner(System.in);
System.out.println("服务器启动成功"); while(true){
System.out.print("请打开浏览器,在浏览器地址栏上请输入请求路径:");
//程序执行到这里,等待用户输入
String requestPath = s.next();
//System.out.println("您访问的资源路径是:" + requestPath); //Tomcat读取web.xml文件
FileReader reader = new FileReader("web.xml");
Properties pro = new Properties();
pro.load(reader);
reader.close(); //通过key获取value
String servletClassName = pro.getProperty(requestPath); //通过反射机制创建对象
Class c = Class.forName(servletClassName);
Servlet servlet = (Servlet)c.newInstance(); //面向Servlet接口调用方法即可
servlet.service();
}
}
}

  模拟web.xml:

 /login=LoginServlet
/delete=DeleteServlet
/save=SaveServlet

  总结:Tomcat容器根据web.xml配置文件,调用Servlet接口的方法,自己编写的服务器小程序则具体实现Servlet接口的方法。

第一个Servlet程序:

  Servlet程序:

 import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException; public class HelloServlet implements Servlet{ public void init(ServletConfig config) throws ServletException{
//将信息打印到控制台(而不是浏览器)
System.out.println("Hello world!");
} public void service(ServletRequest request,ServletResponse response)
throws IOException,ServletException{ } public void destroy(){ } public String getServletInfo(){
return null;
} public ServletConfig getServletConfig(){
return null;
} }

  前端页面:

 <html>
<head>
<title>welcome page</title>
</head>
<body>
<!--为了更加的通用,URL路径中的IP地址,端口号可以省略-->
<!--以下网络资源路径还是一个绝对路径,目前必须以"/"开始-->
<a href="/FirstServletWebApp/hello">HelloServlet</a>
</body>
</html>

  web.xml:

 <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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_3_0.xsd"
version="3.0">
<!--这是一个合法的web.xml文件-->
<!--一个webapp只有一个web.xml文件-->
<!--web.xml文件主要配置请求路径和Servlet类名之间的绑定关系-->
<!--web.xml文件在Tomcat服务器启动阶段被解析-->
<!--web.xml文件解析失败,会导致webapp启动失败-->
<!--web.xml文件中的标签不能随意编写,因为Tomcat服务器早就知道文件中编写了哪些标签-->
<!--web.xml文件中的标签也是SUN公司制定的Servlet规范-->
<servlet>
<servlet-name>thisIsServletName</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>thisIsServletName</servlet-name>
<!--路径随意编写,但是必须以"/"开始-->
<!--这是一个虚拟路径,只是代表一个资源的名称-->
<url-pattern>/df/s/fs/f/sdf/s/f</url-pattern>
<!--可以编写多个url-pattern,但是路径需要以"/"开始-->
<url-pattern>/hello</url-pattern>
</servlet-mapping> </web-app>

  

将响应结果输出到浏览器中:

  Servlet程序:

 import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.PrintWriter; //标准输出流,不需要关闭 public class WelcomeServlet implements Servlet{
public void init(ServletConfig config) throws ServletException{ } public void service(ServletRequest request,ServletResponse response)
throws ServletException,IOException{
//解决响应的时候中文乱码问题
//设置响应的内容类型以及字符编码方式
//在获取响应流之前设置有效果
response.setContentType("text/html;charset=UTF-8"); //将信息输出到浏览器上
//将HTML字符串输出到浏览器上,浏览器解释执行
//获取输出流对象,流直接指向特定的浏览器客户端
PrintWriter out = response.getWriter(); //响应HTML代码到浏览器,并且在网页上体现换行
out.print("<html>");
out.print("<head>");
out.print("<title>welcome servlet</title>");
out.print("</head>");
out.print("<body>");
out.print("<h1 align=\"center\">welcome study servlet!</h1>");
out.print("hello");
out.print("<br>");
out.print("你好中国!");
out.print("</body>");
out.print("</html>");
} public void destroy(){ } public String getServletInfo(){
return null;
} public ServletConfig getServletConfig(){
return null;
}
}

  web.xml:

 <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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_3_0.xsd"
version="3.0"> <servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping> </web-app>

Servlet笔记2--模拟Servlet本质、第一个Servlet程序、将响应结果输出到浏览器中的更多相关文章

  1. Servlet+JSP(三):第一个Web程序

    Servlet+JSP(三):第一个Web程序在学习了服务器并成功安装后,我们知道当浏览器发送请求给服务器后,服务器会调用并执行对应的逻辑代码进行请求处理.逻辑代 码是由程序员自己编写然后放进服务器进 ...

  2. Java连接MySQL数据库。编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计。

    题目2:编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计.之后,可根据显示的内容进行某条记录的删除(以id为条 ...

  3. 编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容

    题目1:编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容--"chen","wang",&q ...

  4. 【Spring学习笔记-2】Myeclipse下第一个Spring程序-通过ClassPathXmlApplicationContext加载配置文件

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...

  5. Java笔记2:Eclipse编写第一个Java程序

    1 下载并安装jdk 2 下载较新版本的eclipse,eclipse都是非安装版的,解压缩即可. 3 双击eclipse.exe,打开elipse软件 4 FileàNewàProject 5 选择 ...

  6. 在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口

    #define ProcessBasicInformation 0 typedef struct { DWORD ExitStatus; DWORD PebBaseAddress; DWORD Aff ...

  7. [原创]java WEB学习笔记04:Servlet 简介及第一个Servlet程序(配置注册servlet,生命周期)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat

    Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...

  9. Servlet入门总结及第一个Servlet程序

    目录 一了解Servlet的概念 二Servlet技术功能 三 Servlet技术特点 四 Servlet生命周期 五servlet工作过程 六 Servlet与JSP区别 七Servlet代码结构 ...

随机推荐

  1. [转]跨平台开发:PhoneGap移动开发框架初探

    目前,随着Google的Android手机和苹果的iphone手机的逐渐普及,越来越多开发者加入到移动应用开发的大军当中.其中,Android应用是基于Java语言基础上进行开发的,而苹果公司的iph ...

  2. Visual Studio Code运行Python文件出现 “Linter pylint is not installed ”提示解决办法

    运行Python代码后出现 “Linter pylint is not installed ”提示 只需要添加一行代码就可以解决 { "python.pythonPath": &q ...

  3. Digits of Factorial LightOJ - 1045(数学题?)

    原文地址: https://blog.csdn.net/fenghoumilin/article/details/52293910 题意:求 n 的阶乘在 base 进制下的位数,这里有一个简单的方法 ...

  4. PPT高手博客

    让PPT设计NEW一NEW——Lonely Fish http://lonelyfish1920.blog.163.com/ http://blog.sina.com.cn/s/blog_698717 ...

  5. BZOJ5389 比例查询 【离线】

    题目链接 BZOJ5389 题解 太\(sb\)了,这种题都想不出来 发现复杂度允许\(n\sqrt{n}\),我们可以对于每个位置\(\sqrt{n}\)枚举约数,然后维护比例的最晚出现的位置,维护 ...

  6. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  7. 项目开发中git常用命令、git工作流、git分支模型

    #新建代码库git init # 在当前目录新建一个Git代码库git init [project-name] # 新建一个目录,将其初始化为Git代码库git clone [url] # 下载一个项 ...

  8. FPGA/SOPC学习转载

    转自小時不識月http://www.cnblogs.com/yuphone/archive/2010/08/27/docs_plan.html 新网址为:http://andrewz.cn [连载计划 ...

  9. 使用 swoole 加速你的 laravel

    在此前的另外一篇文章讨论过 opcache:php 性能优化之opcache - 让你的php性能提升 50% 再来复习一下吧,导致 php 慢的各种因素中解析性语言的特性可以说是罪魁祸首,再加上,每 ...

  10. springcloud之Hystrix

    1.Hystrix出现的背景 从上面看来,Hystrix避免了雪崩效益,对于失败的服务可以快速失败. 2.为了解决雪崩效应的解决方案: (1)超时机制 (2)断路器模式Hystrix 3.Hystri ...