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

目录

1,Servlet配置

1.1:Servlet继承数及生命周期

1.2:Servlet启动时运行配置

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

1.4:ServletConfig配置

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

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

2.1:需求说明

2.2:需求分析

2.3:代码实现


1,Servlet配置

1.1:Servlet继承数及生命周期

实现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;
    }
}

 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>

生命周期:

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

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

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

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

 

1.2:Servlet启动时运行配置

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

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

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

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

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

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

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

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

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

 

 匹配例子: 

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

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

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

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

 

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

1.4:ServletConfig配置

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

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

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

@WebServlet

@WebServlet(name = "DemoAServlet",urlPatterns = {"/da"})
public class DemoAServlet extends BaseServlet {

    public String run1(){
        System.out.println("da-run1");
        return null;
    }
}

 

xml版:适合复杂大型开发

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

 

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

2.1:需求说明

2.2:需求分析

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;
    }
}

 login.jsp

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

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";
    }
}

 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;
    }
}

UserDao

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

 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>

猜你喜欢

转载自blog.csdn.net/m0_64550837/article/details/125020416