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

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

    Demo1Servlet    com.czxy.demo1.web.servlet.Demo1Servlet    Demo1Servlet    /d1

生命周期:

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

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

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

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

 

1.2:Servlet启动时运行配置

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

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

    Demo1Servlet    com.czxy.demo1.web.servlet.Demo1Servlet    2

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

    

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 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 searchAll() { return XmlUtils.readAll("D:/data01.xml",User.class);    }}

 login.jsp

会员登录 USER LOGIN
${msg}

坏心知识社区