在登录数据库界面基础上修改:web项目 maven下 使用servlet调用 mysql数据库
添加代码如下:
package com.busymonkey;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ServletDemo
*/
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
public Login() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<body>");
pw.println("<center>");
pw.println("<h1>Login</h1>");
pw.println("<form action=verify method=post>");
pw.println("UserName:<input type=text name=username><br>");
pw.println("PassWord:<input type=password name=passwd><br>");
pw.println("<input type=checkbox name=keep value=2>No more login in two weeks<br>");
pw.println("<input type=submit value=loging><br>");
pw.println("</form>");
pw.println("</center>");
pw.println("</body>");
pw.println("</html>");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
package com.busymonkey;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class Verify extends HttpServlet {
private static final long serialVersionUID = 1L;
//重写init函数 只会被调用一次
public void init () {
try {
FileReader fs = new FileReader(this.getServletContext().getRealPath("/")+"/WEB-INF/logs/count.txt");
BufferedReader br = new BufferedReader(fs);//读出一行数据
String numVal = br.readLine();//一定要关闭文件流
br.close();
//将numVal值放到servletContext中
this.getServletContext().setAttribute("visitTimes", numVal);
System.out.println("init was loading");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//重写destroy函数
public void destroy () {
try {
FileWriter fs = new FileWriter(this.getServletContext().getRealPath("/")+"/WEB-INF/logs/count.txt");
BufferedWriter bw = new BufferedWriter(fs);
bw.write(this.getServletContext().getAttribute("visitTimes").toString());//回写文件 登陆次数
bw.close();
System.out.println("destroy was loading");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public Verify() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection ct = null;
Statement sm = null;
ResultSet rs = null;
try {
String u=request.getParameter("username");
String p=request.getParameter("passwd");
//数据库连接
Class.forName("com.mysql.jdbc.Driver");
//得到连接
ct = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_hou", "root", "123456");
//创建Statement
sm = ct.createStatement();
rs = sm.executeQuery("select * from users where username='"+u+"' and passwd='"+p+"'");
if (rs.next()) {//next能进来说明用户是存在的
String dbPasswd = rs.getString("passwd");
if (dbPasswd.equals(p)) {
HttpSession hs = request.getSession(true);
hs.setMaxInactiveInterval(20);
hs.setAttribute("pass", "ok");
String keep = request.getParameter("keep");
if (keep != null) {
//将用户名和密码保存在客户端 cookie技术
Cookie name = new Cookie("myname",u);
Cookie pass = new Cookie("mypasswd",p);
//设置时间
name.setMaxAge(14*24*3600);
pass.setMaxAge(14*24*3600);
//回写到客户端
response.addCookie(name);
response.addCookie(pass);
}
//将servletContext中的 visitTimes 所对应的值 ++
String times = this.getServletContext().getAttribute("visitTimes").toString();
//对 times的值 ++ 再重新放回
this.getServletContext().setAttribute("visitTimes", Integer.parseInt(times)+1+"");
response.sendRedirect("welcome?uname=" + u + "&upass=" + p);
}
else
{
response.sendRedirect("login");
}
}
else {
response.sendRedirect("login");
}
}
catch (Exception ex) {
ex.printStackTrace();
}finally{
try {
if (rs!=null) rs.close();
if (sm!=null) sm.close();
if (ct!=null) ct.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
package com.busymonkey;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class WelCome extends HttpServlet {
private static final long serialVersionUID = 1L;
public WelCome() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection ct = null;
PreparedStatement ps = null;
ResultSet rs = null;
HttpSession hs = request.getSession(true);
String val = (String) hs.getAttribute("pass");//非法登陆返回空
if ( val == null )
{
//如果session中没有用户信息,再看看cookie中有没有信息
Cookie [] allCookies = request.getCookies();
String name = null;
String passwd = null;
int i = 0;
if (allCookies != null) {
//取出cookie
for (i = 0; i < allCookies.length; i++) {
//依次取出
Cookie temp = allCookies[i];
if (temp.getName().equals("myname")) {
name = temp.getValue();
}
else if (temp.getName().equals("mypasswd")) {
passwd = temp.getValue();
}
}
if (!name.equals("") && !passwd.equals("")) {
//到Verify里去验证
response.sendRedirect("verify?username="+name+"&passwd="+passwd);
return;
}
}
try {
response.sendRedirect("login");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
String u = request.getParameter("uname");
String p = request.getParameter("upass");
try {
//分页技术
int pageSize = 3;//每页条数
int pageCurrent = 1;//当前页数
int rowCount = 0;//总条数
int pageCount = 0;//总页数
PrintWriter pw = response.getWriter();
//动态接收pageCurrent
String sPageCurrent = request.getParameter("pageCurrent");
if (sPageCurrent != null) {
pageCurrent = Integer.parseInt(sPageCurrent);
}
//得到rowCount
Class.forName("com.mysql.jdbc.Driver");
ct = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_hou", "root", "123456");
ps = ct.prepareStatement("select count(*) from users");
rs = ps.executeQuery();
if (rs.next()) {
rowCount = rs.getInt(1);
}
//计算pageCount
if (rowCount%pageSize == 0) {
pageCount = rowCount/pageSize;
}
else {
pageCount = rowCount/pageSize + 1;
}
ps = ct.prepareStatement("select * from users limit ?,?");
//给?赋值
ps.setInt(1, pageSize*(pageCurrent-1));
ps.setInt(2, pageSize);
rs = ps.executeQuery();
pw.println("<body><center>");
pw.println("<img src=./imgs/1.GIF ><br>");
pw.println("Welcome!!!! " + u + " pass=" + p);
//表数据显示
pw.println("<table border=1>");
pw.println("<tr><th>ID</th><th>NAME</th><th>PASSWD</th><th>GRADE</th></tr>");
while (rs.next()) {
pw.println("<tr>");
pw.println("<td>"+rs.getInt("userId")+"</td>");
pw.println("<td>"+rs.getString("username")+"</td>");
pw.println("<td>"+rs.getString("passwd")+"</td>");
pw.println("<td>"+rs.getInt("grade")+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
//上一页 超连接
if (pageCurrent != 1)
pw.println("<a href=welcome?pageCurrent="+(pageCurrent-1)+">Prepage</a>");
//显示超链接
for (int i = pageCurrent; i <= pageCurrent+5; i ++) {
pw.println("<a href=welcome?pageCurrent="+i+">"+i+"</a>");
}
//下一页 超链接
if (pageCurrent != pageCount)
pw.println("<a href=welcome?pageCurrent="+(pageCurrent+1)+">Nextpage</a>");
//返回登陆页面 超连结
pw.println("<br><a href=login>Return Loading Page</a>");
pw.println("<br>Was visited "+this.getServletContext().getAttribute("visitTimes").toString()+" times");
pw.println("</center></body>");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
关于 servletContext :
1、与cookie和session做对比,servletContext 是保存在服务器端的,这点与session类似,但是session是每个客户端都分别在服务器端有一个session空间,且每个session空间之间不能相互通用,而servletContext是服务器端一个公共空间可以被所有的客户端访问。且servletContext的存储结构也与session类似,每个属性都有一个名字和一个值。有以下调用方法:
添加属性:setAttribute(String name, Object ob)
得到值:getAttribute(String name) 返回 Object
删除属性:removeAttribute(String name)
同时,servletContext 的生命周期从创建开始,到服务器关闭而结束
2、在 web应用中使用servletContext来获取当前路径
this.getServletContext().getRealPath("/")