問題:html
爲何有structsjava
做爲一種框架(frameset)能夠與傳統的mvc進行比較?web
MVC是一種模式數據處理、顯示和數據輸入分開,來規範開發,可是卻又並不規範。能夠這樣想:有三家公司,他們對於MVC有本身的理解和編寫方式因此編寫的方式卻又並不相同,這樣structs應運而生。apache
Structs是一種基於MVC的規範來進行開發。這樣再編程的過程當中能夠發現:編程
1.程序規範化了 mvc
2.程序編寫效率高 app
3.程序同時可維護性提升且可讀性加強。框架
但咱們能夠根據任何事物不能徹底的原則,因此這樣的方法也有缺陷,這裏就不細說了。jsp
簡單的提如下幾點供讀者考慮:工具
下面是struts的關鍵點:
struts若是僅僅只是會用工具而後點擊生成,那樣只能叫「點」過,不能叫學過。
任何程序開發須要明白流程,只有真正的原理才能在使用工具時明白底層的調用關係,在後續的遇到一些須要「真功夫」時才能拿得出手。
整個用structs進行測試的開發步驟(注:整個程序考慮是struts1.3.10 struts2在此基礎上改進):
1.創建工程
2.引入jar包
3.創建登陸login.jsp提交相應的數據表單
4.編寫actionform和action(關於login)
5.編寫struct-config.xml 用於配置actionform對應關係和跳轉的位置
6.編寫跳轉成功頁面wel.jsp和失敗頁面error.jsp
7.配置web.xml進行配置關鍵的actionservlet
8.進行測試
核心代碼:
1.跳轉到主界面:index.jsp (這樣具備更好的保密性)
2.登陸界面login.jsp
3.增長表單actionform
1 package com.ly.forms; 2 3 //用戶表單,用於填充數據 4 import org.apache.struts.action.ActionForm; 5 6 public class UserForm extends ActionForm { 7 8 //屬性定義(規範與jsp中的控件名同樣) 9 private String username; 10 private String passwd; 11 12 public String getUsername() { 13 return username; 14 } 15 public void setUsername(String username) { 16 this.username = username; 17 } 18 public String getPasswd() { 19 return passwd; 20 } 21 public void setPasswd(String passwd) { 22 this.passwd = passwd; 23 } 24 25 }
4.表單對應的action
package com.ly.actions; //這是一個action 須要繼承action import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ly.forms.UserForm; public class LoginAction extends Action { //execute可被自動調用 相似servlet dopost()方法 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // TODO Auto-generated method stub //把form強轉成對應的userform類 UserForm userform=(UserForm)form; System.out.println("用戶名="+userform.getUsername()+"密碼="+userform.getPasswd()); //return super.execute(mapping, form, request, response); //簡單驗證 if(userform.getPasswd().equals("123")) { //把用戶名放到request 對象域中 request.setAttribute("username", userform.getUsername()); //密碼123是合法用戶mapping 是直接返回actionServlet return mapping.findForward("ok"); } else { return mapping.findForward("err"); } } //須要重寫一個方法 }
5.添加struts配置文件
<?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> <!-- name 表單名字隨意 (小寫) --> <!-- type是表單的全路徑 --> <!-- 配置struts 中action 與actionForm的關係 --> <form-bean name="userForm" type="com.ly.forms.UserForm"/> </form-beans> <action-mappings> <!-- 配置具體 action 其path:表示未來訪問url --> <!--name: action與對應 actionForm的對應--> <!-- path:action全路徑 --> <action path="/login" name="userForm" type="com.ly.actions.LoginAction"> <!-- 這裏配置跳轉關係 --> <!-- name是結果名稱 path是轉發頁面 --> <forward name="ok" path="/WEB-INF/wel.jsp"/> <forward name="err" path="/WEB-INF/error.jsp"/> </action> </action-mappings> </struts-config>
6.(省略wel.jsp 和error.jsp 只需簡單寫寫就行必要時再添加)
進行web配置 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 配置structs --> <!-- 用actionServlet控制 --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <!-- 指明 配置文件 strcts-config路徑 --> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
struts配置細節
一個簡單的登錄測試
下面是流程的截圖(僅供參考):
actionServlet進行了實例化對象(反射機制),這樣才能對錶單進行添加數據(actionform)
注意 表單中的set和get方法
經過actionservlet來明細整個流程會對整個流程更加清晰
考慮:在此基礎上增長在成功界面顯示登陸者的用戶名
可是會出現中文亂碼問題(在wel.jsp中添加語句並不會有太多的用 考慮:整個流程在actionservlet中已然已經把數據添加到表單了)
(考慮使用過濾器)--記得在web.xml配置過濾器
主要代碼:
package com.ly.filters; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyFilter1 extends HttpServlet implements Filter { public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub //過濾方法 arg0.setCharacterEncoding("utf-8"); //設置接收編碼 arg2.doFilter(arg0, arg1); //必須(不然中止前進) arg1.setContentType("/text/html;charset=utf-8"); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
在web.xml中添加
效果:
以上僅是一個小的demo 僅供學習。
日進一小步,月過一大步~~加油!!