Servlet
一.Servlet概述
1.1 什么是Servlet
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范,用来处理客户端请求、响应给浏览器的动态资源。Servlet是JavaWeb三大组件之一(Servlet、Filter、Listener),且最重要。
1.2 Servlet的作用
用来处理从客户端发送过来的请求,并对该请求作出响应。
Servlet的任务有:
- 获取请求数据
- 处理请求
- 完成响应
广义的Servlet: Servlet接口所有实现类
狭隘的Servlet: 专门指的是Servlet接口
1.3 Servlet的快速入门
-
定义类实现接口Servlet
-
重写接口中的抽象方法
-
web.xml配置文件
public class QuickStartServlet implements Servlet{
/**
* servletRequest: 对象接收客户端的请求
* servletResponse: 对象进行客户端的响应
*/
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet快速入门");
servletResponse.getWriter().print("Servlet Run");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
<servlet>
<servlet-name>quick</servlet-name>
<servlet-class>com.itheima.servlet.QuickStartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>quick</servlet-name>
<url-pattern>/quick</url-pattern>
</servlet-mapping>
1.4 Servlet执行原理
1.5 Servlet对象生命周期
Servlet对象什么时候生,什么时候死.
生命周期相关的三个方法, init,service,destroy
-
init(ServletConfig config)Servlet对象的初始化方法,对象被创建的时候调用
-
service(request,response)客户端访问一次,执行一次
-
destory()Servlet对象销毁之前调用
-
Servlet对象什么时候被创建
-
Servlet默认第一次访问的时候,对象被创建
-
Tomcat服务器启动的时候创建对象,需要修改web.xml (一般不配置)
<!-- 配置的是Servlet对象启动优先级 可以写任意整数: 数字越小,启动优先级越高 -->
<load-on-startup>5</load-on-startup>
-
-
Servlet对象什么时候被销毁
-
停止Tomcat服务器
-
WEB项目从服务器移除
-
1.6 Servlet的Web.xml配置
Servlet的Web.xml配置
<!--
Servlet的详细配置
-->
<servlet>
<!-- name,定义名字,随意-->
<servlet-name>path</servlet-name>
<!-- class 配置类的全名,反射-->
<servlet-class>com.itheima.servlet.PathServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- name 必须和上面name相同-->
<servlet-name>path</servlet-name>
<!-- url-pattern 配置的是浏览器访问的虚拟路径-->
<url-pattern>/path</url-pattern>
</servlet-mapping>
url-pattern的配置
-
完全匹配
/abc : 浏览器地址栏必须写 /abc
<url-pattern>/path</url-pattern>
-
目录匹配
/aaa/bbb/* : 浏览器地址栏可以写 /aaa/bbb/任意
-
后缀名匹配
*.abc : 浏览器地址栏可以写 任意.abc
目录匹配和后缀名匹配不能同时使用
1.7 Tomcat的全局web.xml (了解)
tomcat目录中/conf/web.xml 是全局配置文件,所有的WEB项目都使用
自己的写web.xml只有你自己的项目使用
当全局配置web.xml和自己的web.xml冲突了,听自己的
<session-config>
<session-timeout>30</session-timeout>
</session-config>
1.8 继承HttpServlet原理
Servlet是JavaEE规范,Servlet接口中的标准方法 service方法
1.9 ServletConfig对象
ServletConfig对象,表示的是Servlet配置对象
有一个Servlet程序,出现对应的ServletConfig对象
-
获取ServletConfig对象
- init方法参数(ServletConfig servletConfig),调用者是Tomcat引擎,ServletConfig对象是由Tomcat引擎创建
- 父类中,定义了方法 ServletConfig getServletConfig()
-
对象能做什么
-
获取Servlet的名字,String getServletName()
<servlet-name>config</servlet-name>
-
获取Servlet的初始化参数,String getInitParameter(“键名”)
<init-param> <param-name>heima</param-name> <param-value>java</param-value> </init-param>
-
获取ServletContext对象 getServletContext() 返回Servlet上下文对象
-
2.0 登录案例
实现步骤
- 创建数据库表
- 创建WEB项目
- 添加必要的jar,配置文件
- 创建自己的包
- 编写页面
- 编写服务器Servlet
CREATE DATABASE web02;
USE web02;
CREATE TABLE `user`(
username VARCHAR(50),
`password` VARCHAR(50)
);
INSERT INTO `user` VALUES('tom','123'),('jerry','456');
SELECT COUNT(*) FROM `user`;
SELECT * FROM `user` WHERE username='tom' AND `password`='12h3'
/*
dbutils 使用哪个结果集
BeanHandler 查询结果一个JavaBean
BeanListHandler 查询结果集是多个JavaBean,存储List集合
ScalarHandler 单项值查询
ColumnListHandler 查询一个列数据存储集合List<Object>
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取表单提交的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
// 作为数据表查询条件
//创建dbutils工具的 核心类对象 QueryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
//拼写登录查询的SQL
String sql = "select * from user where username=? and password=?";
User user = null;
try {
//执行查询语句,获取查询后的结果集BeanHandler
user = qr.query(sql,new BeanHandler<User>(User.class),username,password);
}catch (Exception ex){ex.printStackTrace();}
//查询后的结果集进行判断
//条件不匹配,查询不到任何数据,返回null
if(user==null){
//查询不到数据,登录失败
response.getWriter().print("login error");
}else {
//查询数据匹配,登录成功
response.getWriter().print("login success");
}
}