WEB核心【Servlet配置和注解重构用户登录】第八章

简介: 本篇章主要讲Servlet,两个重点:Servlet路径配置,Servlet注解开发,了解内容Servlet继承数及生命周期,Servlet路径配置,ServletConfig配置

 1,Servlet配置

1.1:Servlet继承数及生命周期

image.gif编辑

实现Servlet,则该Demo1Servlet就是一个Servlet(这是Servlet底层方法)

public class Demo1Servlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("创建Servlet对象时,会调用一次init");
    }
    @Override
    public void destroy() {
        System.out.println("销毁当前Servlet对象时,会调用一次destroy");
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("请求一次该servlet,就会调用一次service方法");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}

image.gif

web.xml

<servlet>
    <servlet-name>Demo1Servlet</servlet-name>
    <servlet-class>com.czxy.demo1.web.servlet.Demo1Servlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Demo1Servlet</servlet-name>
    <url-pattern>/d1</url-pattern>
</servlet-mapping>

image.gif

生命周期:

创建:Servlet第一次访问时,创建servlet对象,调用init()

销毁:服务器正常关闭,销毁servlet对象,销毁之前会调用一次destroy()

Servlet默认情况下单例模式(服务器启动期间,一个Servlet只有一个对象)

每次访问servlet,调用servlet  service()方法。

image.gif编辑

1.2:Servlet启动时运行配置

原因:有很多Servlet代码量极大,初始化需要时间的。

为了将Servlet对象创建时间节点,由第一次访问时创建对象,提升至 服务器启动时创建对象。

image.gif编辑

<servlet>
    <servlet-name>Demo1Servlet</servlet-name>
    <servlet-class>com.czxy.demo1.web.servlet.Demo1Servlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

image.gif

1.3:Servlet路径配置【阶段重点】

一个Servlet可以配置多个url-pattern

凡是没有按照如下格式设置路径的,都会报:LifecycleException

image.gif编辑

完全路径匹配:要求资源路径必须和指定的路径完全一致。

image.gif编辑

目录匹配:要求资源路径中的目录名 必须和 指定的路径的目录名保持一致,资源名任意书写

image.gif编辑

扩展名匹配:要求资源路径中的扩展名 必须和 指定路径的扩展名保持一致,资源名任意书写的

image.gif编辑

image.gif编辑

image.gif编辑 匹配例子:image.gif编辑

优先匹配:完全匹配,看是否有个servlet 路径是/aa.jpg

再进行目录匹配:看是否有个servlet路径是/*

再进行扩展名匹配:看是否有个扩展名是 *.jpg

最后进行缺省匹配:aa.jpg就会匹配到缺省匹配。

image.gif编辑

image.gif编辑

Tomcat自带的缺省servlet,会根据aa.jpg路径,在服务器硬盘读取aa.jpg文件,写出到响应体。浏览器就可以看到图片了        

image.gif编辑

image.gif编辑

1.4:ServletConfig配置

目标:熟练进行Servlet配置信息获取

image.gif编辑

image.gif编辑

1.5:Servlet注解开发【阶段重点】

不需要进行web.xml的配置,web.xml的Servlet配置全部移植到

@WebServletimage.gif编辑

@WebServlet(name = "DemoAServlet",urlPatterns = {"/da"})
public class DemoAServlet extends BaseServlet {
    public String run1(){
        System.out.println("da-run1");
        return null;
    }
}

image.gif

image.gif编辑

xml版:适合复杂大型开发

注解版:适合快速开发(敏捷开发)、

image.gif编辑

2,案例:注解重构用户登录

2.1:需求说明

image.gif编辑

image.gif编辑

2.2:需求分析

image.gif编辑

2.3:代码实现

User:

public class User implements Serializable {
    private String id;
    private String username;
    private String password;
    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
    public User(String id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }
    public User() {
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

image.gif

login.jsp

<form class="form-horizontal" method="post" action="/day05_1/user">
    <input type="hidden" name="method" value="login"/>

image.gif

UserServlet

@WebServlet({"/user"})
public class UserServlet extends BaseServlet {
    public String login(){
        //1、接收请求参数
        User user = toBean(User.class);
        //2、调用service进行校验
        UserService userService = new UserService();
        boolean result = userService.CheckUsernameAndPassword(user);
        //3、根据service结果,向request作用域存储结果信息
        if(result){
            getRequest().setAttribute("msg","登录成功");
        }else{
            getRequest().setAttribute("msg","登录失败");
        }
        //4、请求转发到login.jsp
        return "forward:/login.jsp";
    }
}

image.gif

UserService

public class UserService {
    public boolean CheckUsernameAndPassword(User user) {
        //1、调用Dao用户列表获取到 ulist
        UserDao userDao = new UserDao();
        List<User> ulist = userDao.searchAll();
        //2、遍历ulist集合,每遍历一个用户,对比输入的用户名和正确的用户名是否相同,并且输入的密码和正确的密码是否相同
        for (User u : ulist) {
            if(user.getUsername().equals(u.getUsername()) &&
                user.getPassword().equals(u.getPassword())){
                //3、如果符合要求,登录成功
                return true;            }
        }
        //4、如果遍历整个集合,都没有发现登录成功,说明就是登录失败了
        return false;
    }
}

image.gif

UserDao

public class UserDao {
    public List<User> searchAll() {
        return XmlUtils.readAll("D:/data01.xml",User.class);
    }
}

image.gif

login.jsp

<div class="col-xs-11 col-xs-offset-1">
    <b><font size="4" color="#2B669A">会员登录</font> USER LOGIN</b>
    <br/>
    <b><font size="2" color="red">${msg}</font> </b>
</div>

image.gif


相关文章
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
13天前
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
30 5
|
2月前
|
小程序 前端开发 中间件
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
本文介绍了如何在ThinkPHP框架中配置跨域请求,使用了TP内置的跨域类`\think\middleware\AllowCrossDomain::class`。文章还讨论了小程序和web网页在跨域请求格式上的区别,并提供了解决方案,包括修改跨域中间件源码以支持`Origin`和`token`。此外,还介绍了微信小程序跨域请求的示例和web网页前端发送Axios跨域请求的请求拦截器配置。
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
|
2月前
|
监控 Apache
HAProxy的高级配置选项-Web服务器状态监测
这篇文章介绍了HAProxy的高级配置选项,特别是如何进行Web服务器状态监测,包括基于四层传输端口监测、基于指定URI监测和基于指定URI的request请求头部内容监测三种方式,并通过实战案例展示了配置过程和效果。
83 8
HAProxy的高级配置选项-Web服务器状态监测
|
1月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
120 0
|
1月前
|
NoSQL Java 数据库连接
springBoot:整合其他框架&condition&切换web配置 (五)
本文档介绍了如何在Spring Boot项目中整合JUnit、Redis和MyBatis等框架,并提供了相应的依赖配置示例。同时,还展示了如何通过条件注解实现Bean的条件创建,以及如何切换Web服务器配置,从默认的Tomcat切换到Jetty。
|
1月前
|
Java 应用服务中间件 Spring
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
26 0
|
3月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
188 0
|
3月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
104 0
|
3月前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
328 0