以下代码均非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. redis压力测试工具-----redis-benchmark

    redis做压测可以用自带的redis-benchmark工具,使用简单 压测命令:redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 10000 压测需要一段 ...

  2. 图片上传预览,兼容IE

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. BZOJ5006 THUWC2017随机二分图(概率期望+状压dp)

    下称0类为单边,1类为互生边,2类为互斥边.对于一种匹配方案,考虑其出现的概率*2n后对答案的贡献,初始为1,如果有互斥边显然变为0,否则每有一对互生边其贡献*2.于是有一个显然的dp,即设f[S1] ...

  4. ava8并发教程:Threads和Executors

    原文地址  原文作者:Benjamin Winterberg 译者:张坤 欢迎阅读我的Java8并发教程的第一部分.这份指南将会以简单易懂的代码示例来教给你如何在Java8中进行并发编程.这是一系列教 ...

  5. pragma指令详解(转载)

    #pragma comment( comment-type [,"commentstring"] ) 该宏放置一个注释到对象文件或者可执行文件.comment-type是一个预定义 ...

  6. BZOJ2802 [Poi2012]Warehouse Store 【贪心】

    题目链接 BZOJ2802 题解 这样的问题通常逆序贪心 每个\(A[i]\)只能用来满足后面的\(B[i]\) 就用当前\(A[i]\)不断提供给最小的\(B[i]\)即可 用一个堆维护 #incl ...

  7. 【bzoj4541】 Hnoi2016—矿区

    http://www.lydsy.com/JudgeOnline/problem.php?id=4541 (题目链接) 题意 给出一个平面图,若干询问,每次询问一个凸多边形内小多边形面积的平方和与面积 ...

  8. 【线段树分治】【P5227】 [AHOI2013]连通图

    Description 给定一个无向连通图和若干个小集合,每个小集合包含一些边,对于每个集合,你需要确定将集合中的边删掉后改图是否保持联通.集合间的询问相互独立 定义一个图为联通的当且仅当对于任意的两 ...

  9. MVC4.0中cshtml中怎么解析html编码

    http://bbs.csdn.net/topics/391060108?page=1 问题描述: 数据库中存储带有格式的文本,如 <span style="color:#333333 ...

  10. D. Mahmoud and Ehab and the binary string Codeforces Round #435 (Div. 2)

    http://codeforces.com/contest/862/problem/D 交互题 fflush(stdout) 调试: 先行给出结果,函数代替输入 #include <cstdio ...