Java+ecplise+struts2+tomacat web開發

Java+ecplise+struts2+tomcat+ web開發

PS1:這裏就不多說ecplise是如何安裝的了
PS2:本來是打算把mysql怎麼連接的也添加進去,但是時間關係,這部分之後再發表到另一篇文章中

首先下載struts2的支持庫(jar文件),下載地址爲http://struts.apache.org/download.cgi,現在最新版本是2.5的版本,在這裏我們用到的是2.3的版本,原因是因爲2.3版本里面有一個blank的用例比較好用,而這個用例在2.5裏面是沒有的。
下載完之後,將其解壓得到的目錄爲
這裏寫圖片描述
我們需要進入apps文件
這裏寫圖片描述
將struts2-blank.war解壓得到
這裏寫圖片描述

好的,這部分先到這裏。

這時候我們打開ecplise,注意要安裝Java EE
這裏寫圖片描述

點擊file->new->Dynamic Web Project,如果沒有的話在file->new->other..裏面

這裏寫圖片描述

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
注意,最有一個選項要選上
下面是建好的目錄
這裏寫圖片描述
這時候用到了之前blank裏面的東西了,在blank解壓文件夾裏面,找到WEB-INF文件夾,進入該文件夾后里面有一個lib文件夾,將裏面的jar文件全部複製到我們的工程目錄下面的lib文件夾裏面
這裏寫圖片描述
還有跟blank WEB-INF文件夾中的web.xml裏面的內容複製到我們工程目錄中的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" 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">
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

然後進入blank文件夾中的WEB-INF文件夾裏面,將struts.xml文件複製到項目的Java Resources 中方src目錄中
這裏寫圖片描述
並對struts.xml修改成

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

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="default" namespace="/" extends="struts-default">
        <action name="*">
            <result>/WEB-INF/content/{1}.jsp</result>
        </action>   
    </package>
</struts>

這裏的

<action name="*">
    <result>/WEB-INF/content/{1}.jsp</result>
</action>  

的意思是對於任何的action,都匹配到相應的jsp文件,下面舉個例子
對了,在工作目錄中,jsp文件最好是存放到WEB-INF中的content文件夾裏面(content文件夾自己創建)
這裏寫圖片描述
我在工作目錄裏面創建了一個welcome.jsp的文件,內容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用戶登陸</title>
</head>
<body>
<form action="AuthorPro" method="post">
    用戶名:<input type="text" name="author.name"/><br/>
    密碼 :<input type="text" name="author.AuthorID"/><br/>
    <input type="submit" value="登陸"/>
</form>
</body>
</html>

然後這時候要運行程序了,我們新建一個程序這裏寫圖片描述
一直next

然後雙擊下圖中 Tomcat v7.0 Server at localhost(2)
將Server Locations 中的選項選擇第二個
這裏寫圖片描述
之後右鍵我們建的web工程 名字是lalala,選擇Run As->1 Run on server
直接finish就可以
這裏寫圖片描述
這是界面,然後將域名改成 http://localhost:8080/lalala/welcome
這裏寫圖片描述
這時候就能看到我們之前寫的welcome頁面了。
這裏重新回顧一下之前寫的struts.xml文件中的那句話

<action name="*">
    <result>/WEB-INF/content/{1}.jsp</result>
</action>  

這句話中 * 代表我們輸入的名字,例如我輸入的是welcome,這時候他就會到工程目錄中的WEB-INF/content/中找到welcome.jsp。(PS,*匹配到{1})
爲了更好的理解,我做如下改變,

<action name="*action*">
    <result>/WEB-INF/content/{1}_{2}.jsp</result>
</action> 

這裏寫圖片描述
注意我的welcome.jsp 改成 wel_come.jsp,然後輸入的地址爲http://localhost:8080/lalala/wel_come
這時才能正常訪問,這時候 * action 中的第一個 匹配到{1},對應的是wel 第二個 * 匹配到的是{2} 對應的是come 中間要有一個”_”,但是這個點一般是不會弄的這麼複雜的,所以這裏理解一下就可以了。

比較喜歡寫一個用戶登錄的界面,所以我們來寫一下如何登陸頁面吧。
這裏寫圖片描述
在src目錄下創建一個類,包Package的名字爲action,類名字爲AuthorProAction,記得點擊Add
這裏寫圖片描述
添加action類,得到如下
這裏寫圖片描述
內容更改爲

package action;

import com.opensymphony.xwork2.Action;

public class AuthorProAction implements Action {                    
    private Author author;
    public Author getAuthor() {
        return author;
    }
    public void setAuthor(Author author) {
        this.author = author;
    }
    @Override
    public String execute() throws Exception {
        AuthorService au=new AuthorService();
        Integer i =au.validateAuthor(author);
        if (i>0)
            return SUCCESS;
        return ERROR;
    }

}

這裏會發現
這裏寫圖片描述
有報錯的地方,那麼把鼠標放到Author上 會出現解決方法,點擊create class ”Author“
這裏寫圖片描述
記得把包的名稱改成domin(改成別的名稱也沒有問題)然後點擊Finish

package domin;

public class Author {
    private String authorID;
    private String name;
    private String age;
    private String country;
    public String getAuthorID() {
        return authorID;
    }
    public void setAuthorID(String authorID) {
        this.authorID = authorID;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((authorID == null) ? 0 : authorID.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Author other = (Author) obj;
        if (authorID == null) {
            if (other.authorID != null)
                return false;
        } else if (!authorID.equals(other.authorID))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    public Author(){}
    public Author(String authorID, String name, String age, String country) {
        super();
        this.authorID = authorID;
        this.name = name;
        this.age = age;
        this.country = country;
    };
}

這裏其實只要寫入

package domin;

public class Author {
    private String authorID;
    private String name;
    private String age;
    private String country;
}

就行了,然後alt+shift+s 點擊後,會出現一個選擇框,選擇Generate Getters and Setters 進入後將

這裏寫圖片描述

Select All選上就能創建出

public class Author {
    private String authorID;
    private String name;
    private String age;
    private String country; 
    public String getAuthorID() {
        return authorID;
    }
    public void setAuthorID(String authorID) {
        this.authorID = authorID;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
}

判斷相同 用shift+alt+s的到的對話框中的Generate hashCode() and equals() ,因爲判斷是否相同只需要判斷authorID跟name是否相同就能判斷兩個人是否一樣,所以選中如下圖
這裏寫圖片描述

點擊ok,還有一個則是shift+alt+s 選中Generate Constructor using Fields

這裏寫圖片描述

public Author(){}

這句話要自己輸入
回頭看之前的AuthorProAction.java文件,發現錯誤少了一堆,對於在AuthorService也是創建一個類

這裏寫圖片描述

記得把package改成service(同樣其他的名字也可以),代碼如下

package service;

import java.util.ArrayList;
import java.util.List;

import domin.Author;

public class AuthorService {
    static List<Author> authorDb;
    static {
        authorDb=new ArrayList<>();
        authorDb.add(new Author("110","lala","18","中國"));
        //這裏對應的實是
        /*Author裏面的東西,如果age是int類型的話 那麼應該-> authorDb.add(new Author("110","lala",18,"中國"));
         *  private String authorID;
            private String name;
            private String age;  ->(private int age)
            private String country;
         */
    }
    public Integer validateAuthor(Author author) {
        for(Author u:authorDb){
            if(u.equals(author)){
                return 1;
            }
        }
        return -1;
    }
}

現在我們要配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="default" namespace="/" extends="struts-default">
        <action name="AuthorPro" class="action.AuthorProAction">
            <result name="success">/WEB-INF/content/Menu.jsp</result>
            <result name="error">/WEB-INF/content/error.jsp</result>
        </action>
        <action name="*">
            <result>/WEB-INF/content/{1}.jsp</result>
        </action>
    </package>
</struts>

記得要把 name =*那個action放到最下面,不然全都被他匹配走了。
這裏來解釋一下

<action name="AuthorPro" class="action.AuthorProAction">
    <result name="success">/WEB-INF/content/Menu.jsp</result>
    <result name="error">/WEB-INF/content/error.jsp</result>
</action>

action name=”AuthorPro“這個名字對應的是welcome.jsp文件中form裏面的那個action的名字,在前臺welcome中,點擊按鈕,會到後臺struts.xml中尋找相對應的action,依據方法就是action name,找到action後,回到後面的class中找到相應的方法,上面的例子就是到action.AuthorProAction.java中找,一般在

中還有一句隱藏的

在沒有寫method的情況下默認的是execute這個方法。

這裏寫圖片描述

點擊登錄

這裏寫圖片描述

進入到Menu界面,但是我們並沒有創建,所以報錯了

這裏寫圖片描述

輸入一個錯誤的賬號密碼

這裏寫圖片描述

會跳轉到另一個界面

發佈了24 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章