我的源码地址: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
- @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" )