Web---创建Servlet的3种方式、简单的用户注册功能(1)

简介: Web---创建Servlet的3种方式、简单的用户注册功能

说明:


创建Servlet的方式,在上篇博客中,已经用了方式1(实现Servlet接口),接下来本节讲的是另外2种方式。

上篇博客地址:http://blog.csdn.net/qq_26525215/article/details/51942252


简单的用户注册功能(我们设置了所以权限都是开放的),可以实现:

1、用户注册。

2、查询所有用户

3、删除某个用户


创建Servlet的方式二:继承 GenericServlet


SecondServlet.java:

package cn.hncu.servlet.day2;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
//以继承GenericServlet 的方式 写 servlet
public class SecondServlet extends GenericServlet{
    //一个小知识点!!!
    //适配器模式的一个知识点:适配器中的init(ServletConfig config)中帮我们把它当中的config对象赋值 且调用一个空参的init()。
    //我们以后应该覆盖空参的init()。因为如果覆盖了这个带参数的,那么就无法实现为它的config对象赋值,由此导致其中使用config对象(this.)的方法会出错。
其实这种方法(调用 一个空参的init()且 该参数方法中什么也没做 )也程序员之间的一种交流方式,告诉我们要覆盖空参的方法,这样它在帮我们做完事情会调用我们的覆盖方法
//  @Override
//  public void init(ServletConfig config) throws ServletException {
//      System.out.println(config);//这里不会出现问题,父类:init(ServletConfig config)中有这一句:this.config = config;
//      String charset = config.getInitParameter("charset");
//      System.out.println(charset);
//      System.out.println("init..."+this);
//  }
    @Override
    public void init() throws ServletException {
        System.out.println("init...."+this);
    }
    @Override
    public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException {
        //String charset = this.getInitParameter("charset");
        //如果本例写了init(ServletConfig config)方法,覆盖了父类的init(ServletConfig config)方法,这句会出异常
        //System.out.println(charset);
        String charset = this.getInitParameter("charset");
        System.out.println(charset);
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        System.out.println("name:"+name+",pwd:"+pwd);
    }
}


index.jsp:

<hr/>
        <h1>下面是本章节博客的内容</h1>
        <h2>演示servlet技术---第二种创建Servlet的方式(继承GenericServlet)</h2>
        <form action="/myServletDemo/second" method="post">
            访问SecondServlet<br/>
            姓名:<input type="text" name="name"/> <br/>
            密码:<input type="password" name="pwd"/><br/>
            <input type="submit" value="提交" />          
        </form>

web.xml:

<!-- 下面的是今天这节博客的 -->
  <servlet>
    <servlet-name>SecondServlet</servlet-name>
    <servlet-class>cn.hncu.servlet.day2.SecondServlet</servlet-class>
    <init-param>
        <param-name>charset</param-name>
        <param-value>utf-8</param-value>    
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SecondServlet</servlet-name>
    <url-pattern>/second</url-pattern>
  </servlet-mapping>


演示结果:

填写好姓名,密码后点击提交:

image.png

再看后台:

image.png

创建Servlet的方式三:继承HttpServlet

index.jsp:

    <h2>演示servlet技术---第三种Servlet的方式(继承HttpServlet)</h2>
        <form action="/myServletDemo/third" method="post">
            访问ThirdServlet<br/>
            姓名:<input type="text" name="name"><br/>
            密码:<input type="password" name="pwd"><br/>
            <input type="submit" value="提交" />
        </form>


web.xml:


<servlet>
    <servlet-name>ThirdServlet</servlet-name>
    <servlet-class>cn.hncu.servlet.day2.ThirdServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ThirdServlet</servlet-name>
    <url-pattern>/third</url-pattern>   
  </servlet-mapping>

ThirdServlet.java:

package cn.hncu.servlet.day2;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:采用继承HttpServlet的方式写servlet,doGet和doPost这2个方法通常都要覆盖
//否则如果doGet方法没覆盖,有get请求时就会出现405错误,不覆盖doPost方法同理
public class ThirdServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("get...");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("post");
    }
}

覆盖doGet和doPost这2个方法的说明:


注意:采用继承HttpServlet的方式写servlet,doGet和doPost这2个方法通常都要覆盖

否则如果doGet方法没覆盖,有get请求时就会出现405错误,不覆盖doPost方法同理.

产生这个的原因是:

我们来看底层代码:

这是一个常量:

public static final int SC_METHOD_NOT_ALLOWED = 405;

因为HttpServlet继承GenericServlet,GenericServlet implements Servlet。所以,当客户端访问的时候,最先找的是:父类的servlet

也就是:service(ServletRequest req, ServletResponse res)

这个方法继续调用:service(request, response);

再通过这个方法调用doGet()或doPost()或其他方法。

如果我们没覆盖doGet()或doPost()。

我们用的是http1.1协议,会调用resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);于是出现了405错误!


image.png

image.png


image.png




演示结果:


image.png


我们将表单提交的方式定义成post提交了的。默认是get


目录
相关文章
|
4天前
|
前端开发 Java 数据库
玩转springboot之springboot注册servlet
在Spring Boot中注册Servlet非常灵活,可以通过 `@WebServlet`注解快速注册,也可以通过 `ServletRegistrationBean`进行细粒度控制。通过这两种方式,可以满足各种场景下的需求,确保应用能够高效处理HTTP请求。
32 14
|
2月前
|
Java 应用服务中间件 Spring
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
43 0
|
4月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
45 1
|
4月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
251 0
|
4月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
89 0
|
4月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
42 0
|
6月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
140 10
|
6月前
|
缓存 负载均衡 安全
Servlet与JSP在Java Web应用中的性能调优策略
【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
94 7
|
6月前
|
搜索推荐 Java 数据库连接
探索Java Web开发:Servlet与JSP的协同工作原理
【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
74 7
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
169 3