1.项目介绍:这仅是一个初级练手项目,功能登录,存在此用户-->登录成功 不存在此用户-->登录失败;
2.项目框架:jsp+serlvet+mysql
3.共存在三个jsp页面(登录页面、错误页面、主页)和一个中心处理器servlet
4.项目步骤:
4.1:设计数据库(我只设计了一个账户名和一个密码)
create databse hib_demo;
use hib_demo;
create table userinfo(
username varchar(20),
pwd varchar(15)
)
4.2:写jsp页面(这是一个登录页面,内容非常简单)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="/Test1/Test1" method="post">
用户名:<input type="text" name="username" values=""><br/>
密 码:<input type="text" name="pwd" values=""><br/>
<input type="submit" values="提交">
<input type="reset" values="重置" >
</form>
</body>
</html>
4.3 写一个主页
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>主页</title>
</head>
<body>
欢迎<%=session.getAttribute("username") %>!<%-- 以session来获取账户名 --%>
主页正在建设当中。。。。。
</body>
</html>
4.4写一个错误页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>错误页面</title>
</head>
<body>
您所输入的账户密码错误了。。。。。
</body>
</html>
4.5写中心处理器servlet
package sam;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//无论在表单中调用post或者get方法都只会执行post方法。(因为我把dopost方法放到get里面了)
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//命令浏览器以文件形式和utf-8编码来读取该文件
response.setContentType("text/html;charset=utf-8");
//接着我们来获取向客户端输出语句的out
PrintWriter out = response.getWriter();
//获取页面提交(Post)上来的username和pwd值
String username = null,pwd=null;
username=request.getParameter("username");
pwd=request.getParameter("pwd");
//对客户端请求进行重新编码:utf-8
request.setCharacterEncoding("utf-8");
//设置一面旗帜(待会在判断是否已经登录的时候使用)
boolean flag=false;
//获取jdbc的资源(connection;preparedstatement(推荐使用它不推荐statment);resultset)
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
//写上sal语句:查询userinfo表里的数据
String sql="select * from userinfo";
//mysql的连接方式(具体到库而非表)
String url="jdbc:mysql://localhost:3306/hib_demo";
String name="root";
String password="samlin123";
try {
//获取com.mysql.jdbc.Driver驱动
Class.forName("com.mysql.jdbc.Driver");
//用drivermanger来连接数据库
conn=DriverManager.getConnection(url, name, password);
//用preparedstatement执行sql语句
pstmt=conn.prepareStatement(sql);
//用rs容器来装上pstmt的结果集
rs=pstmt.executeQuery();
//判断rs容器是否为空
if(rs!=null){
//不为空则获取它的第一个值(没有遍历效果,因为我的数据库只写上一条数据(1 username:sam pwd:sam))
if(rs.next()){
//rs.getstring("pwd")作用是:获取当前行中指定的"pwd"列的值。再用该值来判断是否和pwd变量里的值一致。
if(rs.getString("pwd").equals(pwd)){
//如果是一致的话,将旗帜变为true
flag=true;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//拿着flag=true的则是账户密码都对的对象
if(flag){
//往jsp的内置对象session域中存放变量username的值(sam)
request.getSession().setAttribute("username", username);
//跳转到sucess.jsp页面
response.sendRedirect(
request.getContextPath()+"/Success.jsp"
);
}else{
//登录失败的话,跳转到error.jsp页面
response.sendRedirect(
request.getContextPath()+"/error.jsp");
}
}
out.flush();//其实这里已经没有必要写了,因为我都没有使用out资源
out.close();
}
}
4.6最后进行web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet>
<servlet-name>Test1</servlet-name>
<servlet-class>Sam.Test1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test1</servlet-name>
<url-pattern>/Test1</url-pattern>//注意这里结尾,一开始我写上serlvet的全名了,结果错了,调试好几次才知道只写“/类型名”;
</servlet-mapping>
</web-app>
5.总结:这是一个非常基础的实例,但是我本人感觉学习了很多,它里面涉及到很多基础知识点,如果你一一去体会还是能够有所提升的。