程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Java的Struts框架下停止web編程的入門教程

在Java的Struts框架下停止web編程的入門教程

編輯:關於JAVA

在Java的Struts框架下停止web編程的入門教程。本站提示廣大學習愛好者:(在Java的Struts框架下停止web編程的入門教程)文章只能為提供參考,不一定能成為您想要的結果。以下是在Java的Struts框架下停止web編程的入門教程正文


當點擊一個超鏈接或提交一個HTML表單在Struts2 的 Web運用法式,輸出所搜集被發送到一個Java類稱為操作掌握器。當舉措履行後,成果選擇了一個資本來出現呼應。資本平日是一個JSP,但它也能夠是一個PDF文件,Excel電子表格,或一個Java applet 窗口。

假定曾經樹立開辟情況。如今讓我們持續為第一個 “Hello World” 的 struts2 項目構建。這個項目標目標是樹立一個Web運用法式,它搜集用戶的姓名,並顯示“Hello World” 用戶名。我們將創立任何Struts2項目標四個構成部門:

我盤算應用Eclipse IDE,所以一切必須的組件將創立一個靜態Web項面前目今。所以,讓我們開端創立靜態Web項目。

創立靜態Web項目:
啟動Eclipse,然後再 File > New > Dynamic Web Project 輸出工程稱號為 HelloWorldStruts2 並設置屏幕中給出其他的選項:

選擇在接上去的畫面中的一切默許選項和最初檢討 Generate Web.xml deployment descriptor 選項. 這將創立一個靜態Web項目在Eclipse。如今去 Windows > Show View > Project Explorer, 會看到項目窗口的器械以下:

如今復制以下文件從struts 2 lib 文件夾 C:struts-2.2.3lib 到工程 WEB-INFlib 文件夾,要做到這一點,你可以簡略地將以下的一切文件拖放復制到WEB-INF lib文件夾。

  • commons-fileupload-x.y.z.jar
  • commons-io-x.y.z.jar
  • commons-lang-x.y.jar
  • commons-logging-x.y.z.jar
  • commons-logging-api-x.y.jar
  • freemarker-x.y.z.jar
  • javassist-.xy.z.GA
  • ognl-x.y.z.jar
  • struts2-core-x.y.z.jar
  • xwork-core.x.y.z.jar

創立舉措類:
Action類是 Struts2 運用法式的症結,我們完成的年夜部門舉措類中的營業邏輯。是以,讓我們創立一個Java文件HelloWorldAction.java Java Resources > src 鄙人面給出的內容包名 com.yiibai.struts2 。

Action類呼應用戶操作,當用戶點擊一個URL。 Action類中的辦法中的一個或多個被履行並前往一個字符串成果。基於成果的值,一個特定的JSP頁面的出現方法。

package com.yiibai.struts2;

public class HelloWorldAction{
 private String name;

 public String execute() throws Exception {
  return "success";
 }
 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}

這是一個異常簡略的類,一個名為“name”屬性。我們有尺度的“name”屬性的getter和setter辦法​​,並前往字符串“success”的履行辦法。

Struts2框架將創立一個對象HelloWorldAction類並挪用履行辦法在呼應用戶的舉措。把營業邏輯外面的execute辦法,最初前往的字符串常量。簡略地說為每一個網址,必需履行一個舉措類,要末便可以直接應用這個類的稱號作為操作名,也能夠應用struts.xml文件以下所示映照到一些其他的名字。

創立視圖
我們須要一個JSP提交最初的新聞,這個頁面會被稱為Struts2框架一個預界說的舉措時,會產生這類映照將被界說在struts.xml文件。是以,讓我們一路發明在Eclipse項目在WebContent文件夾上面的jsp文件helloWorld.jsp。要做到這一點,右鍵單擊WebContent文件夾在項目資本治理器,選擇New >JSP File。 .

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
 Hello World, <s:property value="name"/>
</body>
</html>

taglib指令告知Servlet容器,這個頁面將應用Struts 2的標簽,這些標簽將之前由s。 s:property標簽顯示舉措類屬性"name> HelloWorldAction類的getName()辦法前往的值。

創立主頁:
我們還須要在WebContent文件夾中創立的index.jsp。該文件將作為初始舉措URL,用戶可以在個中點擊告知Struts 2框架挪用 HelloWorldAction類界說的辦法出現 helloWorld.jsp 視圖。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
 <h1>Hello World From Struts2</h1>
 <form action="hello">
  <label for="name">Please enter your name</label><br/>
  <input type="text" name="name"/>
  <input type="submit" value="Say Hello"/>
 </form>
</body>
</html>

Hello 舉措界說在下面的視圖文件將被映照到HelloWorldAction類和其履行辦法應用struts.xml文件。當用戶點擊“提交”按鈕,將招致Struts2框架運轉的履行辦法界說的在個中,HelloWorldAction類依據前往值的辦法,將響應的視圖選擇和襯著作為呼應。

設置裝備擺設文件
我們須要一個映照,以合營網址,HelloWorldAction類(模子),和的helloWorld.jsp的(視圖)。映照講述了Struts 2框架類將呼應用戶的操作(URL),這個類的辦法將被履行,檢查襯著基於字符串成果,該辦法前往。

是以,讓我們創立一個名為struts.xml中。因為Struts2 請求struts.xml中存在類“文件夾中。是以,創立struts.xml文件的WebContent/ WEB-INF/classes文件夾下。 Eclipse不創立“classes”文件夾,所以須要本身做。要做到這一點,在項目資本治理器的WEB-INF文件夾上點擊右鍵並選擇New > Folder。struts.xml中應當像如許:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
 <package name="helloworld" extends="struts-default">
  
  <action name="hello" 
   class="com.yiibai.struts2.HelloWorldAction" 
   method="execute">
   <result name="success">/HelloWorld.jsp</result>
  </action>
 </package>
</struts>

下面的設置裝備擺設文件的幾句話。在這裡,我們設置為 true常量struts.devMode,由於我們正在法式開辟情況,我們須要看到一些有效的日記新聞。然後,我們界說了一個名為HelloWorld 包。創立一個包是有效的,當想一路停止分組舉措。在我們的例子中,我們將我們的行為定名為“hello”,這是響應的URL /hello.action 和備份HelloWorldAction.class。履行HelloWorldAction.class辦法是運轉時URL /hello.action 挪用的辦法。假如履行辦法的成果前往“success”,然後我們把用戶到 helloWorld.jsp。

下一步是創立一個web.xml文件,這是一個Struts2的任何要求的進口點。Struts2運用法式的進口點,將是一個安排描寫符(web.xml)中界說的過濾器。是以,我們將界說在web.xml中條目oforg.apache.struts2.dispatcher.FilterDispatcher類。 web.xml文件中須要創立的WEB-INF文件夾下的WebContent下。曾經樹立的Eclipse的web.xml文件時為創立項目。所以,讓我們只須要修正以下:

<?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" 
 xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 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>Struts 2</display-name>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>
   org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>
 </filter>

 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
</web-app>

我們曾經指定index.jsp的迎接文件。然後,我們曾經設置裝備擺設Struts2的過濾器上運轉的一切URL(即任何URL婚配形式/ *)

啟用具體日記:
可以啟用完全的日記記載功效,而Struts 2的WEB-INF/classes下文件夾創立logging.properties文件。堅持在屬性文件中的以下兩行:

 

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = 
        java.util.logging.ConsoleHandler

默許logging.properties指定ConsoleHandler的路由記載到stdout,也是一個文件處置器。處置法式的日記級別阈值可以設置應用 SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST 或 ALL.

就是如許。我們曾經預備好應用Struts 2框架來運轉我們的Hello World運用法式。

履行運用法式
右鍵點擊項目稱號,並單擊 Export > WAR File文件創立一個WAR文件。然後安排在Tomcat 的 webapps目次下這個WAR。最初,啟動Tomcat 辦事器和測驗考試拜訪URL http://localhost:8080/HelloWorldStruts2/index.jsp。這會給出以下畫面:

輸出一個值“Struts2”,並提交頁面。應當看到頁面以下:

留意,可以界說索引struts.xml文件中的舉措,在這類情形下,可以挪用索引頁http://localhost:8080/HelloWorldStruts2/index.action。上面檢討若何界說指數作為一個舉措:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
 <package name="helloworld" extends="struts-default">

  <action name="index">
   <result >/index.jsp</result>
  </action>

  <action name="hello" 
   class="com.yiibai.struts2.HelloWorldAction" 
   method="execute">
   <result name="success">/HelloWorld.jsp</result>
  </action>

 </package>
</struts>

一個實例演示struts:先生學籍查詢(隱約查詢)

需求剖析:查詢先生學籍,要觸及到數據庫的操作,要觸及到頁面的表單操作。
輸出先生名字,點擊隱約查詢。會前往查詢成果。
這裡目標只是顯示struts的常識點。頁面操作等具體細節不做過量請求。
在以上的基本上,在temp包下新建QueryForm.java和QueryAction.java 在src下新建兩個包,一個是bean文件的,一個操作數據庫的,分離是com.bean和com.dao。com.bean下新建StudentBean.java文件com.dao下新建StudentDao.java文件
WebRoot新建queryform.jsp文件和result.jsp文件index.jsp可以做導航頁面(新建工程時既有)。
 
各個文件的內容以下:
StudentBean.java文件:

package com.bean;
 
//封裝一個先生的材料
public class StudentBean {
 
private String stuId;
private String stuName;
private String stuSex;
private String stuBir;
private String stuAdd;
 
public String getStuId() {
return stuId;
}
 
public void setStuId(String stuId) {
this.stuId = stuId;
}
 
public String getStuName() {
return stuName;
}
 
public void setStuName(String stuName) {
this.stuName = stuName;
}
 
public String getStuSex() {
return stuSex;
}
 
public void setStuSex(String stuSex) {
this.stuSex = stuSex;
}
 
public String getStuBir() {
return stuBir;
}
 
public void setStuBir(String stuBir) {
this.stuBir = stuBir;
}
 
public String getStuAdd() {
return stuAdd;
}
 
public void setStuAdd(String stuAdd) {
this.stuAdd = stuAdd;
}
 
}
StudentDao.java文件:
package com.dao;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 
import com.bean.StudentBean;
 
public class StudentDao {
 
private Connection conn = null;
 
public void initConnection() {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager
.getConnection("jdbc:sqlserver://localhost:1433;"
+ " DatabaseName=先生學籍信息", "sa", "sa");
} catch (Exception e) {
 
}
}
 
public ArrayList queryStuByName(String sname) {
ArrayList stus = new ArrayList();
 
String sql = "select 學號,姓名,性別,出身年代," + "家庭住址 from 學籍表 where 姓名 like '%"
+ sname + "%'";
//System.out.println("StudentDao.java中queryStuByName函數sname="+sname);
try {
this.initConnection();
ResultSet rs = conn.createStatement().executeQuery(sql);
 
while (rs.next()) {
StudentBean stu = new StudentBean();
stu.setStuId(rs.getString("學號"));
stu.setStuName(rs.getString("姓名"));
stu.setStuSex(rs.getString("性別"));
stu.setStuBir(rs.getString("出身年代"));
stu.setStuAdd(rs.getString("家庭住址"));
stus.add(stu);
}
 
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeConnection();
}
 
return stus;
}
 
public void closeConnection() {
try {
 
if (conn != null) {
conn.close();
conn = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

index.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>">
 
 <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
 </head>
 
 <body>
 This is my JSP page. <br>
 <a href="queryform.jsp">先生學籍查詢</a>
 </body>
</html>

 
queryform.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>">
 
 <title>My JSP 'queryform.jsp' starting page</title>
 
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
 
 </head>
 
 <body>
  查詢表單 <br>
  <form action="/Project02/query.do" method="post">
  請您輸出先生姓名:<input name="sname">
  <input type="submit" value="隱約查詢">
  </form>
 </body>
</html>

 
result.jsp文件:

<%@page import="com.bean.StudentBean"%>
<%@page import="com.dao.StudentDao"%>
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
 
<title>My JSP 'queryform.jsp' starting page</title>
 
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
 
</head>
 
<body> 

前往成果頁面  

<br>
<%ArrayList stus =(ArrayList)request.getAttribute("stus"); %>
<table>
<tr>
<td>
學號
</td>
<td>
姓名
</td>
<td>
性別 
</td>
<td>
出身年代
</td>
<td>
家庭住址
</td>
</tr>
 
<%
for(int i=0;i<stus.size();i++){
StudentBean stu=(StudentBean)stus.get(i);
%>
<tr>
<td>
<%=stu.getStuId() %> 
</td>
<td>
<%=stu.getStuName() %> 
</td>
<td>
<%=stu.getStuSex() %> 
</td>
<td>
<%=stu.getStuBir() %> 
</td>
<td>
<%=stu.getStuAdd() %> 
</td>
</tr>
<%} %>
</table>
</body>
</html>

 
QueryForm.jsp文件:

package project02;
 
import org.apache.struts.action.ActionForm;
 
//這是ActionForm為了包容表單的值
//標准:
//1-必需繼續org.apache.struts.action.ActionForm
//2-必需編寫和表單位素重名的元素屬性
//3-必需在Struts設置裝備擺設文件中注冊
@SuppressWarnings("serial")
public class QueryForm extends ActionForm{
 
public QueryForm(){
System.out.println("QueryForm.java結構函數運轉");
}
private String sname;
 
public String getSname() {
System.out.println("QueryForm.java中getSname函數運轉");
return sname;
}
 
public void setSname(String sname) {
this.sname = sname;
System.out.println("QueryForm.java中setSname函數運轉");
}
}
 
queryAction.java文件:
package project02;
 
import java.util.ArrayList;
 
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.dao.StudentDao;
 
//QueryAction擔任吸收ActionForm的數據,然落後行處置
//規矩:
//1-必需繼續org.apache.struts.action.Action
//2-重寫excute辦法營業邏輯
//3-將這個類在設置裝備擺設文件中注冊
public class QueryAction extends Action{
 
public QueryAction(){
System.out.println("QueryAction.java結構函數運轉");
}
 
 
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
QueryForm queryForm=(QueryForm)form;
String sname=queryForm.getSname();
sname=new String(sname.getBytes("iso-8859-1"),"gb2312");
StudentDao studentDao=new StudentDao();
ArrayList stus=studentDao.queryStuByName(sname);
request.setAttribute("stus", stus);
System.out.println("QueryAction.java中execute函數運轉");
// 跳轉
ActionForward af=new ActionForward("/result.jsp");
//設置了設置裝備擺設文件可以用以下方法跳轉
// ActionForward af = mapping.findForward("RESULT");
//以上方法湧現異常正告:正告: Unable to find 'RESULT' forward.
return af;
}
}

 
編寫了以上的文件還未能完成struts的功效,要對各個文件之間的關系在struts-config.xml文件停止設置裝備擺設。
設置裝備擺設以下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
 
<struts-config>
 <data-sources />
 
 <!-- 在此注冊ActionForm --> 
 <form-beans>
 <!-- name:稱號 type:類的途徑 -->
 <form-bean name="queryForm" type="project02.QueryForm"></form-bean>
 </form-beans>
 
 <global-exceptions />
 <!-- 設置URL的邏輯稱號 全局性的,所以的Action都可以辨認到-->
 <global-forwards>
 <forward name="RESULT" path="/result.jsp"></forward>
 </global-forwards>
 
 <!-- 這裡注冊Action -->
 <action-mappings>
 <!-- name:Actionform的稱號 type:類的途徑 path:客戶端提交給辦事器暫時指定的途徑 -->
 <action name="queryForm" path="/query" type="project02.QueryAction"></action>
 </action-mappings>
 
 <message-resources parameter="project02.ApplicationResources" />
</struts-config>

 
最初,對工程文件停止宣布,啟動tomcat,用閱讀器測試。
 
 
如今,來梳理清晰。依據需求樹立功效。依據請求樹立form和action文件。最初對struts-config.xml文件停止設置裝備擺設。
 
測試操作步調:
1-進入index.jsp導航頁面,點擊先生學籍查詢進入了queryform.jsp頁面
2-進入了queryform.jsp頁面,在文本框輸出先生名中的一個或兩個字停止隱約查詢。點擊隱約查詢。
<form action="/Project02/query.do" method="post">
     請您輸出先生姓名:<input name="sname">
<input type="submit" value="隱約查詢">
</form>
Action:指定了action要履行的途徑 method:提交的方法--post不顯示信息,get顯示信息
3-進入了/Project02/query.do  到了QueryAction.java履行。這裡為何是到QueryAction.java文件下履行的呢?

 <!-- 在此注冊ActionForm --> 
 <form-beans>
 <!-- name:稱號 type:類的途徑 -->
 <form-bean name="queryForm" type="project02.QueryForm"></form-bean>
 </form-beans>
 
 <!-- 這裡注冊Action -->
 <action-mappings>
 <!-- name:Actionform的稱號 type:類的途徑 path:客戶端提交給辦事器暫時指定的途徑 -->
 <action name="queryForm" path="/query" type="project02.QueryAction"></action>
 </action-mappings>

由於設置裝備擺設文件曾經完成了設置裝備擺設。注冊Action中的path=”/query”就是query.do只是沒有了.do後綴。這裡曾經指定了type類的途徑為:project02.QueryAction 所以履行QueryAction.java文件。
4-接上去的就是java文件了,年夜都能看懂。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved