Struts2实验01--HelloWorld

1、通过IDEA创建一个maven项目

项目的结构如下: 

pom.xml : 描述项目对其他组件的依赖

web.xml : 对Web项目进行配置, 在此项目中, 用来声明Struts2

src目录下面的main目录下面的java目录用来存放Java文件

src目录下面的main目录下面的resource目录用来存放配置文件

struts.xml用来描述struts2的配置

src目录下面的main目录下面的webapp目录用来存放前端显示的界面的资源

HelloStruts2
    ├── HelloStruts2.iml
    ├── pom.xml
    ├── src
    │   └── main
    │       ├── java
    │       │   └── shiyanlou
    │       │       └── HelloWorldAction.java
    │       ├── resources
    │       │   └── struts.xml
    │       └── webapp
    │           ├── Error.jsp
    │           ├── HelloWorld.jsp
    │           ├── WEB-INF
    │           │   └── web.xml
    │           └── index.jsp

 

1、pom.xml文件: 引入了struts2的依赖jar文件和jetty服务器容器

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>shiyanlougroupId>
  <artifactId>HelloStruts2artifactId>
  <packaging>warpackaging>
  <version>1.0-SNAPSHOTversion>
  <name>HelloStruts2 Maven Webappname>
  <dependencies>
    <dependency>
      <groupId>org.apache.strutsgroupId>
      <artifactId>struts2-coreartifactId>
      <version>2.5.18version>
    dependency>
  dependencies>
  <build>
    <finalName>HelloStruts2finalName>
    <plugins>
      <plugin>
        <groupId>org.eclipse.jettygroupId>
        <artifactId>jetty-maven-pluginartifactId>
        <version>9.4.12.v20180830version>
        <configuration>
          <scanIntervalSeconds>10scanIntervalSeconds>
          <webApp>
            <contextPath>/contextPath>
          webApp>
        configuration>
      plugin>
    plugins>
  build>
project>

2、web.xml : 配置struts2拦截器, 所有的访问都要通过struts2的拦截器, 从而实现struts2的访问控制的功能, 同时设置欢迎页面为罗列出的以下的页面, 当访问的URL只是[IP地址][:][端口号][/]的时候会显示以下的界面. 越往上显示的级别越高

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>HelloStruts2display-name>
  <filter>
    <filter-name>struts2filter-name>
    <filter-class>
      org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    filter-class>
  filter>

  <filter-mapping>
    <filter-name>struts2filter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>
  <welcome-file-list>
    <welcome-file>index.htmlwelcome-file>
    <welcome-file>index.htmwelcome-file>
    <welcome-file>index.jspwelcome-file>
    <welcome-file>default.htmlwelcome-file>
    <welcome-file>default.htmwelcome-file>
    <welcome-file>default.jspwelcome-file>
  welcome-file-list>

web-app>

3、struts.xml : 在struts.xml文件中写页面的跳转的逻辑

这个小项目的逻辑是, 访问首页是index.jsp, 在这个页面又一个表单, 在表单中输入自己的名字, 就回跳转到HelloWorld.jsp文件, 在这个文件中会显示你输入的名字. 如果你在表单中输入的名字为空, 或者直接通过URL访问成功输入名字的页面, 就回跳转到失败界面Error.jsp, 显示失败.

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

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="true" />

    <package name="shiyanlou" extends="struts-default">
        
        
        <default-action-ref name="index" />
        
        <action name="index" >
        
            <result name="success">/index.jspresult>
        action>

        
        <action name="hello" class="shiyanlou.HelloWorldAction" method="execute">
            
            
            <result name="success">/HelloWorld.jspresult>
            
            <result name="error">/Error.jspresult>
        action>
    package>
struts>

4、HelloWorldAction.java : Action文件, 通过在struts.xml中配置了URL访问/index就回执行这个文件的execute()方法, 根据表单传入的name值来返回值, 在struts.xml中根据返回值再进行页面转发.

package shiyanlou;

public class HelloWorldAction {

    private String name;

    public String execute() throws Exception {

        if ( getName().equals("") || getName() == null )
            return "error";

        return "success";
    }

    public String getName() {
        return name;
    }

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

6、显示页面: 

index.jsp : 登录的首页, 提供一个表单用来输入名字, 注意input中的name, 和HelloWorldAction.java中的String类型的name变量必须是一致的, 当变量的名称发生改动, 此处的for的属性值也必须改动.

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
DOCTYPE html>
<html>
<head>
    <title>Hello Worldtitle>
head>
<body>
<h1>Hello World Struts2h1>
<form action="hello">
    <label >Please enter your namelabel><br/>
    <input type="text" name="name"/>
    <input type="submit" value="Enter"/>
form>
body>
html>

 

HelloWorld.jsp : 用来显示成功输入的界面, 通过struts自带的EL语句来获得输入的名字, 注意此处的name同样的必须是和HelloWorldAction.java 中的String类型的变量name的名称保持一致.

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello Worldtitle>
head>
<body>
Hello World, Welcome! <s:property value="name"/>
body>
html>

 

Error.jsp : 失败的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello Worldtitle>
head>
<body>
You did not have entered a name!
body>
html>

 


注意, HelloWorldAction.java 文件中的name和getName, setName的名称要保持一致

如果改变名称为name22(这只是打一个比方, 可以改成其他任意的值), getName()和setName()同样要修改成getName22()和setName22()

index.jsp中的input的name值也要改成name22, HelloWorld.jsp中的value也要改成name22


 注意: IDEA自动创建的maven项目的pom.xml文件中没有对发布的打包的方式的描述, 从而导致一直无法使用mvn jetty:run命令来通过jetty容器启动网页项目

在pom.xml中田间war, 添加的位置看上面pom.xml, 设置打包的方式为war, 成功使用jetty容器.

 

 

 

感觉好麻烦

 

你可能感兴趣的:(Struts2实验01--HelloWorld)