如何使用MyEclipse開發一個JavaWeb網站

如何使用MyEclipse開發一個JavaWeb網站

本文所述的內容僅用於參考或學習,主要針對畢業設計等網站設計,請勿實際用於生產開發用途,否則後果自負:


MyEclipse的安裝

這裏我使用的是MyEclipse10.7.1,下載地址 [ 度盤 ],密碼:6aw3。破解方法:博客,補丁下載地址:腳本之家

新建項目

打開MyEclipse後如圖所示:

MyEclipse
這裏的Java_SSH_Easyer是我已經建好的項目。我們點擊菜單欄的File->New->Web Project
新建

新建

內容 含義 註釋
Project Name 項目名 你項目叫什麼,推薦用英文
Location 存放位置 項目放在哪,默認放在工作空間裏
Source folder Src目錄 java源代碼放的位置,默認就src
web root folder 網站jsp目錄 前端資源等文件存放位置(網站根目錄)
J2EE Specification Level JavaEE版本 選最新的就好了

填寫完畢後點擊 Finish 就可以了

編碼

推薦使用UTF-8編碼進行編寫網站。修改方法:Window->Preferences->General->Workspace
Window->Preferences
General->Workspace
Text file Encoding欄選擇Other,下拉選擇UTF-8即可。

導入Struts2、Hibernate並配置MySQL

struts2
這裏寫圖片描述
選擇2.1並選擇/*
定義 B
MySQL
安裝MySQL:MySQL下載

安裝過程請按照這裏的教程進行安裝,注意編碼一定要填寫UTF-8

Hibernate
Hibernate必須在MySQL安裝之後進行(如果要求用sqlserver就安裝sqlserver後進行)
點擊Window->Open Perspective->MyEclipse Hibernate
MyEclipse Hibernate
MyEclipse Hibernate
右鍵點擊DB Browser,選new
New DB
New Driver
這裏按照如圖所示的內容進行填寫:
New Driver
這裏的mysql-connector-java-3.1.6-bin.jar在這裏下載
這裏的數據庫名就在你的數據庫管理軟件裏進行創建吧。個人用的phpMyAdmin,我想大多數人用的應該是Navicat For MySQL。
這裏配置好之後點擊Test Driver按鈕,如果出現如圖所示的窗口,那麼配置正確點擊Finish就可以了。如果發生錯誤檢查一下數據庫的用戶名密碼是否正確,數據庫是否開啓等問題。
這裏寫圖片描述
點擊右上角的MyEclipse圖標形狀的按鈕回到原來的頁面:
這裏寫圖片描述
右鍵點擊我們的項目,選擇MyEclipse->Add Hibernate Capabilities…項
這裏寫圖片描述
點擊Next,繼續Next到這個頁面:
這裏寫圖片描述
下拉DB Driver選擇我們剛剛創建的MySQL,再點擊Next後把Create SessionFactory的對勾點掉點擊Finish即可。

導入個人編寫的Java_SSH_Easyer

個人編寫的代碼並不適用於生產環境,如需應用請斟酌使用。

Github:JAVA_SSH_Easyer

下載ZIP後將/src/struts.xml內容複製到項目中src/struts.xml中保存。這個代碼中的大部分內容是範例內容。需要進行修改。
自己建立三個包,包名可以自己定,但最後要爲action、hibernate、tools例如你叫李華可以叫com.lihua.action,com.lihua.hibernate,com.lihua.tools:
這裏寫圖片描述
這裏寫圖片描述
將我的項目中src\com\pingjia中的三個文件夾中的java文件按包名拖到對應的包中:
這裏寫圖片描述
逐個打開文件,將裏面的所有com.pingjia改成你的包名如com.lihua。
這裏寫圖片描述
將zip中的webroot文件夾下的Public與User文件夾拷貝到項目的WebRoot文件夾下:
這裏寫圖片描述
將login.jsp上的包名改成你的包名。至此基本配置結束。

登錄Demo

現在用剛剛搭建好的框架寫一個登錄功能吧!
首先要確定登錄功能需要哪些內容:

  1. 登錄頁*1
  2. 登錄後的主頁*1
  3. 登錄功能*1

需要的數據:

  1. 用戶數據

第一步 建立數據表並逆向生成數據庫表爲實體類到項目

用戶數據需要用戶名、密碼、用戶id三項內容,所以我們在數據庫中創建一個User表:
這裏寫圖片描述
隨便插一個用戶,比如用戶名是admin,密碼是admin。
我們在mysql中建立了一個新表,所以要用Hibernate的逆向工程生成一個對應的實體類。我的範例中原有一個User實體類,將它刪掉:com.lihua.hibernate.User
原本範例中也有一個UserAction用作範例作用也可以刪掉重新建立:com.lihua.action.UserAction

新建逆向工程的方法:
這裏寫圖片描述
到Hibernate界面雙擊MySQL,在Connected to Mysql>你數據庫名>table下找到剛剛建立的user表:
這裏寫圖片描述
右鍵點擊它,然後點擊Hibernate Reverse Engineering
這裏寫圖片描述

打上JavaDataObject的對勾和Create POJO<>DB Table mapping information的對勾,去掉absolute對勾,java package選擇你對應的Hibernate包後點下一步:
這裏寫圖片描述
由於mysql支持auto increasement,id generator項選擇identity後點擊finish,提示will be overwritten選是就行了。
這裏寫圖片描述
返回myeclipse界面後我們會看到com.lihua.hibernate包下出現了一個User.java類,說明逆向工程成功了。

第二步 創建Action並處理業務請求

這裏使用Action用於處理業務內容,struts.xml用於處理Action具體方法與jsp、路由(對應瀏覽網址)的對應關係。

Created with Raphaël 2.1.2用戶用戶服務器服務器struts.xml處理程序struts.xml處理程序ActionAction對應jsp頁面對應jsp頁面①網址②解析後的網址③請求實例方法④實例方法返回值⑤Action傳遞的數據⑥最終頁面⑦最終頁面

用戶訪問網址後服務器根據struts進行解析,新建指定Action的實例並調用指定方法,並根據方法返回值顯示指定頁面。
我們在com.lihua.action中新建一個類,名字叫UserAction繼承自BaseAction並重寫check方法:

package com.lihua.action;
public class UserAction extends BaseAction{
    @Override
    public boolean check() {
        // TODO Auto-generated method stub
        return false;
    }
}

這個check方法就是Action的攔截器,默認返回true就可以了。如果有需要可以判斷登錄狀態。這裏要寫登錄功能,所以不能讓check返回false。
我們新建的這個Action類相當於一類頁面和功能的集合,這裏UserAction處理用戶相關的頁面請求,一會要建立的HomeAction用於處理後臺相關頁面的請求。
這裏我們有兩個任務:1.登錄頁,2.登錄功能
登錄頁暫時不需要向前端傳送什麼,所以直接返回SUCCESS;就可以了。登錄功能需要判斷登錄所用用戶名與密碼是否正確,所以要調用數據庫。首先建立兩個方法:

public String login(){
    return SUCCESS;
}
public String checkLogin(){
    return SUCCESS;
}

所有頁面請求的方法都需要返回String,後續需要在struts.xml中添加。
有關數據處理:
在checkLogin中我們需要獲取前端傳來的數據。我在BaseAction中對數據獲取進行了封裝,在方法中直接使用p方法即可:

String username = p("username");
String password = p("password");

查詢數據庫使用M方法的各種操作即可。詳情請看Readme.md

DB_Where where = new DB_Where();
where.setWhere("username", username);
where.setWhere("password", password);
List<User> s = (List<User>) M("User").where(where).select();
if(s.isEmpty())
    return error("登錄失敗");

判斷s是否爲空即可判斷用戶名密碼是否正確了。這裏的error方法是BaseAction的封裝,用於功能類方法的成功與失敗提示與跳轉,有三個重載,第一個參數是提示內容,必須要有。第二個參數是目標跳轉的url,默認是上一個頁面。第三個參數是等待時間,默認error5秒,success2秒。

登錄成功後需要將數據寫入到session中。這裏BaseAction也進行了封裝,使用session(“鍵名”,值);即可存儲session,使用session(“鍵名”);即可讀取session。
所以登錄功能的完整代碼:

package com.lihua.action;

import java.util.List;

import com.lihua.hibernate.User;
import com.lihua.tools.DB_Where;

public class UserAction extends BaseAction{
    private static final long serialVersionUID = -4987597667769252852L;
    @Override
    public boolean check() {
        // TODO Auto-generated method stub
        return true;
    }
    public String login(){
        return SUCCESS;
    }
    public String checkLogin(){
        String username = p("username");
        String password = p("password");
        DB_Where where = new DB_Where();
        where.setWhere("username", username);
        where.setWhere("password", password);
        List<User> s = (List<User>) M("User").where(where).select();
        if(s.isEmpty())
            return error("登錄失敗");
        session("User",s.get(0));
        return success("登錄成功","Home/index");
    }
}

我們再建立一個HomeAction當做臨時的後臺Action:

package com.lihua.action;

public class HomeAction extends BaseAction{
    private static final long serialVersionUID = -4972832333971194628L;
    @Override
    public boolean check() {
        if(session("User")==null)
            return false;
        return true;
    }
    public String index(){
        return SUCCESS;
    }
}

第三步 編寫struts.xml

打開src/struts.xml,內容如下:

<?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和類名一致最好,namespace設置成/類名就可以了,主要用於u方法獲取鏈接,方便管理,加強可讀性-->
    <package name="User" namespace="/User" extends="struts-default">
    <!--下面兩句創建package就要加上,因爲success與error方法用了-->
    <global-results>
      <result name="input">/Public/success.jsp</result>
      <result name="error">/Public/error.jsp</result>  
    </global-results>
    <!--下面action名稱就隨便命了,不過推薦以類方法命名。後面class和method就是要調用的Action的方法了。-->
        <action name="login" class="com.pingjia.action.UserAction" method="login">
      <!--result就寫一個就行了。有特殊需求就多寫。如果action方法返回只有error()或success()那就不用寫result。-->
            <result name="success">/User/login.jsp</result>
        </action>
        <action name="reg" class="com.pingjia.action.UserAction" method="reg">
            <result name="success">/User/reg.jsp</result>
        </action>
        <action name="checkLogin" class="com.pingjia.action.UserAction" method="checkLogin">
            <result name="success" type="redirectAction">login</result>
        </action>
        <action name="checkReg" class="com.pingjia.action.UserAction" method="checkReg">
            <result name="success" type="redirectAction">login</result>
        </action>
        <action name="logout" class="com.pingjia.action.UserAction" method="logout">
            <result name="success" type="redirectAction">login</result>
        </action>
    </package>
</struts>

根據我們頁面的設計我們共有三個頁面:Home/index、User/login、User/checkLogin,兩個Action。所以要建立兩個package(globa-results是Action中success與error方法要用到的,每個package都要添加):

<?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="User" namespace="/User" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
    </package>
    <package name="Home" namespace="/Home" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
    </package>
</struts>

逐個添加方法:
login(需要顯示前端,所以要寫好success):

<action name="login" class="com.lihua.action.UserAction" method="login">
    <result name="success">/User/login.jsp</result>
</action>

checkLogin:

<action name="checkLogin" class="com.lihua.action.UserAction" method="checkLogin"></action>

index:

<action name="index" class="com.lihua.action.HomeAction" method="index">
    <result name="success">/Home/index.jsp</result>
</action>

最終生成的struts.xml:

<?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="User" namespace="/User" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <!--下面action名稱就隨便命了,不過推薦以類方法命名。後面class和method就是要調用的Action的方法了。-->
        <action name="login" class="com.lihua.action.UserAction" method="login">
            <result name="success">/User/login.jsp</result>
        </action>
        <action name="checkLogin" class="com.lihua.action.UserAction" method="checkLogin"></action>
    </package>
    <package name="Home" namespace="/Home" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <action name="index" class="com.lihua.action.HomeAction" method="index">
            <result name="success">/Home/index.jsp</result>
        </action>
    </package>
</struts>

第四步 創建jsp頁面

根據我們struts.xml的設置,我們需要建立兩個文件:
/Home/index.jsp/User/login.jsp,這兩個一個是後臺首頁,另一個是登錄頁。我們新建這兩個文件,推薦從原有login.jsp複製並重命名。
登錄頁需要提交一個username,password的表單到/User/checkLogin
於是可以在login.jsp頁面寫:

<form action="<%=Tool.u("User/checkLogin")%>" method="POST">
    <p>用戶名<input type="text" name="username"></p>
    <p>密碼<input type="text" name="password"></p>
    <p><button type="submit">提交</button></p>
</form>

Home/index.jsp暫時不寫。
網站默認訪問的頁面是根目錄下的index.jsp,我們可以在index.jsp下寫一個跳轉js跳轉到login功能。把WebRoot/User/login.jsp內容直接複製到WebRoot下的index.jsp裏並保存,並寫一段js:

<script>location.href="<%=Tool.u("User/login")%>";</script>

下面我們就可以運行測試了,右鍵點擊我們的項目,點擊Run As->MyEclipse Server Application運行。然後就能看到我們的登錄頁面了。隨便輸個錯誤密碼點登錄,然後輸正確密碼點登錄測試一下看看效果吧~
這裏寫圖片描述
這個是我從tp模板上套來的,覺得不美觀可以替換修改成自己喜歡的頁面,位置在WebRoot/Public下。

內容管理DEMO

說到管理,無非就是增刪改查。那麼我們怎麼在javaweb下進行增刪改查呢?
下面我們來寫一個用戶管理的例子

我們在UserAction中進行編寫userList方法,Action只負責權限的驗證與數據的處理。

public String userList(){
    if(session("User")==null)
        return error("請登錄","User/login");
    User u = (User)session("User");
    if(u.getId()!=1)
        return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
    this.assign("userlist", M("User").select());
    return SUCCESS;
}

struts.xml略
jsp頁面:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<table>
    <tr>
        <th>用戶id</th>
        <th>用戶名</th>
    </tr>
    <s:iterator value="userlist" id="u">
        <tr>
            <td><s:property value="#u.id" /></td>
            <td><s:property value="#u.username" /></td>
        </tr>
    </s:iterator>
</table>

這裏的s標籤用法盡情的百度搜索一大堆。

我們在UserAction中進行編寫addUser方法。

public String addUser(){
    if(session("User")==null)
        return error("請登錄","User/login");
    User u = (User)session("User");
    if(u.getId()!=1)
        return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
    if(p("username")!=null){//添加用戶
        User s = new User();
        s.setUsername(p("username"));
        s.setPassword(p("password"));
        M("User").add(s);
        return success("添加成功","User/userList");
    }
    return SUCCESS;
}

struts.xml略
jsp頁面:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<form action="" method="POST">
    <p><input type="text" name="username"></p>
    <p><input type="text" name="password"></p>
    <p><button>添加</button></p>
</form>

我們在UserAction中進行編寫delUser方法。

public String delUser(){
    if(session("User")==null)
        return error("請登錄","User/login");
    User u = (User)session("User");
    if(u.getId()!=1)
        return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
    if(p("uid")==null)
        return error("非法操作");
    int uid=0;
    try{
        uid=Integer.parseInt(p("uid"));//get傳個uid過來就能刪了這個用戶了。
    }catch(Exception e){
        return error("非法操作");
    }
    M("User").delete(uid);
    return success("刪除成功","User/userList");
}

struts.xml略
可以在userList頁面中這樣調用:

<a href="<%=Tool.u("User/delUser")%>?uid=<s:property value="#u.id" />">刪除</a>

我們在UserAction中進行編寫editUser方法。

public String editUser(){
        if(session("User")==null)
            return error("請登錄","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
        if(p("id")!=null){//提交了
            int id=0;
            try{
                id=Integer.parseInt(p("id"));//get傳個uid過來就能刪了這個用戶了。
            }catch(Exception e){
                return error("非法操作");
            }
            User sv = (User) M("User").find(id);
            if(sv==null)
                return error("用戶不存在");
            sv.setPassword(p("password"));
            sv.setUsername(p("username"));
            M("User").save(sv);
            return success("修改成功","User/userList");
        }
        if(p("uid")==null)
            return error("非法操作");
        int uid=0;
        try{
            uid=Integer.parseInt(p("uid"));//get傳個uid過來就能刪了這個用戶了。
        }catch(Exception e){
            return error("非法操作");
        }
        User s = (User) M("User").find(uid);
        if(s==null)
            return error("用戶不存在");
        this.assign("user",s);
        return SUCCESS;
    }

struts.xml略
jsp:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<form action="" method="POST">
    <p><input type="text" name="username" value="<s:property value='#user.username' />"></p>
    <p><input type="text" name="password" value="<s:property value='#user.password' />"></p>
    <input type="hidden" name="id" value="<s:property value='#user.id' />">
    <p><button>保存</button></p>
</form>

綜合

修改userList.jsp爲如下內容:

<%@ page language="java" import="java.util.*,com.lihua.tools.Tool" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<a href="<%=Tool.u("User/addUser")%>">新增</a>
<table>
    <tr>
        <th>用戶id</th>
        <th>用戶名</th>
        <th>操作</th>
    </tr>
    <s:iterator value="userlist" id="u">
        <tr>
            <td><s:property value="#u.id" /></td>
            <td><s:property value="#u.username" /></td>
            <td>
                <a href="<%=Tool.u("User/delUser")%>?uid=<s:property value="#u.id" />">刪除</a>
                <a href="<%=Tool.u("User/editUser")%>?uid=<s:property value="#u.id" />">修改</a>
            </td>
        </tr>
    </s:iterator>
</table>

效果如圖:
這裏寫圖片描述

總結

基本的管理頁面骨架已經出來了。最後需要大家根據各種模板的樣式等等對骨架進行加工。
登錄後的Home/index可以存放一個iframe用於加載用戶菜單頁面。登錄頁面模板也很多。當然也很推薦大家自己用基本的框架寫諸如bootstrap,layui之類的。如果在寫代碼的時候遇到什麼問題請在下方回覆,我會盡量幫忙解決。

附錄

最終struts.xml:

<?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="User" namespace="/User" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <!--下面action名稱就隨便命了,不過推薦以類方法命名。後面class和method就是要調用的Action的方法了。-->
        <action name="login" class="com.lihua.action.UserAction" method="login">
            <result name="success">/User/login.jsp</result>
        </action>
        <action name="userList" class="com.lihua.action.UserAction" method="userList">
            <result name="success">/User/userList.jsp</result>
        </action>
        <action name="addUser" class="com.lihua.action.UserAction" method="addUser">
            <result name="success">/User/addUser.jsp</result>
        </action>
        <action name="editUser" class="com.lihua.action.UserAction" method="editUser">
            <result name="success">/User/editUser.jsp</result>
        </action>
        <action name="delUser" class="com.lihua.action.UserAction" method="delUser"></action>
        <action name="checkLogin" class="com.lihua.action.UserAction" method="checkLogin"></action>
    </package>
    <package name="Home" namespace="/Home" extends="struts-default">
        <global-results>
          <result name="input">/Public/success.jsp</result>
          <result name="error">/Public/error.jsp</result>  
        </global-results>
        <action name="index" class="com.lihua.action.HomeAction" method="index">
            <result name="success">/Home/index.jsp</result>
        </action>
    </package>
</struts>

最終UserAction.java

package com.lihua.action;

import java.util.List;

import com.lihua.hibernate.User;
import com.lihua.tools.DB_Where;
import com.lihua.tools.Tool;

public class UserAction extends BaseAction{
    private static final long serialVersionUID = -4987597667769252852L;
    @Override
    public boolean check() {
        // TODO Auto-generated method stub
        return true;
    }
    public String login(){
        return SUCCESS;
    }
    public String checkLogin(){
        String username = p("username");
        String password = p("password");
        DB_Where where = new DB_Where();
        where.setWhere("username", username);
        where.setWhere("password", password);
        List<User> s = (List<User>) M("User").where(where).select();
        if(s.isEmpty())
            return error("登錄失敗");
        session("User",s.get(0));
        return success("登錄成功","Home/index");
    }
    public String userList(){
        if(session("User")==null)
            return error("請登錄","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
        List<?> l = M("User").select();
        this.assign("userlist", l);
        return SUCCESS;
    }
    public String addUser(){
        if(session("User")==null)
            return error("請登錄","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
        if(p("username")!=null){//添加用戶
            User s = new User();
            s.setUsername(p("username"));
            s.setPassword(p("password"));
            M("User").add(s);
            return success("添加成功","User/userList");
        }
        return SUCCESS;
    }
    public String delUser(){
        if(session("User")==null)
            return error("請登錄","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
        if(p("uid")==null)
            return error("非法操作");
        int uid=0;
        try{
            uid=Integer.parseInt(p("uid"));
        }catch(Exception e){
            return error("非法操作");
        }
        M("User").delete(uid);
        return success("刪除成功","User/userList");
    }
    public String editUser(){
        if(session("User")==null)
            return error("請登錄","User/login");
        User u = (User)session("User");
        if(u.getId()!=1)
            return error("請登錄","User/login");//規定uid是1的才能管理用戶列表
        if(p("id")!=null){//提交了
            int id=0;
            try{
                id=Integer.parseInt(p("id"));//get傳個uid過來就能刪了這個用戶了。
            }catch(Exception e){
                return error("非法操作");
            }
            User sv = (User) M("User").find(id);
            if(sv==null)
                return error("用戶不存在");
            sv.setPassword(p("password"));
            sv.setUsername(p("username"));
            M("User").save(sv);
            return success("修改成功","User/userList");
        }
        if(p("uid")==null)
            return error("非法操作");
        int uid=0;
        try{
            uid=Integer.parseInt(p("uid"));//get傳個uid過來就能刪了這個用戶了。
        }catch(Exception e){
            return error("非法操作");
        }
        User s = (User) M("User").find(uid);
        if(s==null)
            return error("用戶不存在");
        this.assign("user",s);
        return SUCCESS;
    }
}

轉載請註明出處謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章