• 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+"	"+two+"	"+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;
        }
    }
    
    
  • 相关阅读:
    hadoop使用FAQ
    kerberos在rehl6和7不兼容问题
    zookeeper使用场景
    临时记录
    SecureCRT远程工具
    jdk 环境安装
    等效
    lnmp安装及nagios
    svn的安装使用
    用户在乎的事
  • 原文地址:https://www.cnblogs.com/klguang/p/4748922.html
Copyright © 2020-2023  润新知