Servlet笔记2--模拟Servlet本质、第一个Servlet程序、将响应结果输出到浏览器中
以下代码均非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程序、将响应结果输出到浏览器中的更多相关文章
- Servlet+JSP(三):第一个Web程序
Servlet+JSP(三):第一个Web程序在学习了服务器并成功安装后,我们知道当浏览器发送请求给服务器后,服务器会调用并执行对应的逻辑代码进行请求处理.逻辑代 码是由程序员自己编写然后放进服务器进 ...
- Java连接MySQL数据库。编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计。
题目2:编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计.之后,可根据显示的内容进行某条记录的删除(以id为条 ...
- 编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容
题目1:编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容--"chen","wang",&q ...
- 【Spring学习笔记-2】Myeclipse下第一个Spring程序-通过ClassPathXmlApplicationContext加载配置文件
*.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...
- Java笔记2:Eclipse编写第一个Java程序
1 下载并安装jdk 2 下载较新版本的eclipse,eclipse都是非安装版的,解压缩即可. 3 双击eclipse.exe,打开elipse软件 4 FileàNewàProject 5 选择 ...
- 在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口
#define ProcessBasicInformation 0 typedef struct { DWORD ExitStatus; DWORD PebBaseAddress; DWORD Aff ...
- [原创]java WEB学习笔记04:Servlet 简介及第一个Servlet程序(配置注册servlet,生命周期)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat
Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...
- Servlet入门总结及第一个Servlet程序
目录 一了解Servlet的概念 二Servlet技术功能 三 Servlet技术特点 四 Servlet生命周期 五servlet工作过程 六 Servlet与JSP区别 七Servlet代码结构 ...
随机推荐
- Java代码中谁拿到了锁?
我们都知道当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁.这些基础也许大家都知道,但是很多人还是搞不清哪个对象才是锁?如果你能正确回答以下问题,那么才算你彻底搞明白了哪个 ...
- 跳转不同包时候 需要先指定该包的namespace 注意 先跳转 即加上/
- C#:文件/注册表/线程的操作
文件的操作:(file与fileinfo,前者是静态方法,执行安全检查,适合对一个的操作) 1.1.create: using System; using System.Collections.Gen ...
- nginx支持.htaccess文件实现伪静态的方法
方法如下: 1. 在需要使用.htaccess文件的目录下新建一个.htaccess文件, vim /var/www/html/.htaccess 2. 在里面输入规则,我这里输入Discuz的伪静态 ...
- CF1088F Ehab and a weird weight formula 贪心 倍增
CF1088F Ehab and a weird weight formula 题意 给定一棵树,点有点权,其中这棵树满足除了权值最小的点外,每个点至少有一个点权小于它的相邻点. 要求你重新构建这棵树 ...
- view的阴影效果shadowColor
btn.layer.shadowColor = UIColor.blackColor().CGColor btn.layer.shadowOffset = CGSizeMake(5, 5) btn.l ...
- 【转】64位Ubuntu 16.04搭建嵌入式交叉编译环境arm-linux-gcc过程图解
64位Ubuntu 16.04搭建嵌入式交叉编译环境arm-linux-gcc过程图解,开发裸机环境之前需要先搭建其开发环境,毕竟工欲善其事必先利其器嘛. 安装步骤 1.准备工具安装目录 下载 ar ...
- 洛谷 P1446 [HNOI2008]Cards 解题报告
P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...
- 从function的定义看JavaScript的预加载
在JavaScript中定义一个函数,有两种写法: function ftn(){} // 第一种 var ftn = function(){} // 第二种 有人说,这两种写法是完全等价的.但是在解 ...
- Redis学习基础二
回顾:上一基础中已了解 ( 什么是redis .redis 的三大特点.安装,和数据配置) 接下来浅尝Redis的数据类型,时间煮雨...... 一.Redis数据类型 redis支持五中数据类型(s ...