1 静态网站
1.1 环境准备
- 电脑已经安装好IDEA和JDK
- Spring官网下载包
- 下载后解压,导入idea
File->New->Project from Existing Sources->选择刚才解压的文件,等待下载完成。
1.2 开发
- 创建index.html页面
- 启动主程序main
- 访问:localhost:8080/index.html(未修改端口时)
2 动态网站
2.1 环境准备
- 电脑已经安装好IDEA和JDK
- Spring官网下载包
- 下载后解压,导入idea
File->New->Project from Existing Sources->选择刚才解压的文件,等待下载完成。 - 配置数据库和模板参数
application.properties文件中配置
#模板的后缀
spring.freemarker.suffix=.html
#模板路径
数据spring.freemarker.template-loader-path=classpath:/templates/
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver 一般配置
#数据库驱动(com.mysql.cj.jdbc.Driver是新版本的)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库url,e-book是数据库名
spring.datasource.url=jdbc:mysql://localhost:3306/e-book?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
#数据库用户名
spring.datasource.username=root
#数据库密码
spring.datasource.password=1234567890
2.2 开发
注意:可以使用模板,也可以不使用
- 区别:只有Controller的注解不同
- 使用模板:@Controller
- 不使用模板: @RestController(不需要写HTML页面,直接返回数据库查询到的数据)
使用模板
- 普通类(与数据库中的字段一致)
public class SpClass {
private int userID;
private String userName;
private String userPwd;
private String userRight;
public int getUserID() {
return userID;
}
public String getUserName() {
return userName;
}
public String getUserPwd() {
return userPwd;
}
public String getUserRight() {
return userRight;
}
public void setUserID(int userID) {
this.userID = userID;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public void setUserRight(String userRight) {
this.userRight = userRight;
}
}
- 接口(操作数据库)
@Mapper
public interface SpMapper {
//与数据库操作关键字一致:@Select @Insert @Delete @Update
@Select("select*from user where userID=#{userID}")
//@Param确保参数一致:#{a}和@Param("a")中的参数必须一致,后面的参数可以不一样
List<User> selectUser(@Param("userID")Integer userID);
}
- Controller
@Controller
public class SpController {
//Spring容器帮助建立Mapper对象,不能直接使用
@Resource
private SpMapper spMapper;
//浏览器访问路径
@RequestMapping("/user")
public String index(){
//返回的是模板的名称,不能加.html,在配置文件中已经配置了扩展名
return "test";
}
//user.json就是ajax请求的路径
@RequestMapping(value = "user.json", method = {
RequestMethod.GET})
//页面响应的数据
@ResponseBody
public String user(@RequestParam(value = "userID") Integer userID){
List<User> user = spMapper.selectUser(userID);
//转换为json字符串
String s = JSON.toJSONString(user);
System.out.println(user);
System.out.println(s);
return s;
}
}
- 模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../js/jquery.js"></script>
<style>
div{
width:300px;
height:300px;
margin-left:100px;
padding: 5px;
border:1px solid blue;
}
#info {
width:200px;
height:150px;
margin:5px auto;
border:1px solid greenyellow;
}
</style>
</head>
<body>
<div>
用户名:<input type="text" name="userID" id="name">
<input type="button" value="查询" id="sub">
<div id="info">
</div>
</div>
<script>
$(function () {
$("#sub").click(function () {
$.ajax({
url:"/user.json",
dataType:"json",
type:"get",
data:{
"userID":$("#name").val()},
success:function (data) {
var html="<ul><li>学号:"+data[0].userID+"</li><li>姓名:"+data[0].userName+"</li><li>权限:"+data[0].userRight+"</li></ul>";
$("#info").append(html);
}
});
});
})
</script>
</body>
</html>
3 请求 响应 会话
3.1 HttpServletRequest request
- request.getHeader():获取请求头部信息
- request.getParameter():获取请求的参数数据
3.2 HttpServletResponse response
- response.setHeader():设立响应头部信息
3.3 HttpSession session
session.getAttribute和session.setAttribute:获取和设置属性
4 过滤器
- @ServletComponentScan({“过滤器包名”})
写在主程序中,告诉过滤器的位置 - 过滤器
/*过滤器
* urlPatterns设置拦截规则
* 精确匹配:/index.html
* 目录匹配:/hello/*
* 扩展名匹配:*.html
*/
@WebFilter(filterName = "MyFilter",urlPatterns = {
"*.html"})
public class MyFilter implements Filter {
//快捷键ctrl+i快速生成接口方法
//初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("start");
}
//拦截
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("requesting");
//允许通过 chain相当于一把钥匙
chain.doFilter(request,response);
//给页面数据
//强制类型转换
HttpServletResponse response = (HttpServletResponse)response;
HttpServletRequest request = (HttpServletRequest)request;
//会话
HttpSession session = request.getSession();
//访问地址
String url = request.getRequestURI();
//请求登录页面,则通过
if(url.startsWith("/login")){
chain.doFilter(request,response);
}else {
//权限验证
//用户已经登录,则通过
if(session.getAttribute("user")!=null){
chain.doFilter(request,response);
}else {
//用户未登录,则不通过,并提示未登录,两种方式
//1.PrintWriter是输出流对象,不太使用
PrintWriter writer=response1.getWriter();
writer.append("no login");
writer.flush();
writer.close();
//2.直接返回字符·串
return "no login";
}
}
}
//销毁
@Override
public void destroy() {
System.out.println("end");
}
}