以下代码均非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. 第215天:Angular---指令

    指令(Directive) AngularJS 有一套完整的.可扩展的.用来帮助 Web 应用开发的指令集 在 DOM 编译期间,和 HTML 关联着的指令会被检测到,并且被执行 在 AngularJ ...

  2. 在CentOS中安装与配置SVN的方法

    安装说明系统环境:CentOS-6.4安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 1.检查已安装版本 #检查是否安装了低版本的SVN[root ...

  3. opencv图片转幻灯片视频

    /*g++ *.cpp `pkg-config --cflags --libs opencv` -std=c++11*/ #include <opencv2/opencv.hpp> usi ...

  4. 【BZOJ3064】CPU监控(线段树)

    [BZOJ3064]CPU监控(线段树) 题面 BZOJ 洛谷 题解 神仙\(zsy\)出在了\(noip\)模拟的题目.(然而\(zsy\)出的还是这题的升级版) 首先明确一点,这题是一个吉司机线段 ...

  5. 洛谷 P1341 无序字母对 解题报告

    P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...

  6. linux内核分析综合总结

    linux内核分析综合总结 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 ...

  7. bzoj 3853 : GCD Array

    搬运题解Claris:1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$ $\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=& ...

  8. codeforces contest 1111

    A. Superhero Transformation 题意: 元音和元音,辅音和辅音字母之间可以互相转换,问两个字符串是否想同: 题解:直接判断即可: #include<bits/stdc++ ...

  9. [SDOI2009] HH去散步 (矩阵乘法)

    link $solution:$ 将边化为点后重新建矩阵,跑$T-1$幂即可(因为跑的是新边). 最后直接找与$x,y$所相连的边即可. #include<iostream> #inclu ...

  10. pycharm配置总结

    1. 快捷键 格式化代码:Ctrl + Alt + L 2. A scheme with this name already exists or was deleted without applyin ...