加密: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>