HelloServlet类继承HttpServlet利用HttpServletResponse对象

HelloServlet类的doGet()方法先得到username请求参数,对其进行中文字符编码转换,然后判断username是否为空,如果为空就返回403响应状态代码,否则就通过HttpServletResponse对象的getWriter()方法得到一个PrinterWriter对象,然后通过PrintWriter对象来输出HTML文档

HelloServlet.java


package com.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/* Created by 谭雪娇 on 2017/4/5.
 */
public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException,IOException{
        //获得sername的请求参数
        String username=request.getParameter("username");
        /*字符编码转换
        * HTTP请求的默认字符编码为ISO-8859-1,如果请求中包含中文需要把它转换为GB2312中文编码。*/
        if(username!=null){
            username=new String(username.getBytes("ISO-8859-1"),"UTF-8");
            if(username==null){
                response.sendError(response.SC_FORBIDDEN);
                return;
            }
            //设置HTTP响应的正文的MIME类型及字符编码
            response.setContentType("text/html;charset=UTF-8");
            /*输出HTML文档*/
            PrintWriter out=response.getWriter();
            out.println("<html><head><title>HelloServlet</title><head>");
            out.println("<body>");
            out.println("你好:"+username);
            out.println("</body></html>");
            System.out.println("before close():"+response.isCommitted());
            out.close();
            System.out.println("before close():"+response.isCommitted());
        }
    }
}

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
        <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>com.demo.servlet.RequestInfoServlet</servlet-class>

</servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/info</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>dispatcher1</servlet-name>
        <servlet-class>com.demo.servlet.HelloServlet</servlet-class>
    </servlet>
   <servlet-mapping>
       <servlet-name>dispatcher1</servlet-name>
       <url-pattern>/hello</url-pattern>
   </servlet-mapping>
</web-app>

运行结果

Tomcat所在控制台结果

浏览器结果:

原文地址:https://www.cnblogs.com/sinceForever/p/8454376.html

时间: 2024-11-13 09:14:21

HelloServlet类继承HttpServlet利用HttpServletResponse对象的相关文章

【C++】通过基类的指针变量访问派生类中由基类继承来的隐藏对象

//<img src="http://img.blog.csdn.net/20150512213309005?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG91ZG91d2ExMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> // 可以将一个派生类的对象的地址赋给其基类的指针变量,但

前端form标签发送post请求,服务器用Java类继承HttpServlet,并返回数据

1.form表单提交: <form action="http://localhost:8080/test/Login" method="post"> 用户:<input type="text" name="username"/><br/> 密码:<input type="password" name="password"/><br/&

(C++)C++类继承中的构造函数和析构函数

思想: 在C++的类继承中, 建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推: 析构对象时,其顺序正好与构造相反: 例子: #include <iostream> using namespace std; class Shape{ public: void Draw() {cout<<"Base::Draw()"<<endl;} void Erase() {cout<<"Base::Erase()

C++ 类继承的对象布局

C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表.成员声明先后顺序排列).该类情况为子类按照继承顺序排列,如class C:public B,public A此种情况布局如下: 如果class B,A带有虚函数,情况又发生了变化: 考虑下面的情况: class D { int d; public: virtual void fun() {} virtual ~D() {} }; class E { publ

理解组合对象与类继承

1.概念解析 继承:"继承"是面向对象编程中的一个概念. 面向对象编程的单一职责原理(SPR-Single Responsibility Principle)规定对象只能有一个职责.就一个类而言,应该仅有一个引起它变化的原因. 为什么要把不同的职责分配到不同的类中呢?因为每一个职责都是变化的一个轴线,当需求变化时,该变化会反映为类的职责的变化.如果一个类承担了多于一个的职责,那么就意味着引起它的变化的原因会有多个.如果一个类承担的职责过多,那么就等同于把这些职责耦合在了一起.一个职责的

C++ 类继承与对象赋值 情况下 成员变量的覆盖 浅析

[摘要] 类的继承以及对象的赋值会带来成员变量的相互传递.这里详细讨论了,类间继承带来的成员变量的传递采用覆盖原则,采用函数级的成员变量的取值:对象赋值带来的成员变量的传递采用,实函数采用数据类型的实函数,虚函数采用赋值源的虚函数,成员变量采用赋值源的成员变量,其实也是函数级的成员变量. [正文] 在类继承中,成员变量存在覆盖的情况,成员函数则存在隐藏和覆盖以及重载的情况.在类继承中,公有继承会导致公有成员变量的覆盖,从而使得成员函数的调用出现各种结果. [代码示例 01] #include<i

【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承. 类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply实现对象冒充,把类型定义的东西都复制过来,这样的继承子类与父类并没有多少关联,不互相影响,有利于保护自身的一些私有属性. 原型继承:每个函数都有自己的原型(prototype)属性,这个属性是在生成实例对象时自动创建的.它本身又是一个对象,拥有能够在实例间共享的属性和方法.而实例本身的属性和方法,则

BaseServlet 继承 httpServlet

BaseServlet   核心 1 package cn.core; 2 3 import java.io.IOException; 4 import java.lang.reflect.Method; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.

C++类继承中内存的布局

1 前言       了解你所使用的编程语言究竟是如何实现的,对于C++程序员可能特别有意义.首先,它可以去除我们对于所使用语言的神秘感,使我们不至于对于编译器干的活感到完全不可思议:尤其重要的是,它使我们在Debug和使用语言高级特性的时候,有更多的把握.当需要提高代码效率的时候,这些知识也能够很好地帮助我们. 本文着重回答这样一些问题: 1* 类如何布局? 2* 成员变量如何访问? 3* 成员函数如何访问? 4* 所谓的"调整块"(adjuster thunk)是怎么回事? 5*