前言
-
时间:2021.7.21
-
内容:
- my-restful;mybatis
- 上午讲了监听,拦截器,echarts;下午讲了mybatis
- echarts:https://echarts.apache.org/zh/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts
-
备注:
今天没啥心情记笔记,代码都是刚好跟上的状态,感觉会的都会,不会的全懵,等缓回来就下一个了,没有好好感受最初学会时候的欣喜就开始下个(或者叫麻木?都是半吊子状态,等这周过完或者下回空了心情不错时候再一起总结吧~先去遛视频咯。
内容
1 doXx.jsp和xxServlet.java的共同点和区别
都是一家人,servlet是重启服务器,do是直接刷新页面。
2 echarts成品
今日代码(my-restful)
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.pro" />
<!--使用注解-->
<mvc:annotation-driven/>
<!--静态资源,使用tomcat的默认servlet来处理-->
<mvc:default-servlet-handler/>
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/resources/**"/>
<bean class="com.pro.util.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 据说帮我们解决删除和修改不能及时提交数据的问题 -->
<filter>
<filter-name>formContentFilter</filter-name>
<filter-class>org.springframework.web.filter.FormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>formContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 监听器 -->
<listener>
<listener-class>com.pro.util.MyListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mvc</groupId>
<artifactId>mvc-restful</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.9</version>
</dependency>
<!-- jsp相关 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="resources/js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function () {
//给按钮增加一个点击事件,·我想调用一下控制器的方法
$("#bt").click(function () {
$.ajax({
url:'req/3',
type:'get',
dataType:'text',
success:function (data) {
$('#d').text("--返回的数据:"+data)
}
});
});
$("#add").click(function () {
$.ajax({
url:'req',
type:'post',
data:{"userName":"zs","password":"eee","userId":"1"},
dataType:'text',
success:function (data) {
$('#d').text("--返回的数据:"+data)
}
});
});
$("#delete").click(function () {
$.ajax({
url:'req',
type:'delete',
dataType:'text',
data: 'userName=zsff',
success:function (data) {
$('#d').text("--返回的数据:"+data)
}
});
});
$("#update").click(function () {
$.ajax({
url:'req',
type:'put',
data:{"userName":"zs","password":"eee","userId":"1"},
dataType:'text',
success:function (data) {
$('#d').text("--返回的数据:"+data)
}
});
});
$("#find").click(function () {
$.ajax({
url:'req',
type:'get',
dataType:'text',
data:"userId=3",
success:function (data) {
$('#d').text("--返回的数据:"+data)
}
});
});
})
</script>
</head>
<body>
<input type="button" id="bt" value="确定" />
<hr>
<input type="button" id="add" value="增加">
<input type="button" id="delete" value="删除">
<input type="button" id="update" value="修改">
<input type="button" id="find" value="查找">
<div id="d"></div>
</body>
</html>
xx.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>xx页</title>
<script src="resources/js/jquery-3.6.0.min.js"></script>
<script src="resources/js/echarts.min.js"></script>
</head>
<body>
hello
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
$(function () {
})
function f(){
$.ajax({
url:'getData',
type: 'get',
dataType:'json',
success:function (data) {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
option = {
xAxis: {
type: 'category',
data: data.dateList
},
yAxis: {
type: 'value'
},
series: [{
data: data.countList,
type: 'line',
smooth: true
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
})
}
setInterval("f()",1000);
</script>
<select>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</body>
</html>
RestController.java
package com.pro.controller;
import com.pro.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* @author Yuhua
* @since 21.7.20 14:14
*/
@Controller
public class RestController {
//数据是以路径的形式传递,而不是以过去那种xxx?userId=2
/*@RequestMapping("/req/{userId}")
@ResponseBody
public String req(@PathVariable(value = "userId")int userId){
System.out.println("---req---"+userId);
return "req-->"+userId;
}*/
//请求方式:get查,post增,put改,delete删
//@RequestMapping(value = "req",method = RequestMethod.POST)
@PostMapping("/req")
@ResponseBody
public String reqPost(User user){
System.out.println(user);
return "reqPost";
}
// @DeleteMapping("/req/{userName}")
// @ResponseBody
// public String reqDelete(@PathVariable(value = "userName") String userName){
// System.out.println("---"+userName);
// return "reqDelete";
// }
@DeleteMapping("/req")
@ResponseBody
public String reqDelete(String userName){
System.out.println("---"+userName);
return "reqDelete";
}
@PutMapping("/req")
@ResponseBody
public String reqPut(User user){
System.out.println(user);
return "reqPut";
}
@GetMapping("/req")
@ResponseBody
public String reqGet(Integer userId){
System.out.println("--"+userId);
return "reqGet";
}
}
XxController.java
package com.pro.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Yuhua
* @since 21.7.21 10:38
*/
@Controller
public class XxController {
@RequestMapping("/getData")
@ResponseBody
public Object getData(HttpServletRequest request){
//拿到application
//如果这里出现问题,就在request.getServletContext中间加session
ServletContext application = request.getServletContext();
List<String> dateList = (List<String>) application.getAttribute("dateList");
List<Integer> countList = (List<Integer>) application.getAttribute("countList");
//将时间和次数放入到map中,再转换为json发送给客户端
Map<String, Object> maps = new HashMap<String, Object>();
maps.put("dateList",dateList);
maps.put("countList",countList);
return maps;
}
}
User.java
package com.pro.domain;
/**
* @author Yuhua
* @since 21.7.20 16:02
*/
public class User {
private Integer userId;
private String userName;
private String password;
public User() {
}
public User(int userId, String userName, String password) {
this.userId = userId;
this.userName = userName;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
'}';
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
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;
}
}
MyInterceptor.java
package com.pro.util;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Yuhua
* @since 21.7.21 9:13
*/
public class MyInterceptor implements HandlerInterceptor {
//执行controller之前
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("---preHandle");
return true;
}
//controller执行完毕
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("---postHandle");
}
//收尾阶段
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("---afterCompletion");
}
}
MyListener.java
package com.pro.util;
import javafx.application.Application;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author Yuhua
* @since 21.7.21 9:49
*/
public class MyListener implements ServletContextListener, ServletRequestListener {
//应用的监听,初始化
public void contextInitialized(ServletContextEvent servletContextEvent) {
//存时间
List<String> dateList = new ArrayList<String>();
//存访问次数
List<Integer> countList = new ArrayList<Integer>();
//拿到最大的作用域application,只要把东西放到app..中,那整个项目任何地方都可以取到
ServletContext application = servletContextEvent.getServletContext();
application.setAttribute("dateList", dateList);
application.setAttribute("countList",countList);
}
//应用的监听,销毁
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
//请求的监听,销毁
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
}
//请求的监听,初始化
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
//从request的请求中,获取到url的字符串,看看是不是自身的getData。如果是,则这次请求不算数(不会进入统计次数)
ServletRequest servletRequest = servletRequestEvent.getServletRequest();
HttpServletRequest request = (HttpServletRequest) servletRequest;
String url = request.getRequestURL().toString();
if(url.endsWith("/getData")){
return;
}
//只要一访问,我们就先获取容器,再往里存放时间及次数
ServletContext application = servletRequestEvent.getServletContext();
List<String> dateList = (List<String>) application.getAttribute("dateList");
List<Integer> countList = (List<Integer>) application.getAttribute("countList");
//取到当前访问的时间HH:mm
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
//得到当前时间的小时和分钟
String dt = sdf.format(new Date());
//将上面获取的当前时间,拿到去集合中查找,如果找不到,返回-1
int index = dateList.indexOf(dt);
if(index==-1){
dateList.add(dt); //10:09
countList.add(1); //1
application.setAttribute("datelist",dateList);
application.setAttribute("countList",countList);
} else {
//如果是第n次,则在找到的时间点上,把对应的访问次数+1
countList.set(index,countList.get(index)+1);
}
}
}
今日代码(mybatis)
(1+3)配置文件+1类
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<!--使用阿里服务器-->
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
jdbc.properties
# mysql访问数据库的驱动,地址,用户及密码
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ky9
jdbc.username=root
jdbc.password=1234
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--映射文件,里面都是sql语句-->
<mappers>
<mapper resource="user.xml"/>
</mappers>
</configuration>
user.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="mybatisSpace">
<insert id="addUser" parameterType="com.pro.domain.User">
insert into user(username,userpsd) values(#{username},#{userpsd})
</insert>
</mapper>
User.java
package com.pro.domain;
/**
* @author Yuhua
* @since 21.7.21 16:12
*/
public class User {
private int userid;
private String username;
private String userpsd;
public User() {
}
public User(int userid, String username, String userpsd) {
this.userid = userid;
this.username = username;
this.userpsd = userpsd;
}
public User(String username, String userpsd) {
this.username = username;
this.userpsd = userpsd;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpsd() {
return userpsd;
}
public void setUserpsd(String userpsd) {
this.userpsd = userpsd;
}
}