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>