概述Java的struts2框架

概述Java的struts2框架

简介

Java的struts2框架是一个MVC(Model-View-Controller)模式的Web框架,它借鉴了许多JSP/Servlet和Struts的优点,同时也做了很多改进,达到了更优秀的Web应用开发效果。struts2框架可以很好的帮助开发人员快速搭建Web应用程序,并且可以方便地进行功能扩展和维护。

struts2框架提供了很多实用、高效、易用的功能,有很好的活动记录、国际化支持、表单验证、注解等特性。此外,struts2框架还拥有良好的体系结构,可以很好的进行配置和扩展,同时支持Spring、Hibernate、MyBatis等流行的开源框架。

如何使用

下面我们来介绍如何在Java Web应用中使用Struts2框架,整个过程主要分为以下几个步骤:

  1. 引入Struts2依赖

Struts2框架需要在Maven或Gradle中引入相应的依赖,或者手动把Jar包复制到项目中。这里以Maven为例,在pom.xml中添加如下配置:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.26</version>
</dependency>
  1. 配置Struts2

在项目的src/main/resouces目录下创建一个名为struts.xml的配置文件,该文件用于配置拦截器和对应的Action。

示例配置:

<?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>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="default" extends="struts-default">
        <action name="hello" class="com.example.HelloWorldAction">
            <result name="success">/hello.jsp</result>
        </action>
    </package>
</struts>
  1. 创建Action

在Java源码中创建一个名为HelloWorldAction的Class,实现自己的业务逻辑。

示例代码:

package com.example;

public class HelloWorldAction {
    private String message;

    public String execute() throws Exception {
        setMessage("Hello Struts2");
        return "success";
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
  1. 搭建Web

在Web目录下创建一个名为hello.jsp的JSP文件,用于展示我们的业务逻辑数据。

示例代码:

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
<h1><s:property value="message" /></h1>
</body>
</html>
  1. 运行测试

最后一步是运行我们的Web应用程序,访问http://localhost:8080/应用程序名称/hello.action,就可以看到我们的“Hello Struts2”页面了。

示例1

下面介绍一个简单的登陆验证的例子,来认识下Struts2的基本概念和流程。

步骤:

  1. 配置struts.xml
<action name="login" class="com.example.LoginAction" method="execute">
    <result name="success">/success.jsp</result>
    <result name="error">/error.jsp</result>
    <result name="input">/login.jsp</result>
</action>
  1. 创建LoginAction类
public class LoginAction {
    private String username;
    private String password;
    public String execute() {
        if ("admin".equals(username) && "123456".equals(password)) {
            return "success";
        } else {
            return "error";
        }
    }
    // 省略setter和getter方法
}
  1. 创建login.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
    <head>
        <title>登录</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <s:form action="login">
            <s:textfield name="username" label="用户名"></s:textfield>
            <s:password name="password" label="密 码"></s:password>
            <s:submit value="登 录"></s:submit>
        </s:form>
    </body>
</html>
  1. 创建success.jsp和error.jsp

success.jsp与error.jsp的代码内容可以自行编写。

示例2

下面介绍一个简单的CRUD操作的例子,来认识下Struts2的操作实践。

步骤:

  1. 配置struts.xml
<package name="default" extends="struts-default">
    <action name="list" class="com.example.UserAction" method="list">
        <result name="success">/user/list.jsp</result>
    </action>
    <action name="input" class="com.example.UserAction" method="input">
        <result name="success">/user/edit.jsp</result>
    </action>
    <action name="save" class="com.example.UserAction" method="save">
        <result name="success" type="redirectAction">list</result>
    </action>
    <action name="edit" class="com.example.UserAction" method="edit">
        <result name="success">/user/edit.jsp</result>
    </action>
    <action name="delete" class="com.example.UserAction" method="delete">
        <result name="success" type="redirectAction">list</result>
    </action>
</package>
  1. 创建UserAction类
public class UserAction extends ActionSupport implements ModelDriven<User> {
    private User user;
    private List<User> userList;
    private UserService userService;
    private Long id;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    public String list() {
        userList = userService.findAllUsers();
        return SUCCESS;
    }

    public String input() {
        return SUCCESS;
    }

    public String edit() {
        user = userService.findById(id);
        return SUCCESS;
    }

    public String save() {
        userService.save(user);
        return SUCCESS;
    }

    public String delete() {
        userService.delete(id);
        return SUCCESS;
    }

    public User getModel() {
        if (user == null) {
            user = new User();
        }
        return user;
    }

    public void prepare() throws Exception {
        if (id != null) {
            user = userService.findById(id);
        }
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}
  1. 创建edit.jsp和list.jsp

edit.jsp和list.jsp的内容可以自行编写。

  1. 创建UserService类

UserService是一个服务类,用于实现User的CRUD操作。

示例代码:

public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public User findById(Long id) {
        return userDao.findById(id);
    }

    @Override
    public void save(User user) {
        userDao.save(user);
    }

    @Override
    public void delete(Long id) {
        userDao.delete(id);
    }

    @Override
    public List<User> findAllUsers() {
        return userDao.findAllUsers();
    }
}
  1. 创建UserDao类

UserDao是一个数据访问层,用于访问数据库。

示例代码:

public class UserDaoImpl implements UserDao {

    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public User findById(Long id) {
        return (User) sessionFactory.getCurrentSession().get(User.class, id);
    }

    @Override
    public void save(User user) {
        sessionFactory.getCurrentSession().saveOrUpdate(user);
    }

    @Override
    public void delete(Long id) {
        sessionFactory.getCurrentSession().createQuery("delete from User where id=?")
                .setParameter(0, id).executeUpdate();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<User> findAllUsers() {
        return sessionFactory.getCurrentSession().createCriteria(User.class).list();
    }
}
  1. 配置spring.xml

在spring.xml文件中配置相关Bean定义。

示例代码:

<bean id="userDao" class="com.example.UserDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<bean id="userService" class="com.example.UserServiceImpl">
    <property name="userDao" ref="userDao"/>
</bean>

以上就是Struts2的一个简单的CRUD操作示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:概述Java的struts2框架 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java中的日期和时间比较大小

    Java日期和时间比较大小的攻略 在Java中,我们可以使用Java.util.Date类和Java.time.LocalDateTime类来操作日期和时间。其中,Date类和早期的Java版本一同发布,而LocalDateTime则是Java 8引入的新类。在比较两个日期是否相等或者比较大小时,我们需要注意它们的精确度和格式。 比较Date类型的日期和时间…

    Java 2023年5月20日
    00
  • jsp实现简单图片验证码功能

    # JSP实现简单图片验证码功能攻略 为了保证用户输入的真实性和安全性,很多网站都会使用图片验证码来防止恶意程序和自动化工具对用户进行攻击。本攻略将为您介绍如何使用jsp实现简单的图片验证码功能。 前置条件: 本攻略假设您已经掌握了Java语言的基础,具备jsp编写基础。 攻略步骤 1. 在JSP页面上写出验证码的HTML代码 该代码可以放在你前台的注册页面…

    Java 2023年6月15日
    00
  • Java多线程之定时器Timer的实现

    对于Java多线程之定时器Timer的实现,我们可以分为以下几个步骤: 1. 导入Timer类 在Java中,我们需要通过import java.util.Timer来导入Timer类的使用。 2. 创建Timer实例对象 在导入Timer类之后,我们需要通过Timer timer = new Timer()来创建一个Timer实例对象。 3. 创建Time…

    Java 2023年5月19日
    00
  • java 实现下压栈的操作(能动态调整数组大小)

    实现下压栈的操作是实现栈数据结构的一种方式,下面是如何用Java实现这种操作,同时可以动态调整数组大小。 实现步骤 定义一个类来存储栈的操作。 在该类中创建一个数组来存储栈的元素。 创建一个变量来存储栈中元素的数量。 实现一个方法push(),将元素压入栈中。如果数组已满,则将数组的大小扩大一倍。将新元素添加到数组的结尾。 实现一个方法pop(),将栈顶元素…

    Java 2023年5月26日
    00
  • java — Stream流

    注意:Stream和IO流(InputStream/OutputStream)没有任何关系,请暂时忘记对传统IO流的固有印象 传统集合的多步遍历代码 几乎所有的集合(如Collection接口或Map接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如: public clas…

    Java 2023年4月22日
    00
  • 深入浅出解析Java ThreadLocal原理

    深入浅出解析Java ThreadLocal原理 什么是ThreadLocal Java线程中的一个变量,用于在各个线程之间独立存储数据 可以理解为每个线程拥有一个独立的变量副本,不受其他线程的影响 ThreadLocal的使用方法 ThreadLocal是一个泛型类,可以通过创建ThreadLocal对象,并通过get和set方法操作对应的变量副本 示例代…

    Java 2023年5月27日
    00
  • 使用CXF和Jersey框架来进行Java的WebService编程

    使用CXF和Jersey框架进行Java的WebService编程步骤如下: 配置pom.xml文件,添加CXF和Jersey框架相关的依赖。 “` org.apache.cxf cxf-bundle-jaxrs 3.3.6 org.glassfish.jersey.core jersey-server 2.30 org.glassfish.jersey.…

    Java 2023年5月31日
    00
  • Java使用jni清屏功能的实现(只针对cmd)

    下面是关于Java使用JNI清屏功能的实现攻略。 1. 概述 Java中使用JNI可以调用C代码,因此我们可以使用C代码实现一些Java无法直接实现的功能。本文将介绍如何使用JNI实现Java清屏功能(只针对cmd)。 2. 具体实现 2.1 JNI代码 我们需要编写C代码来实现清屏操作。以下是一个简单的C代码示例,可以实现Windows下的清屏操作: #i…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部