首页 > 代码库 > Servlet以及一个简单的登录案例
Servlet以及一个简单的登录案例
1.servlet的概述
就是一个运行在web服务器上的小的java程序,用来接收和响应从客户端发送过来的请求,通常使用http协议
就是sun公司提供的一个动态网页开发技术
作用:用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
编写类实现servlet:
public class Demo1 implements Servlet{ @Override /** * 为用户处理请求和响应的方法. */ public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { res.getWriter().println("Hello Servlet..."); } ... }
servlet的配置:
<servlet> <!-- Servlet的名称 --> <servlet-name>Demo1</servlet-name> <!-- SErvlet的全路径 --> <servlet-class>com.learn.servlet.Demo1</servlet-class> </servlet> <!-- Servlet的映射 --> <servlet-mapping> <!-- Servlet的名称 --> <servlet-name>Demo1</servlet-name> <!-- Servlet的访问路径 --> <url-pattern>/Demo1</url-pattern> </servlet-mapping>
访问路径:
http://localhost:8080/day09/Demo1
servlet接收参数的方法
String getParameter(String name); 用于接收一个名称对应一个值的参数
String [] getParameterValues(String name) ;用于接收一个名称对应多个值的参数
Map getParamterMap(); 用于接收表单中的所有的参数,map中的key是表示表单提交的参数名称,map的value是提交参数的值
Servlet的实现关系
Servlet :接口
|
GenericServlet :通用的Servlet
|
HttpServlet :HttpServlet
2.使用servlet完成一个用户登录的案例
需求:登录的链接,点击登录连接,可以跳转到登录的页面,在登录的页面中输入用户名和密码点击登录完成登录
创建数据库和表
create database demo; use demo; create table user( id int primary key auto_increment, username varchar(20), password varchar(20) ); insert into user values (null,‘张三‘,‘111‘); insert into user values (null,‘李四‘,‘111‘);
引入jar包
* mysql的数据库的驱动包
* c3p0连接池的jar包
* dbutils的包
编写servle
servlet层
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置编码表 response.setContentType("text/html;charset=utf-8"); //获取表单数据 String username = request.getParameter("username"); String password = request.getParameter("password"); //调用业务层 UserService us = new UserService(); try { //判断从数据库中查找的 user是否为空 User user = us.login(username,password); System.out.println("从数据库中获取的数据为"+user); if(user == null) { response.getWriter().write("登录失败!"); //结束方法后面不再执行 return; } //登录成功时 response.getWriter().write("登录成功,3秒后跳转"); response.sendRedirect(request.getContextPath()+"/LoginDemo/demo3-login/refresh.html"); } catch (SQLException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
service层
//调用dao层 UserDao dao = new UserDao(); public User login(String username, String password) throws SQLException { User user = dao.login(username,password); return user; }
dao层
//初始化连接池 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); public User login(String username, String password) throws SQLException { //准备sql语句 String sql = "select * from user where username=? and password=?"; //设置占位符 Object [] params = {username,password}; //执行sql语句 User user = qr.query(sql, new BeanHandler<User>(User.class), params); System.out.println("dao层的user为"+user); return user; }
utils层
private static final ComboPooledDataSource DATA_SOURCE =new ComboPooledDataSource(); /** * 获得连接的方法 */ public static Connection getConnection(){ Connection conn = null; try { conn = DATA_SOURCE.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static DataSource getDataSource(){ return DATA_SOURCE; }
c3p0配置文件
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/demo</property> <property name="user">root</property> <property name="password">root</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> </default-config> </c3p0-config>
3.servlet的声明周期
指的是servlet从创建到销毁的过程
何时创建:用户第一次访问servlet创建servlet实例
何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候
用户第一次访问servlet的时候,服务器会创建一个servlet的实例,那么servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问servlet中的service方法,在service方法内部根据请求的方式的不同调用do...方法,当servlet中服务器停止,就会调用destory方法
4.servlet的相关配置
servlet默认是在第一次访问 的时候创建的,现在让servlet在服务器启动的时候创建好
<load-on-startup>2</load-on-startup> --- 传入正整数,整数越小,被创建的优先级就越高.
url-pattern的配置
1.完全路径匹配 :以 / 开始 例如: /ServletDemo1,/aaa/ServletDemo2
2.目录匹配 :以 / 开始 需要以 * 结束. 例如: /* ,/aaa/* ,/aaa/bbb/*
3.扩展名匹配 :不能以 / 开始 以 * 开始的. 例如: *.do , *.action
***** 错误的写法 : /*.do
Servlet以及一个简单的登录案例