本实例实现基本的登陆功能:
1,配置xml文件,让struts2拦截所有请求:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- STRUTS2的核心filter拦截所有的请求,
当用户的请求过来,解析、封装参数,解析配置文件 struts.xml然后通过反射来创建Action实例,并调用Action
中指定的方法.
在struts2中filter是核心控制器,
Acton是业务控制器。所有Struts是有两个控制器的。
-->
<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>
2,编写登陆处理逻辑的Action
package com.supan.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.config.entities.ActionConfig;
/*
* 为了让用户更加规范的开发Action,struts2已经定义了一个名为Action的接口,
* struts也建立了一个类实现了Action接口这个类就是ActionSupport类,尽管我们
* 的Action可以不实现任何接口也不继承任何类,但是为了开发的统一性、完整性、
* 我们还是最好继承这个ActionSupport类
* ActionSupport已经实现Action接口和Validateable接口
*/
public class LoginAction extends ActionSupport {
/*
* struts2 的Action中有两种属性:一种是页面传进来的属性,另一种是处理结果的属性
* struts2不会去区分这两种属性的,也就是说这两种属性的地位是完全平等的。
*/
//action中接受页面传过来的属性
private String username;
private String password;
//action中返回给页面的处理结果
private String tip;
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
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 {
System.out.println(getUsername());
System.out.println(getPassword());
ActionContext acx = ActionContext.getContext(); //获取Action的上下文对象
if(getUsername().equals("chenchaoyang") && getPassword().equals("supanccy")){
//在action用ActionContext来访问ServletApI
Integer counter = (Integer)acx.getApplication().get("counter");
if(counter == null){
acx.getApplication().put("counter", 1);
}else{
acx.getApplication().put("counter", counter+1);
}
acx.getSession().put("user", getUsername());
acx.put("tip", "服务器提示:登陆成功");
setTip("服务器提示:登陆成功!");
return SUCCESS;
}else{
acx.put("tip", "服务器提示:登陆成功");
setTip("服务器提示:登陆失败!");
return INPUT;
}
}
}
3,登陆界面login.jsp;
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. <br>
<s:form action="/login/login.action">
<s:textfield name="username" label="用户名"></s:textfield>
<s:textfield name="password" label="密码"></s:textfield>
<s:submit value="登陆"></s:submit>
<s:property value="tip"/>
<s:property value="username"/>
<s:property value="password"/>
</s:form>
</body>
</html>
4,登陆成功界面loginsuccess.jsp;
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'loginsuccess.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<s:property value="tip"/><br>
<s:property value="username"/><br>
<s:property value="password"/><br>
__________________________________________________________<br>
本站总访问量: ${applicationScope.counter }<br>
当前登陆用: ${sessionScope.user }<br>
服务器提示: ${requestScope.tip }<br>
</body>
</html>
5,登陆失败界面loginerror.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'loginsuccess.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<s:property value="tip"/><br>
<s:property value="username"/><br>
<s:property value="password"/><br>
__________________________________________________________<br>
本站总访问量: ${applicationScope.counter }<br>
当前登陆用: ${sessionScope.user }<br>
服务器提示: ${requestScope.tip }<br>
</body>
</html>
分享到:
相关推荐
总的来说,Struts2 Action包的命名空间和Servlet API的结合使用,使得开发者能够灵活控制请求的处理流程,通过拦截器实现通用功能,同时利用视图组件创建丰富的用户界面。通过对框架核心类的了解,可以更深入地掌握...
总的来说,Struts2的零配置特性极大地简化了开发流程,提高了开发效率,是现代Java Web开发中的一个重要工具。通过深入理解并熟练运用这些注解,开发者能够更好地驾驭Struts2框架,创造出高效且易于维护的Web应用。
通过该插件,Struts2能够自动扫描并识别Web应用程序中的Action类,从而推测出它们的命名空间(namespace)。此外,Zero Config还能够根据Action类的位置推断出结果视图(result view)的路径。 ##### 2.1 配置方法 在`...
这样,所有在指定命名空间下的Action类都将被自动加载。 **5. 使用Spring集成** Struts2可以与Spring框架无缝集成,通过Spring管理Action的生命周期。在Spring配置文件中定义Bean,并使用`@Autowired`注解注入依赖...
总之,解决Struts2跳转至404页面的问题需要对整个应用的配置进行仔细检查,从Action、命名空间、拦截器到结果类型、资源路径,甚至包括服务器和IDE的设置。理解Struts2的工作原理,结合日志信息,通常可以找出导致...
Struts2是一个强大的MVC框架,其配置文件是实现应用程序逻辑和控制流程的关键部分。本文将详细介绍Struts2的核心配置文件及其元素。 首先,我们来看一下Struts2的主要配置文件: 1. **web.xml**: 这是Web应用程序...
Struts2是一个强大的MVC框架,其配置文件对于理解和配置应用程序的行为至关重要。本文将深入探讨Struts2的主要配置文件,以及它们各自的功能和用途。 首先,我们来看一下核心的配置文件: 1. **web.xml**: 这是Web...
5. **命名空间(Namespace)**:命名空间是Struts2中组织Action的重要机制,它决定了Action的访问URL。默认为空字符串,可自定义如`/`、`/module1`等,帮助划分不同功能模块的Action。 6. **Action**:Struts2的一...
文章中展示了一个具体的包配置实例,其名为“com.kay.struts2”,继承自“struts-default”包,并指定了命名空间为“/test”。包的命名空间在URL映射中扮演着关键角色,决定了Action的访问路径。 - **继承(extends...
- **包结构**:Struts2对WebWork2的包结构进行了重新组织,将其纳入到Struts的命名空间下,这不仅仅是简单的名称更改,更是为了统一框架内部结构,便于开发者理解和使用。 - **社区与生态**:Struts2凭借其更广泛的...
Struts2的Convention插件是一种自动化配置工具,从2.1版本开始引入,旨在减少XML配置,实现Struts2应用的零配置或者最少配置。该插件通过一系列预定义的命名规则和约定,自动解析和映射Action、结果页面、拦截器等...
配置文件的格式通常是XML,遵循一定的命名空间和元素结构。例如,一个Action配置可能如下: ```xml <package name="default" namespace="/" extends="struts-default"> <result name="success">/pages/success....
总结来说,Struts2的XML配置文件是定义应用程序行为的蓝图,它包括包、命名空间、Action和结果的配置,使得开发者可以通过声明式的方式控制请求的处理流程和页面的展示。熟练掌握XML配置是理解和使用Struts2框架的...
学习Struts2注解配置时,可以创建一个简单的Web应用,通过注解定义Action、处理用户请求、展示结果页面,以此来熟悉整个流程。 9. **与其他配置方式的结合** 注解配置可以与XML配置混合使用,根据项目需求灵活...
`struts.xml`是Struts2的核心配置文件,它定义了动作(Actions)、结果(Results)、拦截器(Interceptors)等,控制着请求的流程。以下是其主要内容: 1. **package**: 包的概念是Struts2配置的组织方式,每个包...
- `@Action`注解可以用于覆盖默认的Action配置,如Action名称、命名空间、结果等。 综上所述,`Convetion`插件通过自动化配置,使得Struts2应用的开发更为简洁高效,同时也保持了灵活性,允许开发者通过注解进行...
Struts.xml文件定义了项目的包、命名空间、action映射以及结果页面。在这个登录示例中,定义了一个名为"Login"的action,它关联了一个处理登录请求的LoginAction Java类,并指定了两个结果页面:登录成功返回的...
这是Struts2的核心配置文件之一,包含了一些基本的配置和默认的行为设置。开发者可以根据需求对这些配置进行定制。 ##### 5.3 struts.xml配置文件:重点 这个文件是Struts2中最核心的配置文件,其中定义了各个包...
Struts2是一个经典的Java EE Web应用程序框架,它是Apache软件基金会项目的一部分,主要用于简化Web应用程序的开发。...通过struts.xml配置文件和标签,开发者可以为Web应用定义清晰的请求处理流程和视图返回策略。
Struts2 Convention Plugin允许开发者通过注解来配置Action名称、拦截器、命名空间等,极大地简化了配置过程。 ##### 2.7 默认Action及结果 当用户访问特定路径时,如果没有显式定义Action,则Convention Plugin会...