JavaWeb 핵심, 종합 사례(자세히! 웹 개발 과정)

목차

사례 설명

1. MavenWeb 프로젝트 생성

2. 관련 종속성 가져오기

1. Maven 컴파일 플러그인 가져오기

2. Tomacat 플러그인 가져오기

3. 서블릿 종속성 가져오기

4. druid 데이터베이스 연결 풀 종속성 가져오기

5. mysql 종속성 가져오기

6. mybatis 종속성 가져오기

7. junit 종속성 가져오기

8. mybatis 핵심 구성 파일 mybatis-config.xml을 가져옵니다.

3. 매퍼 에이전트 사용

MySql 매핑 파일 XXXMapper.xml 가져오기

 매퍼 인터페이스 생성

4. IDEA는 Tomcat을 구성합니다.

5. 데이터베이스 생성

6. 코딩 시작

1. 엔터티 클래스 사용자 생성

 2. 매퍼 인터페이스에서 사용자 작업 정의

3. 매퍼 인터페이스에 해당하는 SQL 매핑 파일에 SQL 문을 생성합니다.

4. 도구 클래스 생성

5. 로그인 및 등록의 비즈니스 로직을 처리하기 위한 서블릿 패키지 생성

로그인 작업:

등록 작업:

7. 프로젝트 디스플레이


개인 블로그에 오신 것을 환영합니다---  Ape Inn

사례 설명

사용자 로그인 및 사용자 등록 논리를 완료하고 백엔드 데이터베이스에 연결합니다.

1. MavenWeb 프로젝트 생성

New Module을 클릭하고 Use Skeleton to Build Quickly를 선택하세요.

2. 관련 종속성 가져오기

pom.xml 파일에서 쓸모없는 코드를 삭제하고 프로젝트에 필요한 종속성을 가져옵니다. 패키징 모드 비트 워 패키지 설정

1. Maven 컴파일 플러그인 가져오기

 컴파일된 jdk 버전을 선언하고, 플러그인을 임포트하지 않으면 릴리즈 버전 5가 지원되지 않는다는 오류가 발생합니다.

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
</build>

2. Tomacat 플러그인 가져오기

Maven이 Tomcat 프로젝트 플러그인을 직접 컴파일하도록 허용, 선택 설치, tomcat7만 지원

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <port>80</port>
     </configuration>
</plugin>

3. 서블릿 종속성 가져오기

<dependencies>

   <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.1.0</version>
     <scope>provided</scope>
   </dependency>

4. druid 데이터베이스 연결 풀 종속성 가져오기

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.12</version>
   </dependency>

5. mysql 종속성 가져오기

<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.34</version>
   </dependency>

6. mybatis 종속성 가져오기

<dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.5.9</version>
   </dependency>

7. junit 종속성 가져오기

<dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>3.8.2</version>
     <scope>test</scope>
   </dependency>
</dependencies>

8. mybatis 핵심 구성 파일 mybatis-config.xml을 가져옵니다.

리소스 리소스 폴더에 넣으세요.

<?xml version="1.0" encoding="UTF-8" ?>

<!--Mybatis核心配置文件-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--
    使用typeAliases再进行包扫描,给该包下的所有实体类起别名,直接使用不区分大小写的类名
    例如SQL映射文件下的返回值类型可以直接使用user,而不是com.itheima.pojo.user
    -->
    <typeAliases>
        <package name="com.itheima.pojo"/>
    </typeAliases>

    <!--environments:配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment-->
    <environments default="development">
        <environment id="development">
            <!--事物的管理方式-->
            <transactionManager type="JDBC"/>
            <!--数据库连接池,默认为POOLED-->
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/users?useSSL=false&amp;userServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载SQL映射文件,使用包扫描-->
        <package name="com.itheima.mapper"/>
    </mappers>
</configuration>

3. 매퍼 에이전트 사용

MySql 매핑 파일 XXXMapper.xml 가져오기

파일 이름은 (운영 pojo 엔터티 클래스 개체 이름 + Mapper).xml이며 리소스 리소스 폴더에 배치됩니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!--SQL映射文件-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--mapper根标签  namespace必须要指定名称-->
<mapper namespace="com.itheima.mapper.UserMapper">

</mapper>

 매퍼 인터페이스 생성

java 폴더에 매퍼 패키지를 생성하고, 패키지 하위에 SQL 매핑 파일과 동일한 이름의 매퍼 인터페이스를 생성한 후, 해당 인터페이스에 데이터베이스 운영 방식을 선언합니다.MyBatisX 플러그인을 설치하면 빠른 점프가 가능합니다. 메소드와 매핑 파일 사이.

 동시에 리소스 폴더 하위에 매퍼 인터페이스 패키지명과 동일한 이름의 폴더를 생성하고 그 안에 SQL 매핑 파일을 넣어준다.

 완전한 매퍼 에이전트

4. IDEA는 Tomcat을 구성합니다.

 Web Core 에는 명확한 지침이 있으므로 배포 구성 및 war 패키지 가져오기에 주의하세요.

5. 데이터베이스 생성

아이디 user_name 비밀번호 전화번호

6. 코딩 시작

1. 엔터티 클래스 사용자 생성

public class User {
    private Integer id;
    private String username;
    private String password;
    private String tel;

    public User() {
    }

    public User(String username, String password,String tel) {
        this.username = username;
        this.password = password;
        this.tel = tel;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }
}

 2. 매퍼 인터페이스에서 사용자 작업 정의

public interface UserMapper {
    //根据用户名和密码查询用户对象
    User select(@Param("username") String username, @Param("password") String password);

    //注册用户
    int add(User user);

    //根据用户名查找是否存在
    User selectByName(@Param("username") String username);
}

3. 매퍼 인터페이스에 해당하는 SQL 매핑 파일에 SQL 문을 생성합니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!--SQL映射文件-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--mapper根标签  namespace必须要指定名称-->
<mapper namespace="com.itheima.mapper.UserMapper">

    <resultMap id="userResultMap" type="user">
        <!--resultMap有两个常用属性 id:设置主键字段的映射  result:设置一般字段的映射-->
        <!--column表的列名 property实体类的属性名-->
        <result column="user_name" property="username"></result>
    </resultMap>

    <!--根据用户名和密码登录-->
    <select id="select" resultMap="userResultMap">
        select * from login where user_name=#{username} and password=#{password};
    </select>


    <!--用户注册-->
    <insert id="add" >
        insert into login(user_name,password,tel) values(#{username},#{password},#{tel});
    </insert>

    <!--根据用户名判断账户是否存在-->
    <select id="selectByName" resultMap="userResultMap">
        select * from login where user_name=#{username};
    </select>
</mapper>

4. 도구 클래스 생성

코드 중복을 피하기 위해 하나의 세션 팩토리만 필요하므로 세션 팩토리를 얻기 위해 세션 팩토리 도구 클래스가 생성됩니다.

public class SqlSessionFactoryUtils {

    //静态代码块随着类的创建而创建,且只创建一次,由于会话工厂只需要一个,所以用静态代码块
    //登录与注册的代码逻辑相同,采用工具类获取会话工厂,避免冗余
    private static SqlSessionFactory sqlSessionFactory;
    //静态代码块不能抛异常,使用异常捕获
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

5. 로그인 및 등록의 비즈니스 로직을 처리하기 위한 서블릿 패키지 생성

로그인 작업:

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、接收用户名和密码
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //2、使用Mybatis操作数据库
        //1、加载mybatis核心配置文件获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();

        //2、开启SqlSession对象
        //SqlSession不能写在工具类,因为SqlSession代表用户与数据库的连接,如果放在工具类,则所有用户共用同一个连接
        //这样无法管理事务,使多个用户之间产生影响
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3、获取Mapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //4、执行接口方法(执行SQL语句)
        User user = userMapper.select(username,password);

        //5、释放资源
        sqlSession.close();

        //3、查看输出结果响应给用户
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        if (user != null){
            writer.write("<h1>登陆成功</h1>");
        }else {
            writer.write("<h1>登录失败</h1>");
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

등록 작업:

@WebServlet("/addServlet")
public class AddServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决post获取请求数据中文乱码问题
        req.setCharacterEncoding("UTF-8");

        //1、接收用户名、密码和手机号
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String tel = req.getParameter("tel");
        User user1 = new User(username,password,tel);

        //2、使用Mybatis操作数据库
        //1、加载mybatis核心配置文件获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();

        //2、开启SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3、获取Mapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //4、执行接口方法(执行SQL语句)
        //先检查账户是否被注册
        int i = 0;
        User user = userMapper.selectByName(username);
        if (user == null){
             i = userMapper.add(user1);
            sqlSession.commit();
        }

        //5、释放资源
        sqlSession.close();

        //3、查看输出结果响应给用户
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        if (i > 0){
            writer.write("<h1>注册成功</h1>");
        }else {
            writer.write("<h1>注册失败,账户已存在</h1>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

7. 프로젝트 디스플레이

 

프론트엔드 리소스가 필요하신 경우 비공개 메시지를 보내주세요.

추천

출처blog.csdn.net/m0_56044262/article/details/126331989