servlet介绍

Servlet看起来像是通常的Java程序。它是JSP的前身,在MVC架构中担任Controller的角色,即控制层。主要进行数据的处理操作和流程的控制,并将有关结果存储到JavaBean中,然后servlet使用请求转发或重定向的方式请求视图中的摸个JSP页面更新显示。

servlet主要用在处理用户请求,获取用户请求的参数,对其处理后,按不同的情况向用户返回不同的JSP视图页面。它的核心价值是进行流程控制。应尽量避免servlet中使用out流输入大量的HTML标记来显示数据,因为这是JSP页面的职责。

servle框架

Servlet的框架是由两个Java包组成:

–javax.servlet包:定义了所有的Servlet类都必须实现或扩展的通用接口和类。

–javax.servlet.http包:定义了采用HTTP协议通信的HttpServlet类。

Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。在Servlet接口中定义了五个方法,其中有三个方法代表了Servlet的生命周期:

–init方法:负责初始化Servlet对象;

在Servlet的生命期中,仅执行一次init()方法。它是在服务器装入Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问Servlet 时装入Servlet。 无论有多少客户机访问Servlet,都不会重复执行init()。

–service方法:负责响应客户的请求;

Service()方法是Servlet程序的入口点,当用户从浏览器调用Servlet时,Servlet将进入该方法。service()包含两个参数,HttpServletRequest对象包含了客户端请求的信息,可以通过该参数取得客户端的一些信息(例如IP地址、浏览器类型等)以及HTTP请求类型(例如GET、HEAD、POST、PUT等);HttpServletResponse对象用于完成Servlet与客户端的交互,通过调用HttpServletResponse. getOutputStream()客户取得向客户端进行输出的输出流,向客户端发送HTML页面。

在HttpServlet的service方法中,首先从HttpServletRequest对象中获取HTTP请求方式的信息,然后再根据请求方式调用相应的方法。例如:如果请求方式为GET,那么调用doGet方法;如果请求方式为POST,那么调用doPost方法。

如果你的Servlet类继承了HttpServlet类,你通常不必实现service方法,因为HttpServlet类已经实现了service方法。

–destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源。

destroy() 方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。典型的,将Servlet 作为服务器进程的一部分来关闭。

servlet小例子-计算器

1.视图(JSP页面)

用于与用户交互,提交用户请求。

calculation.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h2>请输入表达式</h2>
<br>
<form action="<%=request.getContextPath() %>/CalculatorHandler" method="post">
<input type="text" name="expression"> <input type="submit" value="提交">
</form>
</body>
</html>

显示处理结果

calculationResult.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h2>计算结果为:</h2>
<br>
<jsp:useBean id="calculator" type="com.kl.bean.Calculator"
scope="request"></jsp:useBean>
<jsp:getProperty property="one" name="calculator" />
<jsp:getProperty property="operator" name="calculator" />
<jsp:getProperty property="two" name="calculator" />
=
<jsp:getProperty property="result" name="calculator" />
</body>
</html>

2.模型(JavaBean)

用于存储数据的对象,主要提供简单的setter和getter方法,不涉及对数据的处理细节。

Calculator.java

package com.kl.bean;

public class Calculator {
String operator;
double one,two,result;
public String getOperator() {
return operator;
}
public Calculator() {
super();
}
public Calculator(String operator, double one, double two, double result) {
super();
this.operator = operator;
this.one = one;
this.two = two;
this.result = result;
}
public void setOperator(String operator) {
this.operator = operator;
}
public double getOne() {
return one;
}
public void setOne(double one) {
this.one = one;
}
public double getTwo() {
return two;
}
public void setTwo(double two) {
this.two = two;
}
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
} }

3.控制器(servlet)

获取用户的请求,解析四则运算表达式,并计算结果。然后将请求转发给结果页面。

CalculatorHandler.java

package com.kl.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.kl.bean.Calculator; public class CalculatorHandler extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String expression=request.getParameter("expression");//获取用户请求参数
double one=0;
double two=0;
String operator="";
System.out.println(expression);
//解析四则运算表达式
for(String s:operatorArr()){
if(expression.contains(s)){
one=Double.parseDouble(expression.split("\\"+s)[0]);
two=Double.parseDouble(expression.split("\\"+s)[1]);
operator=s;
System.out.println(one+"\t"+two+"\t"+operator);
break;
}
}
//创建JavaBean存储数据
Calculator calculator=new Calculator(operator,one,two,
arithmetic(one, two, operator));
//将所创建的JavaBean对象存放在request对象中,并制定JavaBean的名字
request.setAttribute("calculator", calculator);
//将请求转发到结果页面
request.getRequestDispatcher("calculationResult.jsp").forward(request, response);
}
//四则运算方法
private double arithmetic(double one,double two,String operator){
double result = 0;
if(operator.equals("+")){
result=one+two;
}else if(operator.equals("-")){
result=one-two;
}else if(operator.equals("*")){
result=one*two;
}else if(operator.equals("/")){
result=one/two;
}
return result;
}
private String[] operatorArr(){
String[] arr={"+","-","*","/"};
return arr;
}
}

servlet清晰理解的更多相关文章

  1. 初识JAVA,对servlet的理解

    一.WEB开发的简单理解 Web开发是一个指代网页或站点编写过程的广义术语.网页使用 HTML.CSS 和 JavaScript编写.这些页面可能是类似于文档的简单文本和图形.页面也能够是交互式的,或 ...

  2. Servlet的理解

    一.什么是Servlet? Servlet是用Java编写的web组件,实际上可以简单的理解为是用来处理请求的,为什么这么说,看了它的生命周期就知道了. 二.常见的Servlet容器 4容器顾名思义是 ...

  3. 异步Servlet的理解与实践

    AsyncContext理解 Servlet 3.0(JSR315)定义了Servlet/Filter的异步特性规范. 怎么理解"异步Servlet/Filter"及其使用情景? ...

  4. Servlet过滤器理解

    from:http://blog.csdn.net/microtong/article/details/5007170 过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修 ...

  5. 深透清晰理解Java高并发概述

    1.多线程安全性 多线程安全性的定义可能众说纷纭,但是其最核心的一点就是正确性,也就是程序的行为结果和预期一致. 当多个线程访问某个类时,不管运行环境采用何种线程调度算法或者这些线程如何交替执行,且不 ...

  6. servlet详细理解

    生命周期 编辑 客户端请求该 Servlet: 加载 Servlet 类到内存: 实例化并调用init()方法初始化该 Servlet: service()(根据请求方法不同调用doGet() 或者 ...

  7. cameralink---格式 概要清晰理解

    DS90CR288 和DS90CR286共同组成LVDS收发对, LVDS: 4对数据+1对时钟 TTL: 时钟线1:clk 并行总线共27根: 同步线2:一根场同步,一根行同步 空闲: 1 数据线2 ...

  8. 清晰理解redux中的

    首先需要明白 Redux 的单一状态树的概念,所谓的单一状态树,就是指“所有的 state 都以一个对象树的形式储存在一个单一的 store 中.” 比如我们有这么一个状态树(或者你叫它状态对象也行) ...

  9. 简单的学生选课系统——基于Servlet+Ajax

    以前挖的坑,早晚要往里掉.基础太薄弱,要恶补.在此程序前,我还对Servlet没有一个清晰的概念:一周时间写好此程序之后,对Servlet的理解清晰许多. 这周一直在恶补Spring,今天正好完成了S ...

随机推荐

  1. 关于js效果不提示就执行了刷新(解决 在h-ui框架中)

    parent.layer.msg('保存成功!<script>setTimeout("window.location.reload();",1100);<\/sc ...

  2. A transition animation compatible Library.

    Android5.0之后为我们提供了许多炫酷的界面过渡效果,其中共享元素过渡也是很有亮点的一个效果,但这个效果只能在Android5.0之后使用,那今天我们就来将共享元素过渡效果兼容到Android4 ...

  3. linux用户管理,linux用户口令管理,linux用户组管理,linux用户权限管理详解

    linux用户管理 http://www.qq210.com/shoutu/android 用户账号的添加(新加用户需添加用户口令) :增加用户账号就是在/etc/passwd文件中为新用户增加一条记 ...

  4. 安装python-MySQLdb 出现error: command 'gcc' failed with exit status 1的解决方法

    >>> yum install MySQL-p* >>>yum install python-devel >>>cd MySQL-python-1 ...

  5. JS获取终端屏幕、浏览窗口的相关信息

    查看终端屏幕相关信息,在windows系统的控制面板可以查到分辨率且可以设置,更具体的浏览器可视窗口等信息则需要借助其他工具.而在程序里需要动态获取时该怎么做呢? 琢磨的一个js方法,供大家参考.如下 ...

  6. LightOj_1027 A Dangerous Maze

    题目链接 题意: 你在一个迷宫里, 开始的时候你面前有n个门, 选择每个门的概率相等, 有两种结果: 1)回到|x|分钟之前(x为负时) 2)x分钟之后出迷宫(x为正时) 每次回到|x|分钟之前, 你 ...

  7. Children's Day

    hdu4706:http://acm.hdu.edu.cn/showproblem.php?pid=4706 题意:让你打出3--10的N,这个N是由连续的小写字母组成的. 题解:直接模拟啊,水题啊. ...

  8. 【HDU1538】A Puzzle for Pirates(经典的海盗问题)

    [题目] Description A bunch of pirates have gotten their hands on a hoard of gold pieces and wish to di ...

  9. Principles of Motion Sensing

    Principlesof Motion Sensing Various sensors capable of detecting motionin free space have been comme ...

  10. 8.WCF简化的 AJAX(*)

    开发步骤: 添加一个Web项目,在Web项目中新建“新建项”->"Web"->"启用了AJAX的WCF服务" 页面上拖放ScriptManager控 ...