struts框架下的留言版

struts1屬於三層 架構中的表示層,是目前Java開源社區中最經典的一個Web MVC框架,有了struts框架,簡化開發,把主要精力放在業務處理上,提高了效率,前端控制器模式是stuts框架所採用的控制器模式.

編寫struts框架的不要步驟爲(自己總結的):

(1)創建一個頁面(message.jsp);

(2)建一個MessageForm 類,繼承ActionForm類,要求此類中的屬性必須和jsp頁中的字段一致.重寫validate()方法,用於驗證.

(3)建一個MessageAction類,繼承Action類,重寫execute()方法(此類類似於Servlet類,並把結果返回給ActionServlet,讓他作出跳轉).

(4) 配置struts-config.xml文件.

(5)在web.xml中配置ActionServlet類(此類不需要寫,只需配置即可)

整個步驟就是上面5個方面,流程大致是:當訪問頁面時,點擊登錄即提交,就直接訪問中央控制器ActionServlet,再加載並讀取struts-config.xml配置文件,看是否有Form對象,如果驗證並驗證失敗,就跳轉到input指向的頁面中,驗證成功就跳轉到loginAction類中,在調用Service類來與數據庫通訊.最後由LoginAction把請求返回給中央控制器ActionServlet,讓他確定如何跳轉(負責請求轉發).

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function senduser(){
var userInput = document.getElementById("username");
var xmlHttp = false;
//IE獲取XMLHttpRequest對象
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
//非IE瀏覽器獲取XMLHttpRequest對象
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}

//當服務器返回消息觸發該事件
xmlHttp.onreadystatechange = function(){
//當 服務器交互狀態爲4並且返回的消息狀態爲200時,接收服務器的消息文本
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var text = xmlHttp.responseText;
document.getElementById("userlabel").innerHTML = text;
}

};
//打開連接
xmlHttp.open("post","UserServlet",true);

//如果是POST提交,必須加入下面的請求頭纔可以傳遞參數到服務器.
//設置請求頭一定要放在打開連接之後進行
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

//發送請求
xmlHttp.send("username="+userInput.value);
}
function sendmessage(){
var messageInput = document.getElementById("textarea");
var xmlHttp = false;
//IE獲取XMLHttpRequest對象
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
//非IE瀏覽器獲取XMLHttpRequest對象
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}

//當服務器返回消息觸發該事件
xmlHttp.onreadystatechange = function(){
//當 服務器交互狀態爲4並且返回的消息狀態爲200時,接收服務器的消息文本
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var text = xmlHttp.responseText;


document.getElementById("textlabel").innerHTML = text;
}

};
//打開連接
xmlHttp.open("post","messageServlet",true);

//如果是POST提交,必須加入下面的請求頭纔可以傳遞參數到服務器.
//設置請求頭一定要放在打開連接之後進行
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

//發送請求
xmlHttp.send("message="+messageInput.value);
}

</script>


</head>
<body>
<c:if test="${messageList!=null }">
<table border="1">
<c:forEach items="${messageList }" var="element">
<tr>
<td>${element.messageName }說:</td>
<td>${element.messageContent }</td>
<td>${element.messageDate }</td>
</tr>
</c:forEach>
</table>
</c:if>
<!-- 以下這種驗證方式,屬於事前驗證.即當失去焦點,提交之前時驗證 -->
<!--<form action="login.do" method="post">
<p>
用戶名:<input type="text" id="username" name="username" onblur="senduser()" /><label id="userlabel"></label>
</p>
<p>
消息:<textarea cols="40" rows="5" id="textarea" name="textarea" onblur="sendmessage()" ></textarea><label id="textlabel"></label>
</p>
<p>
<input type="submit" value="提交"/>
</p>
</form> 
-->
<!-- 以下這種驗證方式,屬於事後驗證.即提交之後驗證,不會執行跳轉 -->
<form action="login.do" method="post">
<p>
用戶名:<input type="text" id="username" name="username" /><label><html:errors property="user_error"/></label>
</p>
<p>
消息:<textarea cols="40" rows="5" id="textarea" name="textarea"  ></textarea><label><html:errors property="text_error"/></label>
</p>
<p>
<input type="submit" value="提交"/>
</p>
</form>
</body>

</html>


public class MessageForm extends ActionForm{
private String username;
private String textarea;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getTextarea() {
return textarea;
}
public void setTextarea(String textarea) {
this.textarea = textarea;
}
@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(username==null||username.equals("")){
errors.add("user_error", new ActionMessage("user_info"));

}
if(textarea==null||textarea.equals("")){
errors.add("text_error", new ActionMessage("text_info"));

}
return errors;
}
}


public class MessageAction extends Action{
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

MessageForm messageform=(MessageForm)form;
MessageBean bean=new MessageBean();
bean.setMessageName(messageform.getUsername());
bean.setMessageContent(messageform.getTextarea());

MessageService service=new MessageService();
if(bean.getMessageName()!=null){
boolean flag=service.addMessage(bean);
}
List<MessageBean> messageList=service.findAllMessageinfo();
request.setAttribute("messageList", messageList);
if(messageList!=null){
return mapping.findForward("message");
}
else{
return mapping.findForward("error");
}

}

調用service等的操作略.

struts-config.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
       "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
       "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>

<form-beans>
<form-bean name="messageform" type="com.lovo.form.MessageForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/login" name="messageform" type="com.lovo.action.MessageAction"
validate="true" input="/Message.jsp">

<forward name="message" path="/Message.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.lovo.struts.Message"></message-resources>
</struts-config>      

web.xml文件中添加如下代碼(配置ActionServlet類):

 <servlet>
    <servlet-name>ActionServlet</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ActionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>



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