概述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日

相关文章

  • Tomcat启动核心流程示例详解

    Tomcat启动核心流程示例详解 简介 Tomcat 是一个开源的 Web 应用服务器,是最流行的 Java Web 应用服务器之一。在开发和部署 Web 应用时,Tomcat 的启动过程是非常重要的,因为它决定了 Web 应用的运行状态以及访问方式等重要因素。下面将详细讲解 Tomcat 启动的核心流程,并提供两个示例来帮助理解。 启动流程 Tomcat …

    Java 2023年5月19日
    00
  • httpclient模拟post请求json封装表单数据的实现方法

    Httpclient模拟POST请求JSON封装表单数据的实现方法 什么是Httpclient? HttpClient是Apache下的一个开源项目,用于模拟浏览器请求,支持协议如下:HTTP、HTTPS、FTP、LDAP、SMTP。 为什么使用Httpclient模拟POST请求JSON封装表单数据? Httpclient模拟POST请求JSON封装表单数…

    Java 2023年5月26日
    00
  • 浅谈Mysql大数据分页查询解决方案

    首先我们需要了解什么是大数据分页查询。当一个数据表记录非常多时,如果需要一次性查询出所有数据,在性能和效率上都会产生很大的压力,因此需要进行数据分页查询。而Mysql是一款非常流行的数据库,支持分页查询操作,但在大数据量下,Mysql的分页查询会带来性能和效率的问题。 那么如何解决Mysql的大数据分页查询问题呢?以下是一些实用的方法。 1.使用Limit分…

    Java 2023年6月15日
    00
  • Java 项目生成静态页面的代码

    生成静态页面的过程可以通过以下步骤完成: 第一步:选择合适的技术栈 要生成静态页面,需要选择适合的技术栈来完成。常见的技术栈包括但不限于: 前端框架:Vue、React、AngularJS等 构建工具:Webpack、Gulp、Grunt等 静态网站生成器:Jekyll、Hugo、Hexo等 选择合适的技术栈,可以根据个人或者团队的技术熟练度、项目需求、性能…

    Java 2023年6月15日
    00
  • Java8之Stream流代替For循环操作

    让我来为你详细讲解“Java8之Stream流代替For循环操作”的完整攻略。 概述 Stream是Java8中引入的一种处理数据集合的新特性,可以被用来代替传统的for循环操作,能够提高代码的可读性和运行效率。 Stream入门 首先需要对基本的Stream概念做一些了解。 Stream是数据的一种抽象,它不是一种数据结构,不保存数据,而是提供一个数据集合…

    Java 2023年5月26日
    00
  • 线程同步的作用是什么?

    以下是关于线程同步的完整使用攻略: 线程同步的作用是什么? 线程同步是指多个线程之间的协作同步,以避出现数据不一致或者数据污染的问题。在多线程编程中,如果多个线程同时访问共享资源,就会出数据不一致或者数据染的问题,这时就需要使用线程同步来解决这个问题。 线程同步的作用主要有几个方面: 1. 避免数据不一致 在多线程编程中,如果多个线程同时访问共享资源,就出现…

    Java 2023年5月12日
    00
  • JSP中一些JSTL核心标签用法总结

    下面是关于“JSP中一些JSTL核心标签用法总结”的完整攻略: JSP中一些JSTL核心标签用法总结 JSTL是JSP标准标签库,提供了在JSP页面中进行流程控制、条件判断、数据遍历等操作的标签库。JSTL核心标签库是JSTL标签库的核心部分,包含了最基本、使用频率最高的标签。 1.引入JSTL标签库 在使用JSTL标签之前,需要先引入JSTL库,在JSP页…

    Java 2023年6月15日
    00
  • SpringBoot如何实现接口版本控制

    在实际开发中,我们经常需要对接口进行版本控制,以便更好地管理和维护接口。Spring Boot提供了多种方法来实现接口版本控制,以下是一个完整攻略: 方法一:使用URL路径 使用URL路径是一种常见的实现接口版本控制的方法。我们可以在URL路径中添加版本号,以便区分不同版本的接口。以下是一个示例: @RestController @RequestMappin…

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