天天看點

資料采集系統開發流程-2

加密:md5 sha1

--------------------------

public class DataUtil {

    public static String md5(String src){

        try {

            StringBuffer buffer = new StringBuffer();

            char[] chars = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

            byte[] bytes = src.getBytes();

            MessageDigest md = MessageDigest.getInstance("MD5");

            byte[] targ = md.digest(bytes);

            for(byte b: targ){

                buffer.append(chars[(b >> 4) & 0x0F]);

                buffer.append(chars[b & 0x0F]);

            }

            return buffer.toString();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null ;

    }

}

配置spring的監聽器(web.xml)

--------------------------

<!-- 通過上下文參數配置spring檔案的位置 -->

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:beans.xml</param-value>

</context-param>

<!-- 上下文載入器監聽器,確定web伺服器啟動時,直接完成spring容器的初始化 -->

<listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

功能性:

到達注冊頁面

1.導航欄-->使用者注冊連結

2.進入RegAction.toRegPage()方法

    public String toRegPage(){

        return "regPage" ;

    }

3.struts.xml

    <action name="RegAction_*" class="regAction" method="{1}">

        <result name="regPage">/reg.jsp</result>

    </action>

4.跳轉到/reg.jsp

    <s:form>

        <s:textfield name="email" />

        ...

    </s:form>

進行使用者注冊

------------------

1.注冊頁面--->送出

2.RegAction.doReg()方法

    public String doReg(){

        1.接受使用者資訊--model

        2.userService.saveEntity(model);

        3.return "success" ;

    }

    public void validate(){

        1.非空

        2.密碼一緻性

        3.email是否占用

    }

3.struts.xml

    <action ...>

        <result name="success">/index.jsp</result>

        <result name="input">/reg.jsp</result>

    </action>

4.跳轉到/reg.jsp|/index.jsp

進入登陸

---------------------------

1.導航欄-->首頁

2.LoginAction.toLoginPage()

    public String toLoginPage()

    {

        1.return "loginPage" ;

    }

3.struts.xml

    <action name="LoginAction_*" class=""  method="">

        <result name="loginPage">/index.jsp</result>

        <result name="input">/index.jsp</result>

    </action>

4.跳轉到/index.jsp

進行登陸驗證

-------------------

1.登陸頁面-->送出

2.LoginAction.doLogin()

    public String doLogin(){

        return "success";

    }

    public void validate(){

        1.驗證登陸資訊

            User user = userService.validateLoginInfo(model.getEmail(),DataUtil.md5(model.getPassword()));

            public User validateLoginInfo(String email,String md5){

                String hql = "from User u where u.email = ? and u.password = ?" ;

                List<User> list = this.findEntityByHQL(hql,email,md5);

                return ValidateUtil.isValid(list)?list.get(0):null;

            }

        2.失敗:錯誤資訊,index.jsp

        3.成功:user --> session

    }

3.struts.xml

    <action ..>

        <result name="success">/index.jsp</result>

    </action>

檢視我的調查清單

----------------------

1.導航欄-->我的調查

2.SurveyAction.mySurveys()方法

    public String mySurveys(){

        1.session --> user

        2.this.mySurveys = surveyService.findMySurveys(user);

            public List<Survey> findMySurveys(User user){

                String hql = "from Survey s where s.user.id = ?" ;

                return surveyDao.findEntityByHQL(hql,user.getId());

            }

        3.return "mySurveyListPage";

    }

3.struts.xml

    <.

4.跳轉到/mySurveyList.jsp

    <s:iterator value="mySurveys" var="s">

        <s:property value="#s.id" />

        <s:property value="#s.title" />

        <s:date name="#s.createTime" format="yyyy-MM-dd hh:mm" />

    </s:iterator>

建立調查

-----------------------

1.導航欄-->建立調查

2.SurveyAction.newSurvey()

    public String newSurvey(){

        1.session --> user

        2.this.model = surveyService.newSurvey(user);

            public Survey newSurvey(User user){

                Survey s = new Survey();

                Page p = new Page();

                p.setSurvey(s);

                s.getPages().add(p);

                surveyDao.saveEntity(s);

                pageDao.saveEntity(p);

                return s ;

            }

        3.return "designSurveyPage" ;

    }

3.struts.xml

    <result name="designSurveyPage">/designSurvey.jsp</result>

4.跳轉到/designSurvey.jsp

登陸攔截器

-----------------------

public class LoginInterceptor implements Interceptor {

    private static final long serialVersionUID = 4230211839075439660L;

    public void destroy() {

    }

    public void init() {

    }

    public String intercept(ActionInvocation arg0) throws Exception {

        BaseAction action = (BaseAction) arg0.getAction();

        if(action instanceof LoginAction

                || action instanceof RegAction){

            return arg0.invoke();

        }

        else{

            User user = (User) arg0.getInvocationContext().getSession().get("user");

            if(user == null){

                //去登陸

                return "login" ;

            }

            else{

                //放行

                return arg0.invoke();

            }

        }

    }

}

注冊攔截器

------------------------

<interceptors>

    <!-- 注冊登陸攔截器 -->

    <interceptor name="loginInterceptor" class="com.atguigu.surveypark.struts2.interceptor.LoginInterceptor" />

    <!-- 定義攔截器棧 -->

    <interceptor-stack name="surveyparkStack">

        <interceptor-ref name="loginInterceptor" />

        <interceptor-ref name="defaultStack" />

    </interceptor-stack>

</interceptors>

<!-- 定義預設棧 -->

<default-interceptor-ref name="surveyparkStack" />

使用UserAware接口在登陸攔截器中統一将User對象注入給action.

設計調查頁面分析:

------------------------------

<!-- 調查标題 -->

<s:property value="title" />

<!-- 輸出頁面集合 -->

<s:iterator value="pages" var="p">

    <!-- 頁面标題 -->

    <s:property value="#p.title" />

    <!-- 疊代問題集合 -->

    <s:iterator value="#p.questions" var="q">

        <!-- 問題标題 -->

        <s:property value="#q.title" />

        <!-- 處理選項輸出 -->

        <s:set var="qt" value="#q.questionType" />

        <!-- 0,1,2,3 -->

        <s:if test="#qt < 4">

            <s:iterator value="#q.optionArr">

                <input type="<s:property value="#qt < 2?'radio':'checkbox'" />"><s:property />

                <!-- 是否攜帶br -->

                <s:if test="#qt == 1 || #qt == 3"><br></s:if>

            </s:iterator>

            <!-- 是否帶其他 -->

            <s:if test="other">

                <input type="<s:property value="#qt < 2?'radio':'checkbox'" />">其他

                <!-- 其他項樣式 -->

                <s:if test="#q.otherStyle == 1">

                    <!-- 文本框 -->

                    <input type="text">

                </s:if>

                <s:elseif test="#q.otherStyle == 2">

                    <!-- 下拉清單 -->

                    <select>

                        <s:iterator value="#q.otherSelectOptions">

                            <option><s:property /></option>

                        </s:iterator>

                    </select>

                </s:elseif>

            </s:if>

        </s:if>

        <!-- 4,5 -->

        <s:elseif test="#qt == 4 || #qt == 5">

            <!-- 下拉清單 -->

            <s:if test="#qt == 4">

                <select>

                    <s:iterator value="#q.options">

                        <option><s:property /></option>

                    </s:iterator>

                </select>

            </s:if>

            <s:elseif test="#qt == 5">

                <input type="text">

            </s:elseif>

        </s:elseif>

        <!-- 6,7,8:矩陣式問題 -->

        <s:elseif test="#qt > 5">

            <table>

                <!-- 表頭 -->

                <tr>

                    <td></td>

                    <s:iterator value="#q.matrixColTitleArr">

                        <td><s:property /></td>

                    </s:iterator>

                </tr>

                <!-- 輸出n多行 -->

                <s:iterator value="#q.matrixRowTitleArr">

                    <tr>

                        <td><s:property /></td>

                        <s:iterator value="#q.matrixColTitleArr">

                            <td>

                                <s:if test="#qt == 6"><input type="radio"></s:if>

                                <s:if test="#qt == 7"><input type="checkbox"></s:if>

                                <s:if test="#qt == 8">

                                    <select>

                                        <s:iterator value="#q.matrixSelectOptionArr">

                                            <option><s:property /></option>

                                        </s:iterator>

                                    </select>

                                </s:if>

                            </td>

                        </s:iterator>

                    </tr>

                </s:iterator>

            </table>

        </s:elseif>

    </s:iterator>

</s:iterator>