在创建登录表单的示例中, 我们使用了DAO(数据访问对象), Factory方法和DTO(数据传输对象)设计模式。文件很多:index.jsp, 它提供用于登录, 注销和配置文件login.jsp的三个链接, 用于从用户loginprocess.jsp获取值, 这是一个处理请求并调用方法的jsp文件。 LoginBean.java, 一个具有属性以及setter和getter方法的bean类。 Provider.java, 一个包含许多常量的接口, 例如DRIVER_CLASS, CONNECTION_URL, USERNAME和PASSWORD ConnectionProvider.java, 一个负责返回Connection对象的类。它使用Singleton和工厂方法设计模式。 LoginDao.java, DAO类, 用于验证数据库中的emailId和密码。 logout.jsp它使会话无效。 profile.jsp, 如果用户已登录, 它将提供简单消息, 否则将请求转发到login.jsp页面。 |
CREATE TABLE"USER432"
( "NAME" VARCHAR2(4000), "EMAIL" VARCHAR2(4000), "PASS" VARCHAR2(4000)
)
/
我们假设此表中有许多记录。
index.jsp它只是提供了三个用于登录, 注销和配置文件的链接。
<
a href="http://www.srcmini.com/login.jsp">
login<
/a>
|
<
a href="http://www.srcmini.com/logout.jsp">
logout<
/a>
|
<
a href="http://www.srcmini.com/profile.jsp">
profile<
/a>
login.jsp该文件为两个输入字段名称和密码创建一个登录表单。这是简单的登录表单, 你可以更改它以获得更好的外观。我们仅关注概念。
<
%@ include file="index.jsp" %>
<
hr/>
<
h3>
Login Form<
/h3>
<
%
String profile_msg=(String)request.getAttribute("profile_msg");
if(profile_msg!=null){
out.print(profile_msg);
}
String login_msg=(String)request.getAttribute("login_msg");
if(login_msg!=null){
out.print(login_msg);
}
%>
<
br/>
<
form action="loginprocess.jsp" method="post">
Email:<
input type="text" name="email"/>
<
br/>
<
br/>
Password:<
input type="password" name="password"/>
<
br/>
<
br/>
<
input type="submit" value="http://www.srcmini.com/login"/>
"
<
/form>
loginprocess.jsp这个jsp文件包含所有到bean类的对象的输入值, 该类作为参数传递给LoginDao类的validate方法。如果emailid和密码正确, 则会显示一条消息, 说明你已成功登录!并保持会话状态, 以便我们识别用户。
<
%@page import="bean.LoginDao"%>
<
jsp:useBean id="obj" class="bean.LoginBean"/>
<
jsp:setProperty property="*" name="obj"/>
<
%
boolean status=LoginDao.validate(obj);
if(status){
out.println("You r successfully logged in");
session.setAttribute("session", "TRUE");
}
else
{
out.print("Sorry, email or password error");
%>
<
jsp:include page="index.jsp">
<
/jsp:include>
<
%
}
%>
LoginBean.java该bean类具有2个属性, 并通过其setter和getter方法传递电子邮件。
package bean;
public class LoginBean {
private String email, pass;
public String getEmail() {
return email;
}public void setEmail(String email) {
this.email = email;
}public String getPass() {
return pass;
}public void setPass(String pass) {
this.pass = pass;
}}
Provider.java
此接口包含四个常量, 每个数据库的常量可能不同。 |
package bean;
public interface Provider {
String DRIVER="oracle.jdbc.driver.OracleDriver";
String CONNECTION_URL="jdbc:oracle:thin:@localhost:1521:xe";
String USERNAME="system";
String PASSWORD="oracle";
}
ConnectionProvider.java此类提供了一个工厂方法, 该方法返回Connection的对象。在此, 驱动程序类仅加载一次, 并且连接对象仅获得一次内存, 因为它是静态的。
package bean;
import java.sql.*;
import static bean.Provider.*;
public class ConnectionProvider {
private static Connection con=null;
static{
try{
Class.forName(DRIVER);
con=DriverManager.getConnection(CONNECTION_URL, USERNAME, PASSWORD);
}catch(Exception e){}
}public static Connection getCon(){
return con;
}}
LoginDao.java【JSP中的登录和注销示例】此类会更改emailid和密码。
package bean;
import java.sql.*;
public class LoginDao {public static boolean validate(LoginBean bean){
boolean status=false;
try{
Connection con=ConnectionProvider.getCon();
PreparedStatement ps=con.prepareStatement(
"select * from user432 where email=? and pass=?");
ps.setString(1, bean.getEmail());
ps.setString(2, bean.getPass());
ResultSet rs=ps.executeQuery();
status=rs.next();
}catch(Exception e){}return status;
}
}
推荐阅读
- JSP中的MVC
- jsp(useBean操作标记)
- jsp(setProperty和jsp:getProperty操作标签)
- jsp(include动作标签)
- JSP动作标签
- JSP JavaBean
- 使用JSP自定义标签进行迭代
- JSP中的异常处理
- JSP自定义标签示例