JavaEE的用户例子

工具IDEA

创建maven项目的webapp文件

SQL数据文件

采用User表自己建。

具体操作:

###结构如下:
在这里插入图片描述

补充pom.xml文件:

   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>
    <!-- 作用域使用provided -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <!-- 作用域使用provided -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

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

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>

    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

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

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.2.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.4</version>
    </dependency>
Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no

完善java文件:

UserControlle

package com.lky.controller;

import com.lky.entity.User;
import com.lky.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;
import java.util.Map;
@Controller
@RequestMapping("login")
public class UserController {
    @Autowired
    UserService userService;
    @RequestMapping("/dologin")
    public String login(String username, String password, Map<String, Object> map, HttpSession session) {
        if (username == null || "".equals(username)) {
            map.put("error","用户名为空");
            return "index";
        }
        if (password == null || "".equals(password)) {
            map.put("error","密码为空");
            return "index";
        }
        User user = userService.getUser(username, password);
        if (user == null){
            map.put("error", "用户名或密码错误");
            return "index";
        }
        session.setAttribute("username", username);
        return "redirect:../loginsuccess.jsp";
    }
    @RequestMapping("/register")
    public String register() {
        return "register";
    }
    @RequestMapping("/doRegister")
    public String doRegister(String username, String password, Map<String, Object> map, HttpSession session) {
        if (username == null || "".equals(username)) {
            map.put("error","用户名为空");
            return "register";
        }
        if (password == null || "".equals(password)) {
            map.put("error","密码为空");
            return "register";
        }
        userService.insertUser(username, password);
        return "redirect:../index.jsp";
    }
}

User

package com.lky.entity;

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

UserMapper

package com.lky.mapper;

import com.lky.entity.User;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    // 查询指定用户名和密码的User
    User getUser(@Param("username") String username, @Param("password") String password);
    // 保存指定用户名和密码的user
    void saveUser(@Param("username") String username, @Param("password") String password);
}

UserService

package com.lky.service;
import com.lky.entity.User;
public interface UserService {
    User getUser(String username, String password);
    void insertUser(String username, String password);
}

UserServicelmpl

package com.lky.service.lmpl;

import com.lky.entity.User;
import com.lky.mapper.UserMapper;
import com.lky.service.UserService;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserServicelmpl implements UserService {
    @Autowired
    SqlSession sqlSession;
    @Override
    @Transactional(readOnly = true)
    public User getUser(String username, String password) {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUser(username, password);
        System.out.println(user);
        return user;
    }
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void insertUser(String username, String password) {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.saveUser(username, password);
    }
}
链接
长方形
圆角长方形
菱形

配置xml文件:

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lky.mapper.UserMapper">

    <select id="getUser" resultType="com.lky.entity.User">
       select * from user where username=#{username} and password=#{password}
   </select>

    <insert id="saveUser">
       INSERT INTO user (username,password) VALUES (#{username}, #{password})
   </insert>
</mapper>

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
      https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- Spring容器作为父级容器要排除Controller标注的类,控制层的类交给SpringMVC的容器管理 -->
    <context:component-scan base-package="com.lky">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
        <property name="user" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!-- 配置事务通知 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 扫描Spring容器中标注@Transaction注解的方法或类并加上事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- mybatis 和 spring进行整合的配置,有了以下的配置mybatis-config.xml就不需要了-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:com/lky/mapper/UserMapper.xml"/>
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

</beans>

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.lky" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>DispatcjerServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcjerServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

构造jsp文件

index.jsp

<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
<div class="login">
    <div class="title">XXX管理系统登录页面</div>
    <div class="box">
        <div class="innerBox">
            <form action="/login/dologin" method="post">
                <table>
                    <thead><tr><th colspan="2" >用户登录</th></tr></thead>
                    <tr><td align="right">用户:</td><td>
                        <input type="text" name="username"></td></tr>
                    <tr><td align="right">密码:</td><td>
                        <input type="password" name="password"></td></tr>
                    <tr>
                        <td colspan="2" align="center">
                            <input type="submit" value="登录">
                            <input type="button" value="注册" onclick="register();">
                        </td>
                    </tr>
                </table>
            </form>
            <div class="error" style="padding-left: 25px;color: red">${error}</div>
        </div>
    </div>
</div>
<script type="text/javascript">
    function register() {
        window.location.href="/login/register";
    }
</script>
</body>
</html>

loginsuccess.jsp

<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
欢迎${username}回来
</body>
</html>

register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="false" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<div class="login">
    <div class="title">XXX管理系统注册页面</div>
    <div class="box">
        <div class="innerBox">
            <form action="/login/doRegister" method="post">
                <table>
                    <thead><tr><th colspan="2" >用户注册</th></tr></thead>
                    <tr><td align="right">用户:</td><td><input type="text" name="username"></td></tr>
                    <tr><td align="right">密码:</td><td><input type="password" name="password"></td></tr>
                    <tr>
                        <td colspan="2" align="center">
                            <input type="submit" value="注册">
                        </td>
                    </tr>
                </table>
            </form>
            <div class="error" style="padding-left: 25px;color: red">${error}</div>
        </div>
    </div>
</div>
</body>
</html>
Mon 06 Mon 13 已完成 进行中 计划中 现有任务 Adding GANTT diagram functionality to mermaid
张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五
### 使用JavaEE实现用户注册功能 #### 项目结构设计 为了构建一个完整的用户注册系统,通常会涉及到前端页面的设计以及后端逻辑处理。在JavaEE环境中,可以利用Servlet来接收请求,并通过JSP展示界面。 #### 前端表单创建 首先,在`webapp/WEB-INF/jsp/register.jsp`中定义HTML表单用于收集用户的输入数据: ```html <form action="register" method="post"> Username:<input type="text" name="username"/><br/> Password:<input type="password" name="password"/><br/> Email:<input type="email" name="email"/><br/> <input type="submit" value="Register"/> </form> ``` 此部分展示了基本的用户信息提交表格[^1]。 #### 后端处理器编写 接着,在服务器端需要有一个对应的Servlet用来处理来自客户端的数据。这里假设已经配置好了Web应用程序并且能够正常运行Tomcat或其他兼容容器。下面是一个简单的例子说明如何捕获并保存新用户的信息至数据库: ```java @WebServlet("/register") public class RegisterServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); // 数据验证省略... try (Connection conn = DriverManager.getConnection(url, user, pass); PreparedStatement stmt = conn.prepareStatement( "INSERT INTO users(username,password,email) VALUES(?,?,?)")) { stmt.setString(1, username); stmt.setString(2, BCrypt.hashpw(password, BCrypt.gensalt())); // 加密存储密码 stmt.setString(3, email); int affectedRows = stmt.executeUpdate(); if (affectedRows > 0){ RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/success.jsp"); dispatcher.forward(request,response); }else{ throw new SQLException("Insert failed."); } } catch (SQLException e) { // 错误处理... System.out.println(e.getMessage()); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/error.jsp"); dispatcher.forward(request,response); } } } ``` 上述代码片段实现了接收到POST请求后的业务流程控制,包括获取参数、执行SQL语句向数据库插入记录等操作[^2]。 #### 安全性和最佳实践考虑 当涉及敏感信息如密码时,应该始终采用安全措施防止潜在风险。例如上面的例子采用了BCrypt算法对明文密码进行了加密后再存入数据库。此外还需要注意防范SQL注入攻击等问题[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值