用SpringBoot+Mybatis+JSP实现简单的登录注册并上传图片遇到的问题

我的源码地址:https://gitee.com/Ace_blog/jsptest

问题1:导包

用jsp要导的依赖
<!-- 添加 servlet 依赖. -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
    	
		<!-- 添加 JSTL(JSP Standard Tag Library,JSP标准标签库) -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>
		
		<!--添加 tomcat 的支持.-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <version>1.5.8.RELEASE</version>
          <scope>compile</scope>
      </dependency>
		
		<!-- Jasper是tomcat中使用的JSP引擎,运用tomcat-embed-jasper可以将项目与tomcat分开 -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<!--<scope>provided</scope>-->
		</dependency>

用Mybatis要导的依赖

<!-- 添加MySQL依赖 -->
	  <dependency>
		  <groupId>mysql</groupId>
		  <artifactId>mysql-connector-java</artifactId>
	  </dependency>

	  <!-- 添加MyBatis依赖 -->
	  <dependency>
		  <groupId>org.mybatis.spring.boot</groupId>
		  <artifactId>mybatis-spring-boot-starter</artifactId>
		  <version>1.3.1</version>
	  </dependency>

问题2:配置文件

application.properties
#用这个是因为在Controller类里返回,直接返回的是/WEB-INF/jsp/路径里的jsp页面
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
# url��
spring.datasource.url=jdbc:mysql://localhost:3306/springbootmybatis?characterEncoding=UTF-8
# username
spring.datasource.username=root
# password?
spring.datasource.password=root
# driver
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

问题3:jsp

空jsp模板
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
    <title>Insert title here</title>
</head>
<body>

</form>
</body>
</html>
外部index.jsp
<!--直接重定向到login.jsp,因为外部不能直接访问login.jsp,因为它在WEB-INF/jsp里-->
<jsp:forward page="WEB-INF/jsp/login.jsp"/>

在WEB-INF/jsp路径下的jsp

登录jsp模板

1.跳转时用的是 action="${pageContext.request.contextPath}/login.action",不单单只有/login.action

<center>
    <%--提示信息--%>
    <span id="message">${msg}</span>
        <span id="message">${username}</span>
        <span id="message">${password}</span>


    <form action="${pageContext.request.contextPath}/login.action" method="post" >
        账号:<input id="username" type="text" name="username"/>
    <br/>
        密码:<input id="password" type="password" name="password"/>
        <br/>

        <input type="submit" value="登录"/>

    </form>

    <form action="${pageContext.request.contextPath}/register" >
            <input type="submit" value="注册">
    </form>

</center>
注册jsp模板

1.上传文件用这个

input placeholder=“请选择头像” type=“file” name=“image”

<center>
    <%--提示信息--%>
    <span id="message">${msg}</span>
    <span id="message">${username}</span>
    <span id="message">${password}</span>


    <form action="${pageContext.request.contextPath}/register.action" method="post" enctype="multipart/form-data">
        账号:<input id="username" type="text" name="username"/>
        <br/>
        密码:<input id="password" type="password" name="password"/>
        <br/>
        名言:<input id="note" type="text" name="note">
        <br/>
        <input placeholder="请选择头像" type="file" name="image"/>
        <br/>
        <input type="submit" value="确认"/>


    </form>
</center>

问题4:pojo

1.你若要上传照片就
必须要有一个MultipartFile类的属性 image
在有一个保存地址的属性 imageLu

public class User {
    private String username;
    private String password;
    private MultipartFile image;
    private String imageLu;
    private String note;
}

问题5:dao

  1. @Results指定这个是让返回的User类返回的时候把返回的值对应起来,不写这个的话返回的值不知道对应谁

2.传入多个参数一定要指定对应的属性,不然Mybatis识别不了

public interface UserDao {
    @Insert("insert into tb_user(username,password,note,image_lu) values(#{username},#{password},#{note},#{imageLu})")
    public int insertUser(User user);



    @Select("select * from tb_user where username=#{username} and password=#{password}")
    //指定这个是让返回的User类返回的时候把返回的值对应起来,不写这个的话返回的值不知道对应谁
    @Results(id="hehe",value={
            @Result(id=true,column = "username",property = "username"),
            @Result(column = "password",property = "password"),
            @Result(column = "image_lu",property ="imageLu" )
    })
    //多个参数一定要指定对应的属性,不然Mybatis识别不了
    public User findByUsernameAndPassword(@Param("username") String username,@Param("password") String password);

}

问题6:Controller

注册的Controller类

@ModelAttribute这个注解可以将注册时输入的值封装成user对象,很方便

model可以用model.addAttribute 添加属性,然后在跳转的jsp页面里用,也很好用
到jsp页面可以用这种格式来回应model

 图片		<img src="/upload/${user.imageLu}"  height="100">
提示信息    <span id="message">${user.username}</span>

@Controller
public class RegisterController {


    @Autowired
    private RegisterService registerService;

    @RequestMapping(value = "register")
    public String zhuanRegister(){
        return "register";
}


    @RequestMapping(value = "register.action", method = RequestMethod.POST)
    public String login(HttpServletRequest request,
                        @ModelAttribute User user,//@ModelAttribute这个注解可以将注册时输入的值封装成user对象,很方便
                        Model model             //model可以用model.addAttribute 添加属性,然后在跳转的jsp页面里用,也很好用
                                     ) throws IOException {
        if(user.getUsername()!=""&&user.getPassword()!=""&&!user.getImage().isEmpty()){

            
            
            //中间这一串是处理注册时上传的图片image保存到 “当前绝对路径+/upload”
            // 上传文件路径
            String path = request.getServletContext().getRealPath(
                    "/upload/");
            System.out.println("path = " + path);
            // 上传文件名
            String filename = user.getImage().getOriginalFilename();
            File filepath = new File(path,filename);
            // 判断路径是否存在,如果不存在就创建一个
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }
            // 将上传文件保存到一个目标文件当中
            user.getImage().transferTo(new File(path+File.separator+ filename));
            
            
            
            
            // 将用户添加到model
            model.addAttribute("user", user);
            //将图片的地址(上传的文件名)赋值给ImageLu
            user.setImageLu(filename);
            registerService.register(user);


            return "login";
        }
        model.addAttribute("username",user.getUsername());
        model.addAttribute("password",user.getPassword());
        model.addAttribute("msg","不能为空");
        return "register" ;
    }
}

登录页面就是一个简单的看数据哭里有没有这条数据,没什么好录的,比注册页面简单

问题7:App类

用Mybatis一定要扫描dao的包

@MapperScan("org.lzh" )
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值