<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JQuery+Ajax+Struts2+Hibernate框架整合實現完整的登錄注冊

        來源:懂視網 責編:小采 時間:2020-11-27 19:46:54
        文檔

        JQuery+Ajax+Struts2+Hibernate框架整合實現完整的登錄注冊

        JQuery+Ajax+Struts2+Hibernate框架整合實現完整的登錄注冊:最近沒有項目做,閑著沒事,看到一個書城的網站很好,于是就是仿了一個,把里面的ui直接拿過來用,前端后端自己寫的,目前大部分的功能已經實現了。一、開發環境的部署程序結構:BootStrap+Ajax+Struts2+Hibernate+MySql僅供參考:能實現相關功能即可操作系
        推薦度:
        導讀JQuery+Ajax+Struts2+Hibernate框架整合實現完整的登錄注冊:最近沒有項目做,閑著沒事,看到一個書城的網站很好,于是就是仿了一個,把里面的ui直接拿過來用,前端后端自己寫的,目前大部分的功能已經實現了。一、開發環境的部署程序結構:BootStrap+Ajax+Struts2+Hibernate+MySql僅供參考:能實現相關功能即可操作系
        最近沒有項目做,閑著沒事,看到一個書城的網站很好,于是就是仿了一個,把里面的ui直接拿過來用,前端后端自己寫的,目前大部分的功能已經實現了。

        一、開發環境的部署

        程序結構:

        BootStrap+Ajax+Struts2+Hibernate+MySql

        僅供參考:能實現相關功能即可

        操作系統:ubuntu 14.10

        前端框架:BootStrap 注:此框架只是為了實現用戶界面,和具體功能無關

        數據庫:mysql-5.5 數據庫工具:emma

        服務器:tomcat 服務器工具:Myeclipse 10(已配置好Struts2和Hibernate環境)

        注意:

        程序調試過程可能會產生亂碼,只需保持所有工具編碼方式相同即可。

        二、項目文件配置

        1、新建Web Project,命名為ROOT

        2、配置/WebRoot/WEB-INF/web.xml

        <?xml version="1.0" encoding="UTF-8"?>
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
         <display-name>ROOT</display-name>
         <filter>
         <filter-name>struts2</filter-name>
         <filter-class>
         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
         </filter-class>
         </filter>
         <filter-mapping>
         <filter-name>struts2</filter-name>
         <url-pattern>/*</url-pattern>
         </filter-mapping>
         <error-page>
         <error-code>404</error-code>
         <location>/error.jsp</location>
         </error-page>
         <error-page>
         <error-code>500</error-code>
         <location>/error.jsp</location>
         </error-page>
         <welcome-file-list>
         <welcome-file>index.html</welcome-file>
         <welcome-file>index.htm</welcome-file>
         <welcome-file>index.jsp</welcome-file>
         <welcome-file>default.html</welcome-file>
         <welcome-file>default.htm</welcome-file>
         <welcome-file>default.jsp</welcome-file>
         </welcome-file-list>
        </web-app>

        3 、 配置/src/struts.xml(struts配置文件),其他的action和interceptor被我刪了,這點夠用了。

        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
        <struts>
         <package name="default" namespace="/" extends="struts-default">
         <!-- 登錄 -->
         <action name="login" class="com.action.Login" method="login"></action>
         <!-- 登出 -->
         <action name="logout" class="com.action.Logout" method="logout"></action>
         <!-- 注冊 -->
         <action name="register" class="com.action.Register" method="register"></action>
         <!-- 郵件發送 -->
         <action name="sendmail" class="com.action.SendMail" method="sendmail"></action>
         </package>
        </struts>

        4、配置/src/hibernate.cfg.xml(hibernate數據庫配置文件),注意倒數第4行有個<mapping />是沒有的需要自己創建,將在下一步配置

        <?xml version='1.0' encoding='UTF-8'?>
        <!DOCTYPE hibernate-configuration PUBLIC
         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        <!-- Generated by MyEclipse Hibernate Tools. -->
        <hibernate-configuration>
         <session-factory>
         <property name="myeclipse.connection.profile">Myeclipse Mysql</property>
         <!--指明JDBC路徑、指明數據庫名稱-->
         <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
         <!--指明數據庫賬戶和密碼-->
         <property name="connection.username">root</property>
         <property name="connection.password">root</property>
         <!--指明JDBC驅動-->
         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
         <!--指明mysql方言-->
         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
         <property name="hibernate.current_session_context_class">thread</property>
         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
         <property name="show_sql">true</property>
         <property name="format_sql">true</property>
         <mapping resource="com/hibernate/bookchat.hbm.xml" />
         </session-factory>
        </hibernate-configuration>

        5、/src下創建com.hibernate包,在該包下創建bookchat.hbm.xml(hibernate對象關系映射文件),并配置

        注意<class name="com.hibernate.User" />中的這個User類是自定義的數據庫對象類(pojo),將在下一步配置

        <?xml version="1.0"?> 
        <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        <hibernate-mapping>
         <!--指明Bean類名,指明數據庫表名-->
         <class name="com.hibernate.User" table="user">
         <id column="id" type="int">
         <generator class="native" />
         </id>
         <!--指明數據庫字段名、字段類型-->
         <property name="user_id" column="user_id" type="int" />
         <property name="phone" column="phone" type="int" />
         <property name="email" column="email" type="string" />
         <property name="username" column="username" type="string" />
         <property name="password" column="password" type="string" />
         <property name="icon" column="icon" type="string" />
         <property name="description" column="description" type="string" />
         <property name="followThreadNum" column="followThreadNum" type="int" />
         <property name="followPeopleNum" column="followPeopleNum" type="int" />
         <property name="fansNum" column="fansNum" type="int" />
         <property name="haveMsg" column="haveMsg" type="int" />
         </class>
        </hibernate-mapping>

        6、/src下的com.hibernate包下創建User類

        package com.hibernate;
        public class User {
         private int user_id; //對應數據庫中user_id
         private int phone; //手機號
         private String email; //郵件
         private String username; //用戶名
         private String password; //密碼
         private String icon; //用戶頭像
         private String description; //自定義描述
         private int followThreadNum; //關注書單數量
         private int followPeopleNum; //關注的人數量
         private int fansNum; //粉絲數量
         private int haveMsg; //當前是否有新消息
         public User() {
         super();
         }
         //這個構造方法在注冊時有用
         public User(String email, String username, String password) {
         // 用戶內容:username,password,email
         // 系統定義:user_id,icon,followThreadNum,followPeopleNum,fansNum,haveMsg
         // 留空:phone,description,
         this.user_id = 39212;
         // this.phone = phone;
         this.email = email;
         this.username = username;
         this.password = password;
         this.icon = "images/icon.png";
         // this.description = description;
         this.followThreadNum = 0;
         this.followPeopleNum = 0;
         this.fansNum = 0;
         this.haveMsg = 0;
         }
         public int getUser_id() {
         return user_id;
         }
         public void setUser_id(int user_id) {
         this.user_id = user_id;
         }
         public int getPhone() {
         return phone;
         }
         public void setPhone(int phone) {
         this.phone = phone;
         }
         public String getEmail() {
         return email;
         }
         public void setEmail(String email) {
         this.email = email;
         }
         public String getUsername() {
         return username;
         }
         public void setUsername(String username) {
         this.username = username;
         }
         public String getPassword() {
         return password;
         }
         public void setPassword(String password) {
         this.password = password;
         }
         public String getIcon() {
         return icon;
         }
         public void setIcon(String icon) {
         this.icon = icon;
         }
         public String getDescription() {
         return description;
         }
         public void setDescription(String description) {
         this.description = description;
         }
         public int getFollowThreadNum() {
         return followThreadNum;
         }
         public void setFollowThreadNum(int followThreadNum) {
         this.followThreadNum = followThreadNum;
         }
         public int getFollowPeopleNum() {
         return followPeopleNum;
         }
         public void setFollowPeopleNum(int followPeopleNum) {
         this.followPeopleNum = followPeopleNum;
         }
         public int getFansNum() {
         return fansNum;
         }
         public void setFansNum(int fansNum) {
         this.fansNum = fansNum;
         }
         public int getHaveMsg() {
         return haveMsg;
         }
         public void setHaveMsg(int haveMsg) {
         this.haveMsg = haveMsg;
         }
        }

        7、/src下的com.db包下創建CreateTable類,之后Run as - Java Application,查看控制臺是否輸出了sql語句

        package com.db;
        import org.hibernate.cfg.Configuration;
        import org.hibernate.tool.hbm2ddl.SchemaExport;
        public class CREATTABLEDONOT {
         public static void main(String[] args) {
         // 默認讀取hibernate.cfg.xml文件
         Configuration cfg = new Configuration().configure();
         SchemaExport export = new SchemaExport(cfg);
         export.create(true, true);
         }
        }

        三、檢查數據庫

        1、打開數據庫GUI工具,查看test數據庫下是否有一個user表,若能打開user表說明之前配置成功。

        2、編輯user表:設置字段默認值,可以向表中添加數據。

        四、網頁UI設計

        1、我們在struts.xml文件配置中已經埋下伏筆:

        <action name="login" class="com.action.Login" method="login"></action>
        <action name="logout" class="com.action.Logout" method="logout"></action>
        <action name="register" class="com.action.Register" method="register"></action>
        <action name="sendmail" class="com.action.SendMail" method="sendmail"></action>

        我們可以在網頁中請求/login,/logout,/register來訪問這三個Action處理類,當然這三個類具體的內容我們還沒寫,先放著。

        2、現在開始思考網頁設計需要什么東西...

        <1> 首頁提供登陸和注冊鏈接

        <2> 登陸彈出框和注冊頁面

        <3> 登陸/注冊成功,登陸和注冊消失,顯示用戶名和退出登陸

        <4> 我們想達到的效果:登陸/注冊成功后顯示用戶名,登陸失敗后動態提示錯誤詳情!

        五、JQuery+Ajax設計

        1、 主要的JQuery和Ajax代碼

        2、自定義工具代碼

        3、toastr是一個前端非阻塞的提示插件,可以到 http://www.bootcdn.cn/toastr.js/ 下載使用

        六、Action設計

        1、Login.java

        package com.action;
        import javax.servlet.http.HttpServletRequest;
        import org.apache.struts2.ServletActionContext;
        import com.opensymphony.xwork2.ActionSupport;
        import com.service.BaseService;
        import com.service.BaseServiceImpl;
        import com.util.OperateJSON;
        public class Login extends ActionSupport {
         private static final long serialVersionUID = 4679952956618457478L;
         private String username;
         private String password;
         public void login() {
         HttpServletRequest request = ServletActionContext.getRequest();
         BaseService hs = new BaseServiceImpl();
         OperateJSON oj = new OperateJSON();
         username = request.getParameter("username");
         password = request.getParameter("password");
         System.out.println("用戶名:" + username + "--密碼:" + password);
         // 登陸返回用戶id
         Object obj = hs.login(username, password);
         if (obj != null) {
         System.out.println("用戶名密碼正確");
         request.getSession().setAttribute("username", username);
         request.getSession().setAttribute("userid", obj);
         System.out.println("用戶名" + username + "的Session設置完畢~");
         System.out.println("用戶id的Session設置完畢~");
         oj.putCode(200);
         } else {
         System.out.println("用戶名密碼錯誤");
         oj.putCode(900);
         }
         oj.send();
         }
        }

        2、Logout.java

        package com.action;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import org.apache.struts2.ServletActionContext;
        import com.opensymphony.xwork2.ActionSupport;
        import com.util.OperateJSON;
        public class Logout extends ActionSupport {
         private static final long serialVersionUID = -6758897982192371466L;
         HttpServletRequest request = ServletActionContext.getRequest();
         HttpServletResponse response = ServletActionContext.getResponse();
         OperateJSON oj = new OperateJSON();
         public void logout() {
         request.getSession().removeAttribute("username");
         request.getSession().invalidate();
         if (request.getSession().getAttribute("username") == null) {
         oj.putCode(200);
         } else {
         oj.putCode(903);
         }
         oj.send();
         }
        }

        3、Register.java

        package com.action;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import org.apache.struts2.ServletActionContext;
        import com.hibernate.User;
        import com.opensymphony.xwork2.ActionSupport;
        import com.service.BaseService;
        import com.service.BaseServiceImpl;
        import com.util.OperateJSON;
        public class Register extends ActionSupport {
         private static final long serialVersionUID = -3356620731966076779L;
         HttpServletRequest request = ServletActionContext.getRequest();
         HttpServletResponse response = ServletActionContext.getResponse();
         BaseService bs = new BaseServiceImpl();
         OperateJSON oj = new OperateJSON();
         SendMail sm = new SendMail();
         public void register() {
         String username = request.getParameter("username");
         String password1 = request.getParameter("password1");
         String password2 = request.getParameter("password2");
         String password = (password1.equals(password2) ? password1 : null);
         String email = request.getParameter("email");
         String emailcode = request.getParameter("emailcode");
         // 判斷用戶輸入和生成的郵箱驗證碼是否相同
         if (!(emailcode.equals(sm.getMailCode()))) {
         oj.putCode(907);
         oj.send();
         return;
         }
         // 檢測用戶名/郵箱是否唯一
         if (!bs.isUnique("User", "username", username)) {
         oj.putCode(908);
         oj.send();
         return;
         }
         if (!bs.isUnique("User", "email", email)) {
         oj.putCode(909);
         oj.send();
         return;
         }
         // 構建User對象
         User user = new User(email, username, password);
         // 建立對象關系映射
         Boolean reged = bs.register(user);
         if (reged) {
         System.out.println("用戶注冊成功");
         request.getSession().setAttribute("username", username);
         oj.putCode(200);
         } else {
         System.out.println("注冊失敗");
         oj.putCode(906);
         }
         oj.send();
         }
        }

        4、 SendMail.java SMTP協議發送郵件的類,使用前需要導入mail的jar包,同時,還要設置開啟發件人郵箱的smtp服務

        package com.action;
        import java.util.Date;
        import java.util.Properties;
        import javax.mail.BodyPart;
        import javax.mail.Message;
        import javax.mail.MessagingException;
        import javax.mail.Multipart;
        import javax.mail.Session;
        import javax.mail.Transport;
        import javax.mail.internet.InternetAddress;
        import javax.mail.internet.MimeBodyPart;
        import javax.mail.internet.MimeMessage;
        import javax.mail.internet.MimeMultipart;
        import javax.servlet.http.HttpServletRequest;
        import org.apache.struts2.ServletActionContext;
        import com.opensymphony.xwork2.ActionSupport;
        import com.util.OperateJSON;
        public class SendMail extends ActionSupport {
         private static final long serialVersionUID = -4724909293302616101L;
         private static String QQ = "392102018"; // qq
         private static String HOST = "qq.com"; // SMTP服務器主機名
         private static String PASS = "xxxxxxxx"; // SMTP服務器密碼
         private static String mailCode; // 郵件驗證碼
        
         OperateJSON oj = new OperateJSON();
         public void sendmail() {
         HttpServletRequest request = ServletActionContext.getRequest();
         String email = request.getParameter("email");
         System.out.println(email);
         String mailCode = SendMail.setMailCode();
         try {
         beginSend(email, mailCode);
         oj.putCode(110);
         } catch (MessagingException e) {
         oj.putCode(910);
         } finally {
         oj.send();
         }
         }
         public static String setMailCode() {
         mailCode = 100000 + (int) (Math.random() * 900000) + "BC";
         System.out.println(mailCode);
         return mailCode;
         }
         public String getMailCode() {
         return SendMail.mailCode;
         }
         public void beginSend(String email, String mailCode)
         throws MessagingException {
         String mailTo = email; // 收件方mail地址
         String mailTitle = "歡迎您使用書聊網! 立即激活您的賬戶";
         String mailContent = "<p>尊敬的用戶:</p><p>你好!立即激活您的賬戶,和書聊網會員一起看書交流。要激活您的賬戶,只需復制下面的驗證碼到注冊頁面確認。 </p>"
         + mailCode + "<p>版權所有? 1999 - 2015 BookChat。保留所有權利。</p>";
         // 設置主要信息
         Properties props = new Properties();
         props.put("mail.smtp.host", "smtp." + HOST);
         props.put("mail.smtp.auth", "true");
         Session session = Session.getInstance(props);
         session.setDebug(true);
         // 開啟郵件對象
         MimeMessage message = new MimeMessage(session);
         // 設置發件人/收件人/主題/發信時間
         InternetAddress from = new InternetAddress(QQ + "@" + HOST);
         message.setFrom(from);
         InternetAddress to = new InternetAddress(mailTo);
         message.setRecipient(Message.RecipientType.TO, to);
         message.setSubject(mailTitle);
         message.setSentDate(new Date());
         // 設置消息對象內容
         BodyPart mdp = new MimeBodyPart();// 新建一個存放信件內容的BodyPart對象
         mdp.setContent(mailContent, "text/html;charset=utf-8");// 給BodyPart對象設置內容和格式/編碼方式
         Multipart mm = new MimeMultipart();// 新建一個MimeMultipart對象用來存放BodyPart對象(事實上可以存放多個)
         mm.addBodyPart(mdp);// 將BodyPart加入到MimeMultipart對象中(可以加入多個BodyPart)
         message.setContent(mm);// 把mm作為消息對象的內容
         message.saveChanges();
         // 開啟傳輸對象
         Transport transport = session.getTransport("smtp");
         transport.connect("smtp." + HOST, QQ, PASS); // 這里的115798090也要修改為您的QQ號碼
         transport.sendMessage(message, message.getAllRecipients());
         transport.close();
         }
        }

        5、OpreateJSON

        package com.util;
        import java.io.IOException;
        import java.io.PrintWriter;
        import org.apache.struts2.ServletActionContext;
        import net.sf.json.JSONObject;
        public class OperateJSON {
         JSONObject json;
         public OperateJSON() {
         json = new JSONObject();
         json.put("code", "");
         json.put("msg", "");
         json.put("data", "");
         }
         public OperateJSON(String str) {
         json = JSONObject.fromObject(str);
         }
         public void put(String key, Object value) {
         json.remove(key);
         json.put(key, value);
         }
         public void putCode(Object value) {
         json.remove("code");
         this.put("code", value);
         }
         public void putMsg(Object value) {
         json.remove("msg");
         this.put("msg", value);
         }
         public void remove(String key) {
         json.remove(key);
         }
         public void send() {
         System.out.println("----------返回的數據是:" + json);
         try {
         PrintWriter out = ServletActionContext.getResponse().getWriter();
         out.print(json);
         out.flush();
         } catch (IOException e) {
         e.printStackTrace();
         }
         }
        }

        七、Hibernate Dao設計

        這塊都是一些操作數據庫的內容,大家都有自己的風格,仔細一點寫就好了。代碼太亂,我就不放出來嚇人了-.-! 。

        八、總結

        開始想展示下結果的還是算了,也就那么回事。一個小例子,瑕疵難免,還望大神們指正。

        寫完了,心情好多了,招聘會去看看也好,找不找工作不重要,重要的是我走在正確的路上,只有依靠自己才是強者...

        上面是我整理給大家的,希望今后會對大家有幫助。

        相關文章:

        防止重復發送Ajax請求的解決方案

        Ajax請求過程中下載文件在FireFox(火狐)瀏覽器下的兼容問題

        解決ajax返回驗證的時候總是彈出error錯誤的方法

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JQuery+Ajax+Struts2+Hibernate框架整合實現完整的登錄注冊

        JQuery+Ajax+Struts2+Hibernate框架整合實現完整的登錄注冊:最近沒有項目做,閑著沒事,看到一個書城的網站很好,于是就是仿了一個,把里面的ui直接拿過來用,前端后端自己寫的,目前大部分的功能已經實現了。一、開發環境的部署程序結構:BootStrap+Ajax+Struts2+Hibernate+MySql僅供參考:能實現相關功能即可操作系
        推薦度:
        標簽: 注冊 實現 的注冊
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲一级黄色大片| 亚洲一卡二卡三卡| 四虎国产精品免费永久在线| 亚洲高清免费视频| 一级毛片视频免费观看| 狠狠色婷婷狠狠狠亚洲综合| 国产又黄又爽胸又大免费视频| 老司机亚洲精品影视www| a级大片免费观看| 亚洲第一极品精品无码久久| 久久综合九色综合97免费下载| 77777_亚洲午夜久久多人 | 三年片免费高清版 | 亚洲成A∨人片在线观看无码| 亚欧在线精品免费观看一区| 亚洲色欲色欲www| 永久免费视频v片www| 美女的胸又黄又www网站免费| 亚洲香蕉免费有线视频| 2020因为爱你带字幕免费观看全集| 亚洲激情黄色小说| 好爽…又高潮了毛片免费看| 特级毛片A级毛片免费播放| 久久综合亚洲色HEZYO国产| 人妻无码一区二区三区免费| 亚洲最大成人网色香蕉| 国产在线ts人妖免费视频| 成人性生交大片免费看中文| 亚洲美女激情视频| 免费一级特黄特色大片在线| 日韩精品免费在线视频| 自拍偷区亚洲国内自拍| 久久激情亚洲精品无码?V| 亚洲免费视频观看| 乱人伦中文视频在线观看免费| 国产精品亚洲片在线观看不卡 | 国产亚洲精品美女久久久| 国产精品色拉拉免费看| 成年网在线观看免费观看网址| 久久久久久久亚洲Av无码| 免费大香伊蕉在人线国产 |