Java Web编写示例

Java Web应用程序的编写过程通常涉及多个层次,包括控制层(Controller)、服务层(Service)、数据访问层(DAO)和实体层(Entity)。下面我将详细描述每个层次的作用和编写过程。

  1. 控制层(Controller): 控制层负责接收和处理来自前端的请求,协调其他层次的工作,并返回响应给前端。在Java Web中,常用的控制层框架包括Servlet、Spring MVC等。
  • 创建控制器类:创建一个Java类,使用合适的注解(如@Controller)标识该类为控制器。
  • 定义请求处理方法:在控制器类中定义处理请求的方法,使用合适的注解(如@RequestMapping)标识方法对应的URL路径和请求方法。
  • 处理请求逻辑:在请求处理方法中编写业务逻辑,可以调用服务层的方法来处理具体的业务操作。
  • 返回响应:根据请求处理结果,选择合适的方式返回响应给前端,如跳转到指定页面、返回JSON数据等。
  1. 服务层(Service): 服务层负责处理业务逻辑,协调多个DAO组件来完成具体的操作,并向控制层提供服务接口。服务层通常包含接口和实现类。
  • 创建服务接口:定义服务层接口,声明服务方法。
  • 创建服务实现类:实现服务接口,编写具体的业务逻辑。
  • 注入依赖:在控制层或其他需要使用服务的地方,使用依赖注入(如@Autowired)将服务实例注入。
  1. 数据访问层(DAO): 数据访问层负责与数据库进行交互,提供数据的持久化和检索功能。在Java Web中,常用的数据访问层框架包括JDBC、MyBatis、Hibernate等。
  • 创建DAO接口:定义数据访问层接口,声明数据库操作方法。
  • 创建DAO实现类:实现DAO接口,使用合适的数据库访问技术(如JDBC)编写具体的数据库操作逻辑。
  • 注入依赖:在服务层或其他需要使用DAO的地方,使用依赖注入将DAO实例注入。
  1. 实体层(Entity): 实体层负责定义数据模型,将数据库中的表映射为Java对象。通常使用POJO(Plain Old Java Object)表示实体对象。
  • 创建实体类:创建Java类,定义类的属性和对应的getter/setter方法,可以使用注解(如@Entity)标识类与数据库表的映射关系。

综合示例代码如下:

// 控制层
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public String userList(Model model) {
        List<User> userList = userService.getAllUsers();
        model.addAttribute("users", userList);
        return "user_list";
    }

    @RequestMapping("/create")
    public String createUser(User user) {
        userService.createUser(user);
        return "redirect:/user/list";
    }
}

// 服务层接口
public interface UserService {
    List<User> getAllUsers();
    void createUser(User user);
}

// 服务层实现类
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }

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

// 数据访问层接口
public interface UserDao {
    List<User> getAllUsers();
    void createUser(User user);
}

// 数据访问层实现类
@Repository
public class UserDaoImpl implements UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<User> getAllUsers() {
        String sql = "SELECT * FROM users";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
    }

    @Override
    public void createUser(User user) {
        String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
        jdbcTemplate.update(sql, user.getUsername(), user.getEmail());
    }
}

// 实体类
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String email;

    // getter/setter方法省略
}

以上示例展示了一个简单的Java Web应用的代码结构,包括控制层的UserController、服务层的UserService和数据访问层的UserDao,以及对应的实现类和实体类。通过注解实现依赖注入,实现了各个层次之间的协调和交互,完成了数据的展示和操作功能。

  1. 新建字段:如果你需要在数据库中添加新字段,可以使用数据库管理工具(如MySQL Workbench)或命令行工具(如MySQL命令行或SQL脚本)来执行相应的ALTER TABLE语句,以添加新字段。

  2. 编写前端页面:在开发新增功能的前端页面时,你可以使用HTML、CSS和JavaScript等技术。编写一个HTML文件,可以使用表单元素(如输入框、下拉列表等)和按钮等元素来构建用户界面。你还可以使用JavaScript来处理按钮点击事件、验证用户输入等。

  3. 创建实体类:根据新增字段,你需要更新实体类,添加新字段的属性,并在属性上使用适当的注解进行映射。这将与数据库表中的字段相对应。

  4. 创建 Repository 接口和 Mapper 文件:在Spring Boot中,你可以使用Spring Data JPA或MyBatis等持久化框架。对于Spring Data JPA,你可以创建一个继承自JpaRepository或其他相关接口的Repository接口,它将提供基本的CRUD操作。对于MyBatis,你需要创建一个Mapper接口,并使用注解或XML文件来定义SQL映射。

  5. 创建 Service 接口和实现类:创建一个Service接口,定义业务逻辑的方法。然后,创建一个实现该接口的类,编写具体的业务逻辑代码。在Service实现类中,注入Repository或Mapper依赖,并在方法中调用相应的方法进行数据库操作。

  6. 编写 XML 文件(MyBatis):如果你使用的是MyBatis,你需要编写相应的XML文件,定义与Mapper接口中的方法对应的SQL语句和映射关系。

  7. 进行数据库操作:在Service实现类中的方法中,你可以调用Repository的方法(使用Spring Data JPA)或Mapper的方法(使用MyBatis)来进行数据库操作。例如,使用Repository的save方法将实体对象保存到数据库中。

  8. 前后端数据交互:在前端页面中,你可以使用JavaScript来获取用户输入的数据,并将其以请求参数的形式发送到后端。你可以使用AJAX技术将数据发送到后端Controller的特定URL。

  9. 后端处理请求:在Controller中,根据请求的URL和请求方法(如POST、GET),编写相应的处理方法。在方法中,你可以将请求参数绑定到方法参数上,调用Service接口中的方法进行业务处理。

  10. 返回结果:在Controller方法中,根据需要,你可以使用@ResponseBody注解将结果转换为JSON格式返回给前端,或者通过模板引擎将结果渲染到特定的HTML页面。

总之,在JavaWeb开发中,你需要设计数据库结构,编写前端页面和相关的JavaScript代码,创建实体类、Repository接口、Service接口和实现类,配置MyBatis的XML文件(如果使用MyBatis),并在Controller中处理请求和返回结果。这些步骤是相互关联的,根据具体的需求和框架的使用方式可能会有所不同。

在后端获取前端参数的方式可以有多种,具体取决于前端和后端之间的通信方式和数据传输方式。以下是几种常见的方式:

  1. URL参数:在URL中传递参数是一种常见的方式。前端可以通过将参数附加到URL的查询字符串中,然后后端通过解析URL来获取这些参数。例如,URL为http://example.com/api?param1=value1&param2=value2,后端可以通过解析URL获取param1param2的值。

  2. 请求体参数:在POST请求中,前端可以将参数作为请求体的一部分发送给后端。后端可以通过解析请求体来获取这些参数。常见的请求体格式有表单数据(application/x-www-form-urlencoded)和JSON数据(application/json)。在表单数据格式中,参数以键值对的形式发送,后端可以通过解析表单数据来获取参数的值。在JSON数据格式中,参数以JSON对象的形式发送,后端可以将请求体解析为JSON对象,然后获取参数的值。

  3. 请求头参数:前端可以将参数作为请求头的一部分发送给后端。后端可以通过解析请求头来获取这些参数。常见的请求头参数有Authorization(身份验证信息)、Content-Type(请求体的类型)、User-Agent(用户代理信息)等。

  4. 路径参数:在RESTful风格的API中,参数可以作为URL路径的一部分传递。例如,URL为http://example.com/api/users/123,其中123就是路径参数,表示用户的ID。后端可以通过解析URL路径来获取路径参数的值。

在具体实现中,后端框架通常提供了相应的工具或方法来方便地获取前端参数。例如,使用Spring框架时,可以通过注解(如@RequestParam@PathVariable)或框架提供的上下文对象(如HttpServletRequest)来获取前端参数的值。

总结来说,后端获取前端参数的方式可以有URL参数、请求体参数、请求头参数和路径参数等多种方式,具体取决于前后端的通信方式和数据传输方式。后端框架通常提供了相应的工具或方法来方便地获取这些参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.Hibernate<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中 取代CMP,完成数据持久化的重任。 大多数开发机构经常采取创建各自独立的数据持久层。一旦底层的数据结构发生改变,那么修改应用的其余部分使之适应这种改变的代价将是十分巨大的。Hibernate适时的填补了 这一空白,它为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能却非常丰富。 优点: a.Hibernate 使用 Java 反射机制而不是字节码增强程序来实现透明性。 b.Hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。 c.它支持各种关系数据库,从一对一到多对多的各种复杂关系。 缺点:它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)其独有的界面和可怜的市场份额也让人不安,尽管如此,Hibernate 还是以其强大的发展动力减轻了 这些风险。其他的开源持久性框架也有一些,不过都没有 Hibernate 这样有市场冲击力。 面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧,不好也吧,我唯一觉得 遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的 CTO,对于JDO和Hibernate有过一些激烈的争论,我曾经耐心的看了一遍,仍然没有发现针对Hibernate真正有力的攻击,那些所谓的攻击无非针对Hibernate没有一个GUI的配置工 具,没有商业公司支持,没有标准化等等这些站不住脚的理由。 补充几点我的意见: 一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java 应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。 二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在 兼容性问题。 三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而 不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构: 传统的架构: 1) Session Bean <-> Entity Bean <-> DB 为了解决性能障碍的替代架构: 2) Session Bean <-> DAO <-> JDBC <-> DB 使用Hibernate来提高上面架构的开发效率的架构: 3) Session Bean <-> DAO <-> Hibernate <-> DB 就上面3个架构来分析: 1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。 2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整 PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行 效率。EB的架构效率会差的很远。 3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效 率高的惊人,JDBC次之,而EB架构很可能会失败。 4、分布式,安全检查,集群,负载均衡的支持 由于有SB做为Facade,3个架构没有区别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值