使用jsf + hibernate制作一个login实例教学录像

速动画教程系列第11集


下载: http://sonic.peakle.net/download/sonic011.rar
 

这一集将介绍jsf的基本使用

 

使用jsf + hibernate制作一个login实例

 

开发工具:Eclipse3.1、MyEclipse4.0.3、Tomcat、MySql

 

打开Eclipse

新建 web 工程,名称为login,j2ee版本为2.4

 

创建jsf框架

在工程目录上点右键-->MyEclipse-->Add JSF Capabilities

在弹出配置对话框时,使用默认的设置就可以了。

这时打开web.xml文件就可以看到以下的配置信息了

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <context-param>

    <param-name>javax.faces.CONFIG_FILES</param-name>

    <param-value>/WEB-INF/faces-config.xml</param-value>

  </context-param>

  <servlet>

    <servlet-name>Faces Servlet</servlet-name>

    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

    <load-on-startup>0</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>Faces Servlet</servlet-name>

    <url-pattern>*.faces</url-pattern>

  </servlet-mapping>

</web-app>

 

现在创建两个Bean,一个用来处理用户信息的验证,一个是和页面中的数据进行绑定

 

UserValidator.java

public class UserValidator {

    // 这是验证用户名和密码的过程

    public String validator(String username, String password) {

        if ((username == null) || (username.length() < 1))

            return "failure";

        if ((password == null) || (password.length() < 1))

            return "failure";

        if ((username.equals("test")) && (password.equals("test")))

            return "success";

        else

            return "failure";

    }

}

 

LoginBean.java

public class LoginBean {

 

    private String username; //用户名称

    private String password; //密码

    private UserValidator uv; //用户验证的实例

 

    public String getPassword() {

        return password;

    }

   

    public void setPassword(String password) {

        this.password = password;

    }

 

    public String getUsername() {

        return username;

    }

 

    public void setUsername(String username) {

        this.username = username;

    }

 

    public UserValidator getUv() {

        return uv;

    }

 

    public void setUv(UserValidator uv) {

        this.uv = uv;

    }

 

    // 用户登录过程

    public String login() {

        return uv.validator(username, password);

    }

}

 

现在按下Ctrl + N 键,使用jsp的向导来配置这两个Bean

MyEclipse-->WEB-JSF-->Managed Bean

 

Project: login

选中:Open Config File in Editor

Name: userValidator 就是Bean中的一个,这里的name可以自己起一个,如将第一个字母改为小写userValidator

Class: com.jsf.UserValidator

Scope: request

 

点击完成生成配置内容如下:

<faces-config >

    <managed-bean>

       <managed-bean-name>userValidator</managed-bean-name>

       <managed-bean-class>com.jsf.UserValidator</managed-bean-class>

       <managed-bean-scope>request</managed-bean-scope>

    </managed-bean>

</faces-config>

 

再次配置另一个Bean,不过这一回增加了一个属性

按下Ctrl + N 键,选择MyEclipse-->WEB-JSF-->Managed Bean

Project: login

选中:Open Config File in Editor

Name: loginBean

Class: com.jsf.LoginBean

Scope: request

点击add按钮

Name: uv 这里的内容为LoginBean中的uv属性,这个可是不能乱填的

Class: 这个不填

点下一步

Property Value: #{userValidator} 这里花括号中的内容为刚才配置的UserValidator的name属性,name属性的第一个字母使用的是小写

 

好,确定,完成

配置文件中新增了如下代码:

    <managed-bean>

       <managed-bean-name>loginBean</managed-bean-name>

       <managed-bean-class>com.jsf.LoginBean</managed-bean-class>

       <managed-bean-scope>request</managed-bean-scope>

       <managed-property>

           <property-name>uv</property-name>

           <value>#{userValidator}</value>

       </managed-property>

    </managed-bean>

 

在这一个bean中,它的uv属性被指定要在运行时注入一个com.UserValidator的实例。

 

现在创建jsp文件

打开WEB-INF目录下的 faces-config.xml 文件(如果你已经关闭了)

使用工具栏中的工具创建四个页面index.jsplogin.jspok.jsperror.jsp

使用工具栏中的工具navigation创建页面的关系

 

在弹出对话框中的From Outcome中分别填入successfailure

 

新增的配置信息如下:

       <navigation-rule>

       <from-view-id>/login.jsp</from-view-id>

       <navigation-case>

           <from-outcome>success</from-outcome>

           <to-view-id>/ok.jsp</to-view-id>

       </navigation-case>

       <navigation-case>

           <from-outcome>failure</from-outcome>

           <to-view-id>/error.jsp</to-view-id>

       </navigation-case>

    </navigation-rule>

    <navigation-rule>

       <from-view-id>/ok.jsp</from-view-id>

    </navigation-rule>

    <navigation-rule>

       <from-view-id>/error.jsp</from-view-id>

    </navigation-rule>

 

 

现在编写login.jsp中的代码如下:

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<%@ page language="java" pageEncoding="UTF-8"%>

<html>

    <head>

       <title>

           Login

       </title>

    </head>

 

    <body>

       <f:view>

           <h:form>

              <h:panelGrid columns="3">

                  <h:outputLabel for="username" value="User Name:" />

                  <h:inputText id="username" value="#{loginBean.username}" required="true" />

                  <h:message for="username" />

                  <h:outputLabel for="password" value="Password:" />

                  <h:inputSecret id="password" value="#{loginBean.password}" required="true" />

                  <h:message for="password" /> 这里的password要和上一行的id="password"对应才可以返回错误消息

      </h:panelGrid>

              <h:panelGrid>

                  <h:panelGroup>

                     <h:commandButton value="Login" action="#{loginBean.login}" />

                  </h:panelGroup>

              </h:panelGrid>

           </h:form>

       </f:view>

    </body>

</html>

 

修改 index.jsp,代码如下:

<html>

    <head>

       <title>Index</title>

    </head>

    <body>

       <a href="login.faces">Login</a>

    </body>

</html>

 

修改 ok.jsp,代码如下:

<html>

    <head>

       <title>Login OK!!!</title>

    </head>

    <body>

       Login Ok!!!<br>

    </body>

</html>

 

修改 error.jsp,代码如下:

<html>

    <head>

       <title>Error!!!</title>

    </head>

    <body>

       Error!!!<br>

    </body>

</html>

 

好了,代码完成可以进行测试了

首先部署web程序到服务器,如果在这一段遇到错误的话请查看我以前发布的关于Eclipse+MyEclipse配置的录像

输入正确的用户名和密码 (test , test),提交后进入ok.jsp,输入错误的密码后进入error.jsp

 

JSF部份已经完成,现在添加Hibernate框架

 

在工程目录上点右键-->MyEclipse-->Add Hibernate Capabilities

在弹出的对话框中使用默认设置

  a1.gif

下一步,使用默认设置

下一步,如图

  a2.gif

点击 完成

 

在 hibernate 的配置图型介面中,点击New... 创建一个数据库连接(具体方法请看录像)

 

配置完成后,内容如下:

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

 

    <session-factory>

       <property name="myeclipse.connection.profile">conn_mysql</property>

       <property name="connection.url">jdbc:mysql://localhost:3306/test</property>

       <property name="connection.username">root</property>

       <property name="connection.password">root</property>

       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    </session-factory>

</hibernate-configuration>

 

在配置文件加入一行,增加一个属性,可以在状态栏中显示hibernate的查询语句

<property name="show_sql">true</property>

 

修改后的配置文件内容如下:

<hibernate-configuration>

 

    <session-factory>

       <property name="myeclipse.connection.profile">conn_mysql</property>

       <property name="connection.url">jdbc:mysql://localhost:3306/test</property>

       <property name="connection.username">root</property>

       <property name="connection.password">root</property>

       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

              <property name="show_sql">true</property>

       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    </session-factory>

</hibernate-configuration>

 

点击 Copy JDBC Driver and add to classpath 将jdbc文件拷贝到lib目录中

 

现在启动MySql,并创建一张新表,这里我已经创建完成了,并在其中添加了一个用户名为test密码也是test的用户

 

CREATE TABLE `user` (

  `ID` int(11) NOT NULL auto_increment,

  `USERNAME` varchar(50) NOT NULL default '',

  `PASSWORD` varchar(50) NOT NULL default '',

  PRIMARY KEY  (`ID`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

打开 MyEclipse 的数据浏览工具

选中user表,点右键-->Create Hibernate Mapping

  a3.gif

回到MyEclipse状态中

 

打开 UserValidator.java 文件

 

修改为以下内容:

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.Transaction;

import com.Hibernate.SessionFactory;

 

public class UserValidator {

    // 这是验证用户名和密码的过程

    public String validator(String username, String password) {

        if ((username == null) || (username.length() < 1))

            return "failure";

        if ((password == null) || (password.length() < 1))

            return "failure";

        // 创建连接

        Session session = SessionFactory.currentSession();

        // 创建事务

        Transaction tx = session.beginTransaction();

        // 创建对话

        Query query = session

                .createQuery("from User as u where u.username=? and u.password=?");

        query.setString(0, username);

        query.setString(1, password);

        List list = query.list();

        // 事务提交

        tx.commit();

        if (list.size()>0)

            return "success";

        else

            return "failure";

 

    }

}

 

现在完成了全部的代码,可以进行测试了,修改后代码将会读取数据库的信息进行验证

 

 

你可能感兴趣的:(使用jsf + hibernate制作一个login实例教学录像)