用Struts2搭建一个登录例子【本人亲测好用】
今天尝试struts2的搭建,遇到不少的问题,终于一一解决,逛了很多地方,最终完成搭建
1、首先要下载struts2的一些组件,我下载的是版本2.3.4.1,Eclipse是4.6版本的。由于版本的不断升级,导致在搭建的过程中,和过去相对较旧的版本搭建有了一些差别,不过问题不是很大。工程截图如下:

2、解压下载的组件,在lib目录下找到其中的以下组件:
commons-fileupload-1.2.2.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
commons-logging-1.1.1.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar(一定要将这个jar复制过去,这是和以前的版本不同的地方)
ognl-3.0.5.jar
struts2-core-2.3.4.1.jar
xwork-core-2.3.4.1.jar
将这些组件复制到建立的web工程下的WEB-INF/lib目录中,这些组件其实就是编译好的类文件。
3、接下来就是配置struts.xml文件。这个文件就好像起着一个过滤器的作用,用户发来的请求要经过该文件的过滤,根据用户请求中所请求的处理类型,来选择相应的处理逻辑。
以下是一个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.3.dtd"> <struts>
<include file="struts-default.xml" />
<package name="struts" extends="struts-default"><!--注意 namespace="/demo"写,那么login.jsp中的form标签的action属性中必须写-->
<action name="login" class="com.sid.action.Login" method="execute">
<result name="success">/success.jsp</result>
<result name="fail">/fail.jsp</result>
</action>
</package>
</struts>
在struts.xml中,是采用package来管理各种action的。
package标签中的namespace指定了该包的命名空间。
extends是说当前这个包继承自struts-default包,可以在struts2-core-2.2.3.1.jar中的struts-default.xml文件中找到这个包,这个包被定义成抽象的,它不能包含有action。
包中的每一个action标签都和一个逻辑处理类进行了映射,name指定了这个action的名字,和包的namespace组合起来,可以直接访问这个逻辑处理类。
class指定了逻辑处理类的位置,method指定了进行逻辑处理类中进行逻辑处理的方法,这个execute很重要,而且它有固定的返回类型,就是String。
result标签就是根据逻辑判断之后,execute方法返回的字符串,根据返回的字符串,来进入到指定的页面。这里一定要把跳转的地址写清楚,明白。否则浏览器会报404的错误。
4、根据struts.xml的配置,我们需要建立两个jsp文件:success.jsp和fail.jsp,还有一个Login类,以及一个登录页面的login.jsp文件。
在WebRoot目录下,建立login.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>Insert title here</title>
</head>
<body>
<form action="login" method="post">
账号:<input type="text" name="username"/><br />
密码:<input type="password" name="password"/><br />
<input type="submit" value="登录"/>
</form>
</body>
</html>
在src目录下,写Login类:
package com.sid.action;
import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport { private static final long serialVersionUID = 1L;
private String username;
private String password;
public String execute()
{
if("admin".equals(this.username) && "123456".equals(this.password))
return "success";
else
return "fail";
}
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;
}
}
由于success.jsp和fail.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>Insert title here</title>
</head>
<body>
====>登录成功!<br />
账号:${request.username}<br />
密码:${request.password}
</body>
</html>
<%@ 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>Insert title here</title>
</head>
<body>
---->登录失败!
</body>
</html>
5、配置web.xml文件,这也是很关键的一步,在启动服务器时,服务器要根据这个文件去进行初始化。而struts2和struts1启动有很大的不同,它是通过过滤器来启动的,而struts1是通过加载servlet来启动的,故应向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">
<display-name>Struts2</display-name>
<!--配置sturts2启动代码 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><!-- 注意在2.1.3以上版本需使用此class -->
</filter>
<filter-mapping><!-- 配置url路径 -->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
经过这几步后,启动你的服务器,在地址栏输入登录界面的地址,一个简单的struts2框架就搭建好了……
如果出现404等错误请查看你的login.jsp的form标签的action属性的路径是否写对且与struts.xml的namespace属性同步,要么都不写,要么都写上。
用Struts2搭建一个登录例子【本人亲测好用】的更多相关文章
- 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考)
本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclip ...
- 推荐几个最好用的CRM软件,本人亲测
CRM是英文Customer Relationship Management 的简写,一般译作“客户关系管理”.CRM最早产生于美国,由Gartner Group 首先提出的CRM这个概念的.20世纪 ...
- c# 日期函数DateTime.ToString()日期的各种格式 (本人亲测)
c# 日期函数DateTime.ToString()日期的各种格式 (本人亲测) 平时写代码的过程难免遇到对日期的格式转换,这个时候很容易忘记具体格式的转换是什么,当然这不是什么复杂的,查一下就能找 ...
- 获取UIColor中的RGB值(本人亲测多个获取RGB值的方法,这个最有效)
在自己研发的项目个人项目中,碰到一个从颜色中获取RGB值的需求. 在网上找了许久,也有一些方法可以获取RGB值,但不能获取黑白以及灰色的值(他们是非RGB颜色空间,不清楚什么意思,反正亲测确实获取不了 ...
- navicat连接mysql报错1251解决方案,从头搭建node + mysql 8.0 (本人亲测有效)
准备学node 好久了 一直没有动手去写,今天突发奇想,然后就安装了一个mysql (找了一个博客跟着步骤去安装的),然后打算用node 写个增删改查. 1.下载mysql安装包 地址: http ...
- SecureCRT通过密钥登录(网上也有很多教程,但是有些不详细,此教程本人亲测)
1.先打开SecureCRT,标题标--工具---创建公钥,如图: 2.点击创建公钥,弹出选项点下一步 3.继续点下一步: 4.继续点下一步: 5.继续点下一步(密钥长度默认1024即可),生成密钥需 ...
- 真实本人亲测Elasticsearch未授权访问漏洞——利用及修复【踩坑指南到脱坑!】
如要转载请注明出处谢谢: https://www.cnblogs.com/vitalemontea/p/16105490.html 1.前言 某天"发现"了个漏洞,咳咳,原本以为这 ...
- 搭建ELK日志分析(亲测无毒!)截图没有附上。。凑合看。搭建出来没有问题
( 1 )安装 Logstash 依赖包 JDK Logstash 的运行依赖于 Java 运行环境, Logstash 1.5 以上版本不低于 java 7 推荐使用最新版本的 Java .由于我们 ...
- java swing 制作一个登陆界面,亲测有效
一.介绍 Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT ...
随机推荐
- Vim配置及使用
Vim配置 1.打开~/.vimrc,将以下内容考入文件.vimrc中 "行号" set nu "高亮" syntax enable syntax on &qu ...
- HDU 4945 2048 DP 组合
思路: 这个题写了一个背包的解法,超时了.搜了下题解才发现我根本不会做. 思路参见这个: 其实我们可以这样来考虑,求补集,用全集减掉不能组成2048的集合就是答案了. 因为只要达到2048就可以了,所 ...
- Project Euler:Problem 93 Arithmetic expressions
By using each of the digits from the set, {1, 2, 3, 4}, exactly once, and making use of the four ari ...
- angularjs 自定义服务
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
- android JNI 一维数组、二维数组的访问与使用
在JNI中访问JAVA类中的整型.浮点型.字符型的数据比较简单,举一个简单的例子,如下: //得到类名 jclass cls = (*env)->GetObjectClass(env, obj) ...
- 14.mocha+should.js
转自http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 众所周知对于任何一个项目来说,做好单元测试都是必不 ...
- 关键字super
1.super,相较于关键字this,可以修饰属性.方法.构造器 2.super修饰属性.方法:在子类的方法.构造器中,通过super.属性或者super.方法的形式,显式的调用父类的指定 属性或方法 ...
- iOS菜鸟成长笔记(2)——网易彩票练习
距离上一篇<第一个iOS应用>已经有一个多月了,今天来和大家一起学习和分享一下一个小练习<网易彩票> 首先我们向storyboard中拖入一个TabBarController和 ...
- python实现决策树C4.5算法(在ID3基础上改进)
一.概论 C4.5主要是在ID3的基础上改进,ID3选择(属性)树节点是选择信息增益值最大的属性作为节点.而C4.5引入了新概念"信息增益率",C4.5是选择信息增益率最大的属性作 ...
- Bayes++ Library入门学习之熟悉namespace
Bayes++是一个开源的C++类库.这些类表示并实现了用于离散系统的贝叶斯滤波的各种数值算法.该库中的类提供测试和一致的数值方法,并且用层次明确的结构表明了各种滤波算法和系统模型类型. 接下来,我们 ...