java的struts架構的搭建,可以用工具自動的配置,雖然很友善.可是對于初學者而言,它隐藏了很多細節,不知道struts是如何遵循MVC模式的.
下面,我來給大家示範一下如何手動配置struts,希望能給大家一些幫助.
具體步驟:
1.先建立一個web工程
2.把struts開發包引入web工程(WEB-INF/lib)
3.編寫login.jsp,wel.jsp和err.jsp
4.編寫ActionForm(使用者表單)和Action
5.編寫struts-config.xml檔案,該檔案用于配置Action,ActionForm,對應關系,跳轉位置,一般将這個檔案放在/WEB-INF目錄下.
6.配置web.xml檔案,該檔案用于配置ActionServlet
7.測試.
流程圖如下:
下面我在說說具體的實作細節
1.web應用的目錄如下
2将struts的全部jar包導入到WEB-INF/lib目錄下
jar包在解壓後的struts檔案夾的lib下
3.login.jsp,err.jsp和wel.jsp是在WEB-INF目錄下的,這樣桌的目的是,使檔案更安全.
login.jsp的代碼如下
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="/strutsLogin/login.do" method="post">
u:<input type="text" name="usename"><br>
p:<input type="password" name="passwd"><br>
<input type="submit" value="login">
</form>
</body>
</html>
err.jsp的代碼如下
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
error
</body>
</html>
wel.jsp的代碼如下
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
welcome!
</body>
</html>
因為login.jsp是放在WEB-INF目錄下的,如何才能通路到呢?
在webroot下建立一個index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="/WEB-INF/login.jsp"></jsp:include>
</body>
</html>
這樣通路index.jsp,就會跳轉到login.jsp檔案去了
.
4.編寫ActionForm(使用者表單)和Action
ActionForm表單是用來存儲資料的
UserForm.java的代碼如下
package com.hsp.forms;
//這是一個使用者表單,用于填充資料
import org.apache.struts.action.ActionForm;
public class UserForm extends ActionForm {
//定義屬性[這裡有一個規範,我們定義屬性名字的時候]
//應該和jsp頁面的控件名稱一樣.如果有人提出疑問
//說表單的屬性名字一定和控件名字一樣,不一定,
//隻要set方法和get方法的名字和控件一緻.
private String usename;
private String passwd;
public String getUsename() {
return usename;
}
public void setUsename(String usename) {
this.usename = usename;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
LoginAction.java如下
package com.hsp.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//這是一個action(表示小隊長,需要繼承action)
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.hsp.forms.UserForm;
public class LoginAction extends Action {
//我們需要重寫一個方法:execute會被自動調用
//有點類似servlet/service/doGet/doPost方法
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
//把form轉成UserForm對象
UserForm userForm=(UserForm)form;
System.out.println("使用者名="+userForm.getUsename());
//簡單驗證
if("123".equals(userForm.getPasswd())){
//如果密碼是123,就認為是合法使用者
//跳轉到wel.jsp
return mapping.findForward("ok");
}else {
return mapping.findForward("err");
}
}
}
5.編寫struts-config.xml檔案,該檔案用于配置Action,ActionForm,對應關系,跳轉位置,一般将這個檔案放在/WEB-INF目錄下.
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表單 -->
<form-beans>
<!-- name是表單名字,可以随意寫 建議取名規範,表單類名小寫-->
<!-- type用于指定表單類的全路徑 -->
<form-bean name="userForm" type="com.hsp.forms.UserForm"/>
</form-beans>
<!-- 配置action -->
<action-mappings>
<!-- 配置具體的一個action -->
<!-- path:表示将來通路該action的資源名:
http://localhost:8080/web/path? -->
<!-- name:用于關聯某個表單 -->
<!-- type:用于指定該action的全路徑 -->
<action path="/login" name="userForm" type="com.hsp.actions.LoginAction">
<!-- 這裡配置跳轉關系 -->
<!-- name:表示結果名稱 -->
<!-- path:表示轉發到那個頁面去 -->
<forward name="ok" path="/WEB-INF/wel.jsp"/>
<forward name="err" path="/WEB-INF/err.jsp"/>
</action>
</action-mappings>
</struts-config>
6.配置web.xml檔案,該檔案用于配置ActionServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>strutsLogin</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 配置struts-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>
</web-app>
這樣就配置完成了.通路index.jsp.
當第二個輸入123時,就會跳轉到wel.jsp頁面
如果不是就會跳轉到err.jsp中去.