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界面,但是我们并没有创建,所以报错了

这里写图片描述

输入一个错误的账号密码

这里写图片描述

会跳转到另一个界面

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值