用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文件的例子:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
 3
 4 <struts>
 5       <include file="struts-default.xml" />
 6       <package name="struts" extends="struts-default"><!--注意 namespace="/demo"写,那么login.jsp中的form标签的action属性中必须写-->  
 7           <action name="login" class="com.sid.action.Login" method="execute">
 8               <result name="success">/success.jsp</result>
 9               <result name="fail">/fail.jsp</result>
10           </action>
11       </package>
12 </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文件:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11     <form  action="login" method="post">
12     账号:<input type="text" name="username"/><br />
13     密码:<input type="password" name="password"/><br />
14     <input type="submit" value="登录"/>
15     </form>
16 </body>
17 </html>

在src目录下,写Login类:

 1 package com.sid.action;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 public class Login extends ActionSupport {
 4
 5     private static final long serialVersionUID = 1L;
 6     private String username;
 7     private String password;
 8      public String execute()
 9         {
10             if("admin".equals(this.username) && "123456".equals(this.password))
11                 return "success";
12             else
13                 return "fail";
14         }
15     public String getUsername() {
16         return username;
17     }
18     public void setUsername(String username) {
19         this.username = username;
20     }
21     public String getPassword() {
22         return password;
23     }
24     public void setPassword(String password) {
25         this.password = password;
26     }
27 }

由于success.jsp和fail.jsp页面并不想让用户直接访问到,而是通过登录页面,做个简单的逻辑判断之后,在根据判断结果跳转到相应的页面。

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     ====>登录成功!<br />
11     账号:${request.username}<br />
12     密码:${request.password}
13 </body>
14 </html>
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 ---->登录失败!
11 </body>
12 </html>

5、配置web.xml文件,这也是很关键的一步,在启动服务器时,服务器要根据这个文件去进行初始化。而struts2和struts1启动有很大的不同,它是通过过滤器来启动的,而struts1是通过加载servlet来启动的,故应向web.xml中加入如下内容:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <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">
 3   <display-name>Struts2</display-name>
 4 <!--配置sturts2启动代码 -->
 5 <filter>
 6    <filter-name>struts2</filter-name>
 7    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><!-- 注意在2.1.3以上版本需使用此class -->
 8 </filter>
 9 <filter-mapping><!-- 配置url路径 -->
10     <filter-name>struts2</filter-name>
11     <url-pattern>/*</url-pattern>
12 </filter-mapping>
13
14   <welcome-file-list>
15     <welcome-file>index.jsp</welcome-file>
16     <welcome-file>default.jsp</welcome-file>
17   </welcome-file-list>
18 </web-app>

经过这几步后,启动你的服务器,在地址栏输入登录界面的地址,一个简单的struts2框架就搭建好了……

如果出现404等错误请查看你的login.jsp的form标签的action属性的路径是否写对且与struts.xml的namespace属性同步,要么都不写,要么都写上。

时间: 2024-07-31 08:25:22

用Struts2搭建一个登录例子【本人亲测好用】的相关文章

小米路由器探测和测评本人亲测

小米路由器第一批,5月2号拿到的.699元. 试用后有以下感受:1.路由器体积大,发热量稍微大,风扇声音有一点: 2.穿墙能力和普通的路由器一样,并不是很好: 3.共享1T盘里如果可以设置某个文件夹设置密码或者其他人访问不了就更好了 初次使用登录miwifi.com进行配置,还是很简单的. 以下为真机图片: 小米路由器探测和测评本人亲测

Visual studio2012密钥 vs2012密钥 本人亲测 真实有效

打开帮助菜单,选择注册产品,输入以下密钥即可. YKCW6-BPFPF-BT8C9-7DCTH-QXGWC RBCXF-CVBGR-382MK-DFHJ4-C69G8 MMVJ9-FKY74-W449Y-RB79G-8GJGJ 4D974-9QX42-9Y43G-YJ7JG-JDYBP YCFHQ-9DWCY-DKV88-T2TMH-G7BHP 以下即为注册成功. Visual studio2012密钥 vs2012密钥 本人亲测 真实有效

微信和QQ消息撤回可见app(仅限安卓手机系统的童鞋哟,本人亲测有效)

这款软件仅1.6MB,并不会占用太多的空间,给予所需的权限,并开启监听撤回之后,不管你锁没锁屏,都可以记录被撤回的消息,不过经测试成功率不是百分百,多次测试排除后得知,被屏蔽的群消息,不会有屏幕提示的是无法检测的.如果群没有被屏蔽,也是可以被抓取撤回的.至于图片,测试结果就是只会告诉你撤回了图片,并没办法抓取撤回的图片像素.仅限安卓手机系统适用哦! 软件下载地址: 链接:https://pan.baidu.com/s/1jVD-TXGjMurlreHIp4bHsQ 提取码:t0km 复制这段内容

提供一个不错的物流物流接口给大家,本人亲测,真的不错

最近做了一个购物商城.在网上卖商品,客户反馈,购买的商品,订单管理看不到商品发货情况,现在的客户要求越来越高,比如:客户希望看到订单的物流轨迹,什么时候发货,货发到哪里了,什么时候安排派送,这些信息需要物流公司提供,有些客户还指定发某个快递公司,大部分物流快递是不会直接跟我们做物流接口的,即使对接,成本也很高,一家一家对接,周期长,维护成本也高,于是乎,我冒出一个想法,有没有这样的接口,就像支付接口一样,集成了所有的银行接口,只要对接了支付接口,比如微信支付,就不需要一家一家对接银行了, 我在百

struts2.5.2 通配符问题_亲测有用

学了一段时间struts2,跟着教程做,但发现struts2的版本不同,很多东西的使用是有差异的.例如之前遇到的创建sessionFactory的方式就跟之前版本有着明显的差异.今天又遇到一个问题,那就是通配符的使用. 问题:若不使用通配符,可以找到相对应的action,而使用通配符就会报错,找不到actionmapping之内的错,找不到action. 问题原因: struts2.5 为了增加安全性,在 struts.xml 添加了这么个属性:<global-allowed-methods>

一个TokenUtils程序,亲测可用

1. Token用途 token是HTTP请求的令牌,通俗一点说是凭证,目的是防止api被随意访问获取信息. 可使用随机数生成,也可以使用用户id.密码或时间之类进行排序或者加密进行声称. token一般有个有效期,比如超过1个小时或者2个小时需要重新登录获取新的. 2. 程序原理 本程序token使用用户id和当前时间(精确到小时数)生成. a.用户登陆后,服务器给客户端返回token数值: b.客户端请求其他接口带上token c.服务器对token进行有无和时间是否超时校验 d.校验通过进

在Quartus使用TCL脚本文件配制管脚 《本人亲测》

方法一:Import Assignments步骤1: 使用记事本或类似软件新建一个txt文件(或csv文件),按如下格式编写管脚分配内容(不同的开发版,其内容也不同,本文以我使用的DIY_DE2开发板为范例).[这种方式格式最为简单] 注意:To和Location两个关键字中间有一个半角逗号.    图1 pin.txt 步骤2: 在QII软件中,选择"Assignments -> Import Assignments".如图所示,导入xxx.txt或者xxx.csv文件即可 图

如何将一个SpringBoot简便地打成一个war包(亲测有效)

正常情况下SpringBoot项目是以jar包的形式,通过命令行: 来运行的,并且SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tomcat服务器.正因如此,也出现了一个问题: 上传到项目的文件,如果是保存在项目中的,那么重启过后文件就会丢失.比如我们上传了一个头像,重启项目后,这个头像就没了.而如果将文件保存在本地磁盘中的话,html中标签没办法获取.因此,我们才需要将SpringBoot项目打成war包,放到Tomcat中去运行. 在pom.xml文件中添加下面的

[转自百度贴吧-本人亲测有效]Adobe XD 打开立即闪退问题修复

出现闪退的原因还是因为缺少C++组件, 下载 DirectXRepairV3.7软件 原文: https://tieba.baidu.com/p/5961511474 软件下载: http://xiazai.zol.com.cn/detail/44/430281.shtml 附上图: 原文地址:https://www.cnblogs.com/linr/p/10345546.html