struts2-剩余2
周一-周四 晚上:7:30 – 9:30
多线程、Linux、云服务器、git
spring
springboot、springcloud
今晚:7:30 测试直播网速
一、回顾
拦截器:在目标action方法执行的前后插入一段额外的逻辑代码;aop面向切面编程的一种实现
实现Interceptor接口,intercept()核心方法,每次调用目标方法时都会被执行
struts.xml配置:
package:<interceptors>
action:<interceptor-ref name/>
package默认继承struts-defalut
i18n
二、log4j
以前我们的代码有bug,使用system.out.println()语句来输出打印
有时我们需要对我们自己的代码运行结果进行记录,可以使用log4j
log4j是Apache的一个开源项目,可以控制日志信息输出的位置(控制台,文件,数据库)
日志七个级别
由低到高分别是:OFF ,DEBUG,INFO,WARN,ERROR,FETAL,ALL
官方建议使用红色
使用,
添加log4j的jar包,然后再src目录配置log4j.properties
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
# 设置 日志级别和appender
log4j.rootLogger = info,stdout,logFile # 输出信息到控制抬
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n # 输出dubug级别以上的日志到文件
log4j.appender.logFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.logFile.File = E://logs/log.log
log4j.appender.logFile.Append = true
log4j.appender.logFile.Threshold = DEBUG
log4j.appender.logFile.layout = org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
public class Demo1Action extends ActionSupport {
private String name;
//日志记录器
private Logger log = Logger.getLogger(Demo1Action.class);
@Override
public String execute() throws Exception {
log.debug("dubug......");
log.info("info......");
log.warn("warn......");
log.error("error......");
return SUCCESS;
}
}
三、ajax访问action
(1)demo2.jsp

(2)Demo2Action
@Getter
@Setter
public class Demo2Action extends ActionSupport { private String uname;
private String pname;
//此方法通过前端ajax调用,所以不需要返回值,返回的数据通过response响应
public void m1() throws IOException{
System.out.println("姓名:"+uname+",密码:"+pname);
//获取response响应对象
HttpServletResponse response = ServletActionContext.getResponse();
//设置类型和编码
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
if("admin".equals(uname) && "123456".equals(pname)){
response.getWriter().write("1"); //成功
}else{
response.getWriter().write("0"); //失败
}
}
}
(3)struts.xml
<action name="demo2Action" class="com.yujun.maven.action.Demo2Action">
</action>
四、highcharts图表-折线图
(1)City
@Setter
@Getter
public class City {
private String name; //城市名
private double[] data; //12月份的温度数组
}
(2)Demo3Action
public class Demo3Action extends ActionSupport {
public void m1() throws Exception {
//模拟数据库,创建数据
City cq = new City();
cq.setName("重庆");
cq.setData(new double[]{7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2,26.5, 23.3, 18.3, 13.9, 9.6});
City lz = new City();
lz.setName("兰州");
lz.setData(new double[]{-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8,24.1, 20.1, 14.1, 8.6, 2.5});
//集合
List<City> list = new ArrayList<City>();
list.add(cq);
list.add(lz);
//把集合转为json数据
ObjectMapper map = new ObjectMapper();
String json = map.writeValueAsString(list);
//把json响应到前端
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().write(json);
}
}
(3)struts.xml
<action name="demo3Action" class="com.yujun.maven.action.Demo3Action">
</action>
(4)demo3.jsp
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="js/highcharts.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var title = {
text: '城市平均气温'
};
var subtitle = {
text: 'Source: runoob.com'
};
var xAxis = {
categories: ['一', '二', '三', '四', '五', '六',
'七', '八', '九', '十', '十一', '十二']
};
var yAxis = {
title: {
text: 'Temperature (\xB0C)'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
}; var tooltip = {
valueSuffix: '\xB0C'
} var legend = {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
}; var series; //ajax请求后台action获取json数据
$.ajax({
async:false,
dataType:'json',
type:'get',
url:'demo3Action!m1.action',
success:function(data){
series = data;
}
}) var json = {}; json.title = title;
json.subtitle = subtitle;
json.xAxis = xAxis;
json.yAxis = yAxis;
json.tooltip = tooltip;
json.legend = legend;
json.series = series; $('#container').highcharts(json);
});
</script>
</head>
<body>
<div id="container" style="width: 550px; height: 400px; margin: 0 auto"></div>
</body>
</html>
Jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
更多图表案例,请自行参照菜鸟教程
三件事:
(1)19:30直播平台测试
(2)单表使用struts2框架增删改查(可以没有分页和查询条件)
(3)预习hibernate第一章
struts2-剩余2的更多相关文章
- Struts2拦截器之FileUploadInterceptor
一.它能做什么? 借助于这个拦截器我们可以实现文件的上传和下载功能. 理论部分: struts2的文件上传下载功能也要依赖于Apache commons-fileupload和Apache commo ...
- Struts2(十四)拦截器实现权限管理
一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...
- 转载:struts2和spring的结合原理(精品)
转载网址:http://blog.sina.com.cn/s/blog_683278bc0101236z.html Ioc将所有的对象之间的关系转移到了xml配置文件中来. 在TopLogic中声明存 ...
- 浅谈Struts2(四)
一.Struts2的拦截器(Intercept) 作用:把多个Action中的共有代码,提取至拦截器,从而减少Action中的冗余代码. 1.Action拦截器 a.编写interceptor类 pu ...
- struts2之拦截器
1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...
- 第四章 Struts2深入
4.1 Struts2架构 1.ActionMapper: 提供请求和Action之间的映射.根据请求查找是否存在对于的action,如有,翻译描述action映射的ActionM ...
- 自定义简单的struts2的s标签
一:自定标签前需要了解的知识: BodyTagSupport类的方法: 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent ...
- Struts2+Hibernate实现图书管理系统
效果图 部分代码 Books.java package entity; import java.util.Date; public class Books { //书籍编号 private Strin ...
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- struts2 基础5 OGNL、标签、四大域、默认拦截器说明
OGNL表达式 OGNL:对象导抗图语言 OGNL表达式是一个上下文的概念,上下文Map结构 OGNL表达式需要使用#标注命名空间.访问上下文(Context)中的对象需要使用#符号标注命名空间,如# ...
随机推荐
- python之单例模式、栈、队列和有序字典
一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...
- 拆系数FFT
学习内容:国家集训队2016论文 - 再谈快速傅里叶变换 模板题:http://uoj.ac/problem/34 1.基本介绍 对长度为L的\(A(x),B(x)\)进行DFT,可以利用 \[ \b ...
- postgreSQL可视化工具pgAdmin3 导入表结构和数据
材料:.backup文件.postgreSQL(pgAdmin3) 1.新建一个数据库2.选中数据库右键还原,弹出框中选择本地计算机备份文件路径---->点击还原(选择一个修改时间最早和最晚的还 ...
- element-UI的Dialog弹出框蒙版被遮住
类似于这种,相信会有很多人遇到这种问题的,其实解决的方法很简单 <el-dialog title="修改分类" :visible.sync="modifyFormV ...
- spring的DI.IoC是什么
最近要搞spring的单元测试,不得已啊啊啊啊啊啊啊啊啊又要开始搞spring…… 日目晶…… 搞这几个概念,先甩一部分代码: UserDao 接口 package com.itheima.ioc; ...
- 2017-12-19python全栈9期第四天第二节之列表的增删查改之元祖是只读列表、可循环查询、可切片、儿子不能改、孙子可以改
#!/user/bin/python# -*- coding:utf-8 -*-tu = ('zs','ls','ww',[1,2,3,4,5,'zxcvb'],'zl')print(tu[3])pr ...
- [图解Java]Condition
图解Condition 0. demo 我先给出一个demo, 这样大家就可以根据我给的这段代码, 边调试边看源码了. 还是那句话: 注意"My" , 我把ReentrantLoc ...
- ArcGis——好好的属性表,咋就乱码了呢?
我就瞎说一下,反正你也不懂. ——见到许多ArcGis属性表乱码的问题,也见过各种哭笑不得的解说 目录 第一节 字符编码那些事儿→字符编码简述 第二节 都是编码惹的祸→ArcGis属性表出错原因 第三 ...
- [转载]再谈PostgreSQL的膨胀和vacuum机制及最佳实践
本文转载自 www.postgres.cn 下的文章: 再谈PostgreSQL的膨胀和vacuum机制及最佳实践http://www.postgres.cn/news/viewone/1/390 还 ...
- mesbox公告加更新控制
0为不显示,1为显示~~~~0|友情提示:任何时候,不要相信福利软件,福利网站,不乱接收别人发的的任何文件,如需使用军旗有关产品,请至官方群或官方网站下载!!|183|173~~~~162,1651, ...