目录
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>