热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

struts2Demo

1.新建WebProject,名称:struts2Demo;2.建立一个用户库struts2,包含最少的struts2的最少的6个jar文件;其实呢,对于MyEclipse8以上

1.新建Web Project, 名称:struts2Demo;

image

image

2.建立一个用户库struts2, 包含最少的struts2的最少的6个jar文件;

其实呢, 对于MyEclipse8以上来说, 是不必须的, 因为它直接支持struts2了.不需要另外导包.

image

3.用Build Path将struts2的库加进来;

4.在web.xml中加入以下配置:

[?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" >

[!-- struts2的配置 -->
[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>


[welcome-file-list>
[welcome-file>index.jsp[/welcome-file>
[/welcome-file-list>
[/web-app>

5.建立Action,

package com.yenange.action;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
private String uname; //表单中的姓名
private String upass; //表单中的密码
//执行方法
@Override
public String execute() throws Exception {
System.out.println("姓名:"+uname);
System.out.println("密码:"+upass);
if (uname.equals("leaf") && upass.equals("leaf")) {
return "success";
}
return "error";
}
//记住, 要有get和set方法
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}

6.三个页面文件:

//index.jsp
[%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
[html>
[head>
[title>My JSP 'index.jsp' starting page[/title>
[/head>
[body>
[form action="login">
用户名:[input type="text" name="uname">[br>
密码:[input type="text" name="upass">[br>
[input type="submit" value="登陆" />
[/form>
[/body>
[/html>
//welcome.jsp
[%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
[html>
[head>
[title>My JSP 'welcome.jsp' starting page[/title>
[/head>
[body>
welcome struts2

[/body>
[/html>
//fail.jsp;
[%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
[html>
[head>
[title>My JSP 'welcome.jsp' starting page[/title>
[/head>
[body>
出错!

[/body>
[/html>

7.配置struts.xml. (对于MyEclipse6来说, 只能从别的地方copy)

[?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.0.dtd" >
[struts>
[package name="default" namespace="/" extends="struts-default">
[action name="login" class="com.yenange.action.LoginAction">
[result name="success">/welcome.jsp[/result>
[result name="error">/fail.jsp[/result>
[/action>
[/package>
[!-- Add packages here -->
[/struts>



8.到此完成.可以运行一下了, 是不是很简单?

-----------------------------------------------------------------

http://sl514.blog.163.com/blog/static/66327412008121365039/

下面是取得request, session, application这些东西的方法.

package com.yenange.action;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.Action;

public class LoginAction implements Action,ServletRequestAware,SessionAware,ServletContextAware {
private String uname; //表单中的姓名
private String upass; //表单中的密码
HttpServletRequest request; //常用的request
Map session; //常用的session,有不同, 但是不需要管
ServletContext application; //常用的application
//第二种取的方法;
HttpServletRequest request2 = ServletActionContext.getRequest();
HttpServletResponse response2 = ServletActionContext.getResponse();
HttpSession session2 = request2.getSession();

@Override
public void setServletRequest(HttpServletRequest req) {
this.request=req;
}
@Override
public void setSession(Map session) {
this.session=session;
}
@Override
public void setServletContext(ServletContext application) {
this.application=application;
}
//执行方法
public String execute() throws Exception {
if (uname.equals("leaf") && upass.equals("leaf")) {
request.setAttribute("userName", uname);
return "success";
}
request.setAttribute("accessError", uname+"这个用户或密码不正确!");
return "error";
}
//记住, 要有get和set方法
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}

//这些只是初步了, 后面再学习一些关于标签, 动态方法之类的东西.



推荐阅读
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 在尝试为 Unity 编译一个简单的 Java 库时,运行 `ant jar` 命令后遇到了 Java I/O 异常。具体错误信息为“无法启动程序 ${aAPT},错误代码 2”,这通常表示指定的文件或目录不存在。此问题可能是由于环境配置不正确或路径设置有误导致的。建议检查相关路径和环境变量,确保所有依赖项都已正确安装和配置。 ... [详细]
  • 如何在IntelliJ IDEA中生成Maven项目的所有Jar包依赖关系图
    本文详细介绍了如何在IntelliJ IDEA中生成Maven项目的完整Jar包依赖关系图。通过具体步骤和示例,帮助开发者清晰地理解并掌握这一重要功能,适合希望深入了解Maven依赖管理的读者学习参考。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • 深入解析 Android 选择器与形状绘制技术
    本文深入探讨了 Android 中选择器(Selector)与形状绘制(Shape Drawing)技术的应用与实现。重点分析了 `Selector` 的 `item` 元素,其中包括 `android:drawable` 属性的使用方法及其在不同状态下的表现。此外,还详细介绍了如何通过 XML 定义复杂的形状和渐变效果,以提升 UI 设计的灵活性和美观性。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
author-avatar
qqjayzhe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有