1.struts 最小开发需要的jar有:
struts2-core-2.2.3.jar :Struts 2框架的核心类库
xwork-core-2.2.3.jar :XWork类库,Struts 2在其上构建
commons-fileupload-1.2.2.jar :文件上传组件,2.1.6版本后必须加入此文件
commons-io-2.0.1.jar
commons-logging-1.1.1.jar :日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
freemarker-2.3.16.jar :Struts 2的UI标签的模板
ognl-3.0.1.jar  :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
commons-lang-2.5.jar (这个是不必须的)

javassist-3.11.0.GA.jar :操作字节码的jar (这个也是不必须的)

把上面必须的jar包拷贝到项目中的WebRoot/WEB-INF/lib目录中,并且进行add build path设置,这样struts2开发需要的jar包已经包括进来了

2.配置web.xml

web.xml需要增加struts2的过滤器,下面对应的是web.xml中的structs的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name> <filter>
<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter>
<filter-mapping>
<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

3.主页设计

我的jsp页面是index.jsp(由于不想写login.jsp然后在web.xml中配置,麻烦)。

下面是用户登录的jsp页面:

<form action="Login.action" method="post">
<table align="center">
<caption><h3>用户登录</h3></caption>
<tr>
<td>用户名:<input type="text" name="username"/></td> </tr>
<tr>
<td>密&nbsp;&nbsp;码:<input type="text" name="password"/></td> </tr>
<tr align="center">
<td colspan="2"><input type="submit" value="登录"/>
<input type="reset" value="重填"/>
</td>
</tr>
</table>
</form>

可以看到,action的内容是xxx.action,这是struts2的设置需要

4.struts.xml配置

下面是struts.xml的内容(注意,是struts.xml,不是structs.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 请求路径:/com -->
<!--
package:structs2框架使用包管理action,这里的包相当于java中的包
*name:包的名称,唯一的,主要作用于继承
*namespace:命名空间,相当于房间号,唯一的
*extends:sturcts2中所有的包都要继承默认的包structs-default
action:配置structs2框架要访问的action
* name:structs2框架访问的action,在同一个包中唯一
* class:要访问的action的完整类路径
result:处理action的execute()方法的返回结果
* name:结果的唯一标示,该值必须和action中execute方法的返回值相同
* result:要转发重定向的路径
-->
<package name="structDemo0" extends="struts-default">
<action name="Login" class="com.login.LoginAction">
<result name="error">/login/error.jsp</result>
<result name="success">/login/success.jsp</result>
</action>
</package>
</struts>

  (注意:这个地方action中的name不能任意写(我已经验证过了,你可以试着下一个login,form提交也写login,你会发现页面提示错误,说没有result(感觉很奇怪)),struts2中好像有这样写着:name和class有对应关系,name+Action=class中的类名。)

  正确的是可以任意写,我之所以不能任意写,是因为我安装了一个插件:struts2-convention-plugin,这个插件有个约定,就是action和class的对应关系,就是上面所说的,把这个插件去了就没问题了。

5.Action实现类代码

下面是LoginAction.java的代码

package com.login;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action {

    private String username;
private String password; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
// TODO Auto-generated method stub if(getUsername().equals("zyf") && getPassword().equals("123456"))
return SUCCESS;
else
return ERROR; } }

6.登录成功和失败对应的跳转页面代码

下面是success.jsp的代码

<%@ page language="java" import="java.util.*" 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
登录成功ŠŸ
</body>
</html>

关于error.jsp内容和success.jsp内容一样就不多说了。

7.文件结构如下:

8.出现错误的解决方法

第一次做struts2的入门,基本上都会碰见这个错误:

Could not find action or result 
There is no Action mapped for namespace / and action name login. - [unknown location]

...

网上有很多的解决方法,如:http://bbs.csdn.net/topics/230059976,关键是看自己到底为啥会出现这个错误,人家出错的原因可能和你不一样

我的就是和大部分人的一样,把struts写成了structs,不光是struts.xml,还有内部的配置都写错了(即extends="struts-default"我也写错了),以致于查找错误找了3个小时。

struts2之入门login的更多相关文章

  1. Struts2 第二讲 -- Struts2的入门

    搭建struts2环境时,我们一般需要做以下几个步骤的工作: 第一步:创建javaweb工程(这个很废话有木有) 第二步:找到开发Struts2应用需要使用到的jar文件.(这个很白痴有没有) 到ht ...

  2. (转)Struts2快速入门

    http://blog.csdn.net/yerenyuan_pku/article/details/66187307 Struts2框架的概述 Struts2是一种基于MVC模式的轻量级Web框架, ...

  3. Struts2学习第一天--Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写

    action的name要与访问路径对应.hello.action. 加到tomcat启动 访问:http://localhost:8080/struts2-1/demo1/demo1.jsp 改为su ...

  4. Struts2基础入门

    Struts2基础入门 创建一个web工程 0)导包并且创建一个核心配置文件 <?xml version="1.0" encoding="UTF-8"?& ...

  5. 1、Struts2基本入门

    一.了解了这几个主要的优点,会促使你考虑使用Struts2 : 1.POJO表单及POJO操作 - Struts2 去除掉了Struts框架中的Action Forms部分.在Struts2框架下,你 ...

  6. 1.Struts2快速入门

    Struts2是一个基于MVC设计模式的Web层框架 Web层框架的特点:前端控制器模式 快速入门 1.下载Struts2的框架包 https://struts.apache.org/ 2.导入jar ...

  7. JavaWeb框架_Struts2_(一)----->Struts2 框架入门

    1.  框架入门 2.1  Struts2简介 (1). Struts2是一种基于MVC模式的的轻量级Web开发框架. MVC模式:MVC全名是Model View Controller,是模型(mo ...

  8. 【java开发系列】—— struts2简单入门示例

    前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了js ...

  9. struts2快速入门

    1. 下载开发包 课程 以 struts2 3.15.1 讲解 2. 目录结构 apps : struts2官方demo docs : 文档 lib : jar包 src : 源码 3. 导入jar包 ...

随机推荐

  1. Visual Studio 内置快速生产代码简写集合

    工作之余,整理了一下,Visual Studio 里面的快速生产代码缩写集合,这个拿出来分享想一下,希望对您有所帮助. 文件下载地址:VS内置生产代码缩写集合文档.rar 首字母 简写 生成代码 a ...

  2. 使用ImageMagick和Tesseract进行简单数字图像识别

    使用ImageMagick和Tesseract进行简单数字图像识别 由于直接使用 tesseract 进行识别,识别率很低, ImageMagick 安装.配置及使用: 平台:winXP 1. 安装I ...

  3. Java多线程初学者指南(10):使用Synchronized关键字同步类方法

    要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下: public synchronized void run() { ... } 从上面的代码可 ...

  4. Codeforces Round #198 (Div. 2) —— C

    C题很容易看懂题目,不过两个循环肯定会TLE,所以得用点小聪明: 首先排好序,因为是全排列,乱序和顺序的结果是一样的: 然后呢···· 如果是数列 1 2 3 4 5 元素1 被 2 3 4 5每个减 ...

  5. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

  6. Android开源项目发现---GridView 篇(持续更新)

    1. StaggeredGridView 允许非对齐行的GridView 类似Pinterest的瀑布流,并且跟ListView一样自带View缓存,继承自ViewGroup 项目地址:https:/ ...

  7. 使用API网关构建微服务

    使用传统的异步回调方法编写API组合代码会让你迅速坠入回调地狱.代码会变得混乱.难以理解且容易出错.一个更好的方法是使用响应式方法以一种声明式样式编写API网关代码.响应式抽象概念的例子有Scala中 ...

  8. 在html中嵌入markdown

    在博客园网页里写markdown的时候, 某些特殊内容想加上自定义的css, 于是用<div class="xxx">包裹起来, 但是发现该<div>中的m ...

  9. 《深入理解linux内核架构》第二章 进程管理和调度

    2.1进程优先级 进程优先级 硬实时进程 软实时进程 抢占式多任务处理 2.2进程生命周期 用户太切换到核心态的办法 系统调用 中断 抢占调度模型优先级普通进程<系统调用<中断 普通进程可 ...

  10. ICMP 实现

    以下代码取自 kernel- . [数据结构] struct icmp_control { void (*handler)(struct sk_buff *skb); //icmp处理函数,根据icm ...