为了账号安全,请及时绑定邮箱和手机立即绑定

JavaEE学习:从入门到初级实战指南

概述

JavaEE学习涵盖了从环境搭建到实战项目的全面内容,包括JavaEE架构特点、开发工具配置、第一个JavaEE应用程序实例、数据库连接与JDBC使用等。此外,文章还介绍了常用框架如Spring和Hibernate的基本使用方法,并详细解析了项目实战中的关键技术点。

JavaEE学习:从入门到初级实战指南
JavaEE简介与环境搭建

JavaEE的定义与特点

JavaEE (Java Platform, Enterprise Edition) 是由Oracle提供的企业级应用平台。JavaEE架构旨在通过标准的API和组件模型为企业级应用提供一个跨平台的开发环境。其主要特点包括:

  • 可移植性:JavaEE规范保证了应用在不同服务器和操作系统之间具有高度的可移植性。
  • 可扩展性:支持多线程操作,允许应用程序根据需要动态增加或减少资源。
  • 独立性:JavaEE应用与底层操作系统和硬件的独立性,使开发人员可以专注于业务逻辑的实现。
  • 安全性:企业级应用对数据的保护要求很高,JavaEE提供了多种安全模型和机制来确保应用的安全性。
  • 多层架构:JavaEE支持客户端、服务器端和企业资源的三层架构,这种架构可以有效地分布应用的逻辑和处理。

开发环境的搭建步骤与工具介绍

开发JavaEE应用,你需要安装和配置以下工具:

  1. Java开发工具包(JDK):Java SE 8及以上版本。
  2. 集成开发环境(IDE):推荐使用Eclipse或IntelliJ IDEA。
  3. 应用服务器:Tomcat、JBoss (WildFly)、WebSphere、Oracle WebLogic Server等。
  4. 数据库:MySQL、Oracle、SQL Server等。

搭建步骤

  1. 安装JDK:从Oracle官方网站下载JDK并安装。配置环境变量JAVA_HOMEPATH
  2. 安装IDE:下载并安装Eclipse或IntelliJ IDEA。
  3. 安装应用服务器:下载并安装Tomcat,并配置环境变量CATALINA_HOMECATALINA_BASE
  4. 安装数据库:下载并安装MySQL或其他数据库,并配置数据库连接。
  5. 配置IDE与服务器:在IDE中配置服务器连接。

第一个JavaEE应用程序实例

创建一个简单的JavaEE应用程序,用于显示"Hello World"。

  1. 创建动态Web项目

    • 打开Eclipse,选择File -> New -> Dynamic Web Project
    • 设置项目名称,如HelloWorldWeb
    • 选择Dynamic Web Module版本,如3.1
    • 完成创建。
  2. 创建Servlet类

    • 右键项目,选择New -> Servlet
    • 设置Servlet名称,如HelloWorldServlet
    • 选择Dynamic Web Project,并设置Servlet类名。
    • 完成创建。
  3. 编写Servlet代码

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloWorldServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html");
            response.getWriter().println("<h1>Hello World!</h1>");
        }
    }
  4. 配置Web.xml

    WEB-INF目录下找到web.xml文件,添加Servlet的映射。

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <servlet>
            <servlet-name>HelloWorldServlet</servlet-name>
            <servlet-class>HelloWorldServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloWorldServlet</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    </web-app>
  5. 运行项目

    选中项目,右键点击Run As -> Run on Server,选择你配置好的Tomcat服务器。

JavaWeb基础

JavaWeb的核心概念与术语

JavaWeb开发使用了许多核心概念和术语,这些术语包括:

  • Servlet:Servlet是一个运行在Web服务器上的Java类,用于生成动态内容,并响应客户端的请求。
  • JSP:JavaServer Pages是一种动态网页技术,允许你在HTML编码中嵌入Java代码。
  • HTTP:超文本传输协议,用于客户端(如浏览器)和服务器之间传输数据。
  • MIME类型:指明一个资源的类型,服务器和客户端通过MIME类型来识别文件类型。
  • Session:用于跟踪用户会话的机制。
  • Cookie:客户端存储在浏览器中的小型数据文件,用于存储用户信息。

Servlet与JSP的基本使用方法

Servlet的使用方法:

  1. 创建Servlet类

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class SimpleServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<h1>Hello, Servlet!</h1>");
        }
    }
  2. 配置Web.xml

    <servlet>
        <servlet-name>SimpleServlet</servlet-name>
        <servlet-class>com.example.SimpleServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SimpleServlet</servlet-name>
        <url-pattern>/simple</url-pattern>
    </servlet-mapping>

JSP的使用方法:

  1. 创建JSP页面

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello, JSP!</h1>
    </body>
    </html>
  2. 页面中嵌入Java代码

    <%!
    int count = 0;
    %>
    
    <%
    count++;
    %>
    
    <h1>Page visited <%= count %> times.</h1>

Web.xml配置文件解析

Web.xml是JavaWeb应用的配置文件,包含两个主要部分:<servlet><servlet-mapping>

  • <servlet>:定义Servlet的名称和类名。

    <servlet>
      <servlet-name>SimpleServlet</servlet-name>
      <servlet-class>com.example.SimpleServlet</servlet-class>
    </servlet>
  • <servlet-mapping>:定义Servlet的URL映射。

    <servlet-mapping>
      <servlet-name>SimpleServlet</servlet-name>
      <url-pattern>/simple</url-pattern>
    </servlet-mapping>
数据库连接与JDBC使用

数据库基础与JDBC简介

JDBC (Java Database Connectivity) 是Java中用于连接数据库的标准API。它允许Java程序访问不同的数据库系统,包括MySQL、Oracle、SQL Server等。

JDBC连接数据库的步骤与代码示例

  1. 导入JDBC驱动

    在项目中导入数据库的JDBC驱动。例如,对于MySQL,可以使用mysql-connector-java

  2. 注册驱动

    Class.forName("com.mysql.cj.jdbc.Driver");
  3. 建立连接

    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
  4. 执行SQL语句

    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
  5. 处理结果集

    while (rs.next()) {
        System.out.println(rs.getString("column1"));
    }
  6. 关闭资源

    rs.close();
    stmt.close();
    conn.close();

数据库操作:增删改查

查询(Query)

public List<String> selectAll() {
    List<String> result = new ArrayList<>();
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
        stmt = conn.createStatement();
        rs = stmt.executeQuery("SELECT * FROM mytable");
        while (rs.next()) {
            result.add(rs.getString("column1"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return result;
}

插入(Insert)

public void insert(String data) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
        String sql = "INSERT INTO mytable (column1) VALUES (?)";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, data);
        pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

更新(Update)

public void update(String id, String newData) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
        String sql = "UPDATE mytable SET column1 = ? WHERE id = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, newData);
        pstmt.setString(2, id);
        pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

删除(Delete)

public void delete(String id) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
        String sql = "DELETE FROM mytable WHERE id = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, id);
        pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
JavaEE框架初探

常用JavaEE框架简介

JavaEE框架常用于简化开发和提高代码复用性。常用的框架包括:

  • Spring:一个轻量级框架,提供依赖注入、AOP(面向切面编程)等特性。
  • Hibernate:一个对象关系映射框架,用于简化数据库操作。
  • Struts:用于构建Web应用的MVC框架。

框架的基本使用方法与配置

Spring框架简介与使用

  1. 引入依赖

    pom.xml中引入Spring依赖。

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.10</version>
    </dependency>
  2. 配置Spring Bean

    使用XML配置文件或Java配置类定义Bean。

    XML配置

    <bean id="myBean" class="com.example.MyBean" />

    Java配置

    @Configuration
    public class AppConfig {
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    }
  3. 依赖注入

    @Component
    public class MyService {
        @Autowired
        private MyBean myBean;
    }
  4. 具体应用实例

    • 创建实体类

      @Entity
      public class User {
          @Id
          @GeneratedValue(strategy=GenerationType.AUTO)
          private Long id;
          private String username;
          private String password;
      
          // getters and setters
      }
    • 配置Spring Bean

      @Configuration
      public class AppConfig {
          @Bean
          public EntityManagerFactory entityManagerFactory() {
              LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
              bean.setDataSource(dataSource());
              bean.setPackagesToScan("com.example");
              bean.setPersistenceUnitName("myPU");
              return bean.getObject();
          }
      
          @Bean
          public DataSource dataSource() {
              DriverManagerDataSource dataSource = new DriverManagerDataSource();
              dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
              dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
              dataSource.setUsername("root");
              dataSource.setPassword("password");
              return dataSource;
          }
      }
    • 定义Service和Repository

      @Component
      public class UserService {
          @Autowired
          private EntityManager entityManager;
      
          public void saveUser(User user) {
              entityManager.persist(user);
          }
      
          public User getUser(Long id) {
              return entityManager.find(User.class, id);
          }
      }
    • 创建控制器

      @Controller
      public class UserController {
          @Autowired
          private UserService userService;
      
          @GetMapping("/users/{id}")
          public String getUser(@PathVariable Long id, Model model) {
              User user = userService.getUser(id);
              model.addAttribute("user", user);
              return "user";
          }
      }

Hibernate框架简介与使用

  1. 配置Hibernate

    persistence.xml中配置Hibernate。

    <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
                 version="2.1">
        <persistence-unit name="myPU" transaction-type="RESOURCE_LOCAL">
            <class>com.example.MyEntity</class>
            <properties>
                <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="javax.persistence.jdbc.user" value="root"/>
                <property name="javax.persistence.jdbc.password" value="password"/>
            </properties>
        </persistence-unit>
    </persistence>
  2. 操作实体

    public class MyEntity {
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;
        private String name;
        // getters and setters
    }
    
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("myPU");
    EntityManager em = factory.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    MyEntity entity = new MyEntity();
    entity.setName("Test");
    em.persist(entity);
    tx.commit();
    em.close();
    factory.close();

框架在项目中的应用实例

假设有一个简单的JavaEE项目,包含一个用户管理系统,使用Spring和Hibernate。

  1. 创建实体类

    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;
        private String username;
        private String password;
    
        // getters and setters
    }
  2. 配置Spring Bean

    @Configuration
    public class AppConfig {
        @Bean
        public EntityManagerFactory entityManagerFactory() {
            LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
            bean.setDataSource(dataSource());
            bean.setPackagesToScan("com.example");
            bean.setPersistenceUnitName("myPU");
            return bean.getObject();
        }
    
        @Bean
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
            dataSource.setUsername("root");
            dataSource.setPassword("password");
            return dataSource;
        }
    }
  3. 定义Service和Repository

    @Component
    public class UserService {
        @Autowired
        private EntityManager entityManager;
    
        public void saveUser(User user) {
            entityManager.persist(user);
        }
    
        public User getUser(Long id) {
            return entityManager.find(User.class, id);
        }
    }
  4. 创建控制器

    @Controller
    public class UserController {
        @Autowired
        private UserService userService;
    
        @GetMapping("/users/{id}")
        public String getUser(@PathVariable Long id, Model model) {
            User user = userService.getUser(id);
            model.addAttribute("user", user);
            return "user";
        }
    }
JavaEE安全机制

Web应用的安全性问题与解决方案

Web应用面临多种安全性问题,包括:

  • SQL注入:攻击者通过在Web表单中插入恶意SQL代码,尝试获取未经授权的数据。
  • XSS(跨站脚本):攻击者在客户端浏览器上执行恶意脚本,劫持用户会话。
  • CSRF(跨站请求伪造):攻击者伪造来自受信任用户的身份,执行恶意操作。

用户认证与授权机制

认证:验证用户身份的过程,常用的方法包括:

  • 表单认证:通过登录表单提交用户名和密码。
  • OAuth:第三方认证,如Google、Facebook。

授权:确定用户权限的过程,常用的方法包括:

  • 角色基础授权:基于用户角色分配权限。
  • 权限基础授权:基于具体操作权限分配。

示例代码:使用Spring Security进行用户认证和授权。

  1. 添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
  2. 配置Spring Security

    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication()
                .withUser("user").password(passwordEncoder().encode("password")).roles("USER");
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .antMatchers("/admin").hasRole("ADMIN")
                    .antMatchers("/user").hasAnyRole("USER", "ADMIN")
                    .anyRequest().authenticated()
                .and()
                    .formLogin()
                    .loginPage("/login")
                    .permitAll()
                .and()
                    .logout()
                    .permitAll();
        }
    
        @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
    }

安全编码实践

  1. 输入验证:确认输入数据的格式和内容。
  2. SQL注入防范:使用预编译语句或ORM框架。
  3. XSS防范:使用Web框架提供的安全功能。
  4. CSRF防范:使用防伪令牌。

示例代码:使用防伪令牌防止CSRF攻击。

@GetMapping("/link")
public String getLink(@ModelAttribute("token") String token) {
    if (!token.equals(session.getAttribute("token"))) {
        throw new IllegalStateException("Invalid token");
    }
    // process the request
    return "result";
}
JavaEE项目实战

一个简单的JavaEE项目开发流程

需求分析:用户管理系统,支持用户注册、登录、查询、修改和删除。

设计阶段

  • 数据库设计
    • 用户表:包含用户ID、用户名、密码等字段。
  • 业务逻辑设计
    • 用户服务类,用于处理用户注册、登录等逻辑。
  • Web界面设计
    • 注册页面、登录页面、用户列表页面等。

实现阶段

  1. 创建实体类

    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;
        private String username;
        private String password;
    
        // getters and setters
    }
  2. 创建Service类

    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepository;
    
        public User registerUser(User user) {
            return userRepository.save(user);
        }
    
        public User getUserById(Long id) {
            return userRepository.findById(id).orElse(null);
        }
    }
  3. 创建Repository接口

    @Repository
    public interface UserRepository extends JpaRepository<User, Long> {
    }
  4. 创建控制器

    @Controller
    public class UserController {
        @Autowired
        private UserService userService;
    
        @GetMapping("/users")
        public String listUsers(Model model) {
            List<User> users = userService.getAllUsers();
            model.addAttribute("users", users);
            return "users";
        }
    
        @GetMapping("/register")
        public String registerForm(Model model) {
            User user = new User();
            model.addAttribute("user", user);
            return "register";
        }
    
        @PostMapping("/register")
        public String registerSubmit(@ModelAttribute("user") User user) {
            userService.registerUser(user);
            return "redirect:/users";
        }
    }

实战项目中的关键技术点解析

关键技术点

  • Spring MVC:用于构建基于MVC模式的Web应用。
  • Spring Data JPA:简化数据库操作。
  • Thymeleaf:模板引擎,用于生成动态HTML页面。

示例代码:使用Thymeleaf生成动态HTML页面。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>Username</th>
        </tr>
        <tr th:each="user : ${users}">
            <td th:text="${user.id}"></td>
            <td th:text="${user.username}"></td>
        </tr>
    </table>
</body>
</html>

项目部署与测试

部署

  • 打包项目:使用Maven或Gradle打包项目。
  • 部署到服务器:将打包好的War或Jar文件部署到应用服务器(如Tomcat)。

测试

  • 单元测试:使用JUnit进行业务逻辑单元测试。
  • 集成测试:使用Selenium进行Web界面集成测试。
  • 性能测试:使用JMeter进行压力测试。

示例代码:使用JUnit进行单元测试。

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {
    @Autowired
    private UserService userService;

    @Test
    public void testRegisterUser() {
        User user = new User();
        user.setUsername("testuser");
        user.setPassword("testpassword");

        User registeredUser = userService.registerUser(user);
        assertNotNull(registeredUser.getId());
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消