servlet清晰理解
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清晰理解的更多相关文章
- 初识JAVA,对servlet的理解
一.WEB开发的简单理解 Web开发是一个指代网页或站点编写过程的广义术语.网页使用 HTML.CSS 和 JavaScript编写.这些页面可能是类似于文档的简单文本和图形.页面也能够是交互式的,或 ...
- Servlet的理解
一.什么是Servlet? Servlet是用Java编写的web组件,实际上可以简单的理解为是用来处理请求的,为什么这么说,看了它的生命周期就知道了. 二.常见的Servlet容器 4容器顾名思义是 ...
- 异步Servlet的理解与实践
AsyncContext理解 Servlet 3.0(JSR315)定义了Servlet/Filter的异步特性规范. 怎么理解"异步Servlet/Filter"及其使用情景? ...
- Servlet过滤器理解
from:http://blog.csdn.net/microtong/article/details/5007170 过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修 ...
- 深透清晰理解Java高并发概述
1.多线程安全性 多线程安全性的定义可能众说纷纭,但是其最核心的一点就是正确性,也就是程序的行为结果和预期一致. 当多个线程访问某个类时,不管运行环境采用何种线程调度算法或者这些线程如何交替执行,且不 ...
- servlet详细理解
生命周期 编辑 客户端请求该 Servlet: 加载 Servlet 类到内存: 实例化并调用init()方法初始化该 Servlet: service()(根据请求方法不同调用doGet() 或者 ...
- cameralink---格式 概要清晰理解
DS90CR288 和DS90CR286共同组成LVDS收发对, LVDS: 4对数据+1对时钟 TTL: 时钟线1:clk 并行总线共27根: 同步线2:一根场同步,一根行同步 空闲: 1 数据线2 ...
- 清晰理解redux中的
首先需要明白 Redux 的单一状态树的概念,所谓的单一状态树,就是指“所有的 state 都以一个对象树的形式储存在一个单一的 store 中.” 比如我们有这么一个状态树(或者你叫它状态对象也行) ...
- 简单的学生选课系统——基于Servlet+Ajax
以前挖的坑,早晚要往里掉.基础太薄弱,要恶补.在此程序前,我还对Servlet没有一个清晰的概念:一周时间写好此程序之后,对Servlet的理解清晰许多. 这周一直在恶补Spring,今天正好完成了S ...
随机推荐
- 关于js效果不提示就执行了刷新(解决 在h-ui框架中)
parent.layer.msg('保存成功!<script>setTimeout("window.location.reload();",1100);<\/sc ...
- A transition animation compatible Library.
Android5.0之后为我们提供了许多炫酷的界面过渡效果,其中共享元素过渡也是很有亮点的一个效果,但这个效果只能在Android5.0之后使用,那今天我们就来将共享元素过渡效果兼容到Android4 ...
- linux用户管理,linux用户口令管理,linux用户组管理,linux用户权限管理详解
linux用户管理 http://www.qq210.com/shoutu/android 用户账号的添加(新加用户需添加用户口令) :增加用户账号就是在/etc/passwd文件中为新用户增加一条记 ...
- 安装python-MySQLdb 出现error: command 'gcc' failed with exit status 1的解决方法
>>> yum install MySQL-p* >>>yum install python-devel >>>cd MySQL-python-1 ...
- JS获取终端屏幕、浏览窗口的相关信息
查看终端屏幕相关信息,在windows系统的控制面板可以查到分辨率且可以设置,更具体的浏览器可视窗口等信息则需要借助其他工具.而在程序里需要动态获取时该怎么做呢? 琢磨的一个js方法,供大家参考.如下 ...
- LightOj_1027 A Dangerous Maze
题目链接 题意: 你在一个迷宫里, 开始的时候你面前有n个门, 选择每个门的概率相等, 有两种结果: 1)回到|x|分钟之前(x为负时) 2)x分钟之后出迷宫(x为正时) 每次回到|x|分钟之前, 你 ...
- Children's Day
hdu4706:http://acm.hdu.edu.cn/showproblem.php?pid=4706 题意:让你打出3--10的N,这个N是由连续的小写字母组成的. 题解:直接模拟啊,水题啊. ...
- 【HDU1538】A Puzzle for Pirates(经典的海盗问题)
[题目] Description A bunch of pirates have gotten their hands on a hoard of gold pieces and wish to di ...
- Principles of Motion Sensing
Principlesof Motion Sensing Various sensors capable of detecting motionin free space have been comme ...
- 8.WCF简化的 AJAX(*)
开发步骤: 添加一个Web项目,在Web项目中新建“新建项”->"Web"->"启用了AJAX的WCF服务" 页面上拖放ScriptManager控 ...