web框架-Struts開始

問題: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

注意 表單中的setget方法

經過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 僅供學習。

 

  日進一小步,月過一大步~~加油!!

相關文章
相關標籤/搜索