MyWeb

package com.zq.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zq.dao.UserDao;
import com.zq.dao.UserDaoImpl;

//注解:代替一些配置文件的配置 @WebServlet给前台jsp提供一个访问地址
//http://localhost:8088/MyWeb/user
@WebServlet("/user")
public class UserServlet extends HttpServlet {
	//因为下面每个操作都会实例化这个类,所以写成成员变量
	UserDao userDao = new UserDaoImpl();	
	
	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//业务逻辑代码
		System.out.println("进来了");
		//1、获取从前台或从浏览器地址传进来的参数
		//HttpServletRequest 里面存有前台传来的参数;可以往前台页面上传数据;执行页面的跳转serlvet类里面跳到某个页面
		//HttpServletResponse 主要有个作用可以直接返回数据,不需要跟着页面传输数据
		String action = req.getParameter("action");
		
		//null.equals
		//http://localhost:8088/MyWeb/user?action=toLogin&username=zq&pwd=123
		if(null!=action && action.equals("toLogin")){//从系统上的注销操作,跳转到登陆页面
			//跳到页面时,想传递一个数据;第一个参数放传递数据变了的名字,第二个参数传递的数据的值
			req.setAttribute("msg", "今天天气真好啊");
			//也可以传任何对象Object
			Map<String,String> map =new HashMap<String,String>();
			map.put("name", "zq");
			map.put("age", "22");
			req.setAttribute("map", map);
			//requst跳转到某个页面代码
			req.getRequestDispatcher("index.jsp").forward(req, resp);
		}else if(action.equals("delete")){
			//页面保持不动的情况,向后台发一请求,ajax请求,局部刷新,页面不动;
			//如果是<a>超链接的跳转,都是直接整个页面都刷新、跳转了,那种不是ajax请求
			//ajax请求返回前台的只是一个数据结果,不需要跳转页面
			resp.setContentType("text/html;charset=utf-8");//设置页面显示的数据是中文编码方式,不然会乱码
			PrintWriter out = resp.getWriter();
			out.print("删除成功");
			out.flush();
			out.close();
		}else if(action.equals("login")){//如果是登陆操作
			String username = req.getParameter("username");
			String pwd = req.getParameter("pwd");
			
			//改成调用userDao里面login判断是否登陆成功
			boolean isLogin = userDao.login(username, pwd);
			
			if(isLogin){
				System.out.println("跳转一个系统首页面");
			}else{
				//跳回到登陆页面,并且告诉登录那个人,你用户名或密码输错了
				req.setAttribute("msg", "您的用户名或密码输入错误");
				req.getRequestDispatcher("index.jsp").forward(req, resp);
			}			
		}
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("调用doPost了");
		doGet(req, resp);
	}
}
package com.zq.dao;

public interface UserDao {
	public boolean login(String username,String pwd);
}
package com.zq.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.zq.model.User;


public class UserDaoImpl implements UserDao {

	@Override
	public boolean login(String username, String pwd) {
		//写连接数据库,查询用户名密码是否正确的操作
		Connection conn = null;
		PreparedStatement pst = null;//因为最后需要关闭,所以写在最上面,不然try里面内容,
		//Statement,但是不太常用,拼装带参数的sql比较麻烦
		//finally里面调不到
		ResultSet rs = null;
		
		//1、引入具体的数据库jar包
		try{
			//2、注册/安装数据库的驱动程序/类
			Class.forName("com.mysql.jdbc.Driver");
			//3、创建数据库连接,连接数据库:哪个数据库、用户名、密码多少
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/myweb","root","");//机房的密码为空
			
			//4、sql语句,并且对数据库执行下sql语句:查询返回结果、删除、更新
			String sql = "select * from user where username = ? and pwd = ?";
			pst = conn.prepareStatement(sql);
			//穿进去用户名和密码
			pst.setString(1, username);
			pst.setString(2,pwd);
			
			//5、如果是查询,需要获取查询结果
			rs = pst.executeQuery();
			
			//判断查询到的结果集里面是否有数据
			if(rs.next()){//存的是0或者1条,所有获取结果集用的if,但是多条while,循环结果集里的数据
				User user = new User();
				//把结果集里取到的信息塞到user里
				user.setId(rs.getInt(1));//按查询出来列的顺序取得,第1列是id,
				//getString("username")这个username是数据库表的列名或者查询时取得别名
				//select username as name from user;
				user.setUsername(rs.getString("username"));//getString(2)
				user.setPwd(rs.getString(3));
				return true;
			}else{
				return false;
			}		
		}catch(Exception e){
			e.printStackTrace();
		}finally{			
			//6、关闭数据库连接的这些对象,释放缓存
			//倒着关闭,就是先建立的数据库连接connetction,那就最后关;最后建的结果集ResultSet,就应该最先关闭
			try {
				if(rs!=null){
					rs.close();
				}
				if(pst!=null){
					pst.close();
				}
				if(conn!=null){
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return false;
	}
}
package com.zq.model;

public class User {
	private Integer id;//主键
	private String username;//用户名
	private String pwd;//密码
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}	
}

转载于:https://my.oschina.net/u/4090399/blog/3055168

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值