Javaweb学习(三):Servlet程序
好了,既然开发环境已经配置好了。那么我们首先要搞定得便是servlet了,至于为什么不先去研究jsp,这是因为jsp与servlet本就是一体两面,jsp其本身经过编译、载入、转化等步骤最终会成为servlet(之后会专门来介绍这两个得关系)。所以我们首先学习servlet,如果servlet学习好了得话,那么在jsp中遇见得许多错误也会迎刃而解。那么,一起来研究下servlet把。
一、CGI
CGI即公共网关接口,它提供一个计算机程序同HTTP协议或者WWW服务的接口,也就是人机交互接口,其功能主要是处理来自表单得信息,然后在服务器再进行处理,最后反馈给浏览器。(只做简单了解)
二、Servlet
servlet又叫做服务端小程序,是在服务器上运行得小程序,它的主要功能是能够动态获得和修改数据,从而生成动态得web内容。其运行速度要比上述得CGI程序要快,主要原因是因为各个用户对servlet得请求会被创建为程序中得一个线程,从而降低了系统得开销。
1.servlet程序
先来写第一个servlet程序把,根据程序我们来探索其内部原理:
①首先选择File—new—web project—输入我们网站项目得名称—finish即可创建一个web项目。

②创建包:右键src—new—Package—输入包名(如cc.study)

③创建Servlet:右键包—new—Servlet—输入servlet程序名称

④创建成功显示

⑤创建html 表单并对servlet进行访问获取结果
修改web.xml中MainServlet得访问路径
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd" metadata-complete="true">
<display-name></display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>MainServlet</servlet-name>
<servlet-class>cc.study.MainServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/main.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
index.html代码:
<!DOCTYPE html>
<html>
<head>
<title>index.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="main.do" method="get">
姓名:<input type="text" name="name">
<button>确认</button>
</form>
</body>
</html>
Servlet对doGet进行重写
package cc.study; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
*
* 项目名称:Boke
* 类名称:MainServlet
* 类描述: 对form表单提交姓名进行动态响应
* 创建人:墨染、
* 创建时间:2017-11-27 下午3:57:26
* 修改人:墨染、
* 修改时间:2017-11-27 下午3:57:26
* 修改备注:
* @version
*
*/
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
PrintWriter out = resp.getWriter();
if (name != "") {
if (name.equals("zhangsan")) {
out.write("");
} else {
out.write("false");
}
} else {
out.write("name is null");
}
out.flush();
out.close();
}
}
获得结果如下显示:
输入zhangsan结果:
输入a结果: 
不进行输入结果:
2.servlet实现过程
①浏览器向服务器发送请求
②服务器接收到请求并将改请求发送到服务端程序并判断由哪一个servlet进行处理
③servlet根据请求内容进行处理,(可能会操作数据库,也可能只返回某些数据)
④将数据返回给服务器,服务器再反馈给浏览器进行动态显示。
3.Servlet生命周期
一个Servlet程序得整个生命周期是由创建——销毁得。其主要得体现方法为:创建init(),处理请求Service(),销毁destroy()。
①init方法和destroy方法在整个生命周期中只运行一次
当只用init方法时:
public class MainServlet extends HttpServlet {
private String flag="";
@Override
public void init(ServletConfig config) throws ServletException {
flag="init start";
}
// @Override
// public void destroy() {
// flag="destory stop";
// }
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
PrintWriter out = resp.getWriter();
out.println(flag);
out.flush();
out.close();
}
}
获得结果为init start,即说明init方法在servlet进程创建得时候运行了,给flag赋值为init start。
当用init和destroy时,可以看到init方法是在开始不用调用执行,而destroy方法则是需要在doget方法内对其进行调用来处理,一般是用来结束数据库连接,或者保存文件使用。
public class MainServlet extends HttpServlet {
private String flag="";
@Override
public void init(ServletConfig config) throws ServletException {
flag="init start";
}
@Override
public void destroy() {
System.out.println("destory被调用了");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
PrintWriter out = resp.getWriter();
out.println(flag);
out.flush();
out.close();
destroy();
}
}
②service方法是整个servlet中最主要得执行方法,下面是父类中httpServlet得service代码,根据重写方法来启动线程对程序进行处理。
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String method = req.getMethod(); if (method.equals("GET")) {
long lastModified = getLastModified(req);
if (lastModified == -1L)
{
doGet(req, resp);
} else {
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader("If-Modified-Since");
}
catch (IllegalArgumentException iae) {
ifModifiedSince = -1L;
}
if (ifModifiedSince < lastModified / 1000L * 1000L)
{
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus();
}
}
}
else if (method.equals("HEAD")) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
}
else if (method.equals("POST")) {
doPost(req, resp);
}
else if (method.equals("PUT")) {
doPut(req, resp);
}
else if (method.equals("DELETE")) {
doDelete(req, resp);
}
else if (method.equals("OPTIONS")) {
doOptions(req, resp);
}
else if (method.equals("TRACE")) {
doTrace(req, resp);
}
else
{
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[];
errArgs[] = method;
errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(, errMsg);
}
}
本文旨在帮助大家理解什么servlet以及servlet在生产流程中担任得角色,希望大家能够通过此文对此有一个直观得认识,当然,文中可能有些地方也可能会有措辞不当或者理解不充分得地方,如果大家有所发现,希望在评论处给于指正。:-D
Javaweb学习(三):Servlet程序的更多相关文章
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- (转)JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- JavaWeb学习——了解Servlet
JavaWeb学习——了解Servlet 摘要:本文主要学习了什么是Servlet,以及如何使用Servlet进行开发. 基础知识 背景 随着互联网技术的发展,基于HTTP和HTML的web应用急速增 ...
- JavaWeb学习之Servlet(三)----Servlet的映射匹配问题、线程安全问题
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140529.html 一.Servlet映射匹配问题: 在第一篇文章中的 ...
- (转)JavaWeb学习之Servlet(三)----Servlet的映射匹配问题、线程安全问题
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140529.html 一.Servlet映射匹配问题: 在第一篇文章中的 ...
- javaweb学习之Servlet开发(二)
javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...
- JavaWeb学习 (六)————Servlet(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
- javaweb学习总结 servlet开发(一)
转载:http://www.cnblogs.com/xdp-gacl/p/3760336.html 这里主要是将其加入自己的理解过一遍. 这里的代码全在eclipse java ee中执行的. 一.s ...
- JavaWeb学习 (五)————Servlet(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
随机推荐
- logstash与kafka消息传输<一>
1.版本: logstash6.1.2.kafka-0.11.kafka-0.8.2.java1.8 Note: Logstash requires Java 8. Java 9 is not sup ...
- 白话$resource,$resource中的增删改查
前言 $resource详解,在学习angular的过程中,我们已经知道,$http能十分便捷的为我们实现与后端的数据交互,格式如下: $http({method:'GET'},url:'XX').t ...
- python模块之xlrd
python处理excel的模块,xlrd读取excel,xlwt写入excel 一.安装 pip install xlrd 二.使用 1. 打开excel,得到Book对象 import xlrd ...
- vs2013 在win7下,使用c++创建项目各种报错问题解决方案
错误1:提示缺少mfc100ud.dll 错误2:win7 vs2013 mfc程序找不到sdkddkver.h 错误3:error LNK1158: 无法运行“rc.exe” 等等; 在网上搜了好久 ...
- weex stream 之fetch的get、post获取Json数据
无论何种平台,网络数据的获取都是十分重要的,最近学习weex,不可避免的要学习weex的数据请求方法了.网址 个人感觉,weex stream相较于其他平台,还算比较简单了,但是由于文档以及官方代码中 ...
- IDEA中上传项目到GIt
一.先创建一个git仓库 二.然后在右键项目pull 三.add 最后提交: 完成
- 四种简单的sql语句(增删改查语句)
四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...
- CSS笔记——属性选择器
1.存在和值(Presence and value)属性选择器这些属性选择器尝试匹配精确的属性值:[attr]:该选择器选择包含 attr 属性的所有元素,不论 attr 的值为何.[attr=val ...
- DNS协议详解
DNS协议详解 简介 DNS(Domain Name System)域名系统,主要实现的功能是将域名转换成ip地址的一个服务.它是由一个分层的DNS服务器实现的分布式数据库,同时.他也是一个使得主机能 ...
- element-ui Steps步骤条组件源码分析整理笔记(九)
Steps步骤条组件源码: steps.vue <template> <!--设置 simple 可应用简洁风格,该条件下 align-center / description / ...