技术标签: freemarker
1.创建本地maven项目 ,在pom.xml中配置freemarker的架包
<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>cn</groupId>
<artifactId>fmarker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- freemarker的架包 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>fmarker</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<!-- 模板的查找路径 从上下文根路径查找 模板 ftl-->
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<!-- 是否不需要缓存 -->
<init-param>
<param-name>NoCache</param-name>
<param-value>true</param-value>
</init-param>
<!-- 最终显示是html -->
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html;charset=UTF-8</param-value>
</init-param>
<!-- FreeMarker settings: -->
<init-param>
<param-name>template_update_delay</param-name>
<param-value>0</param-value> <!-- 0 is for development only! Use higher value otherwise. -->
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 数字的格式 -->
<init-param>
<param-name>number_format</param-name>
<param-value>0.##</param-value>
</init-param>
<!-- servlet 容器启动时实例化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
</web-app>
<#list 1..10 as i>
<#if (i_index+1)%2==0>
<font color=red>${i}</font><br/>
<#else>
<font color=green>${i}</font><br/>
</#if>
</#list>
5.创建新闻后端上传项目 ,在pom.xml中配置架包
<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>cn</groupId>
<artifactId>news</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 数据库的架包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!-- freemarker的架包 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
</dependencies>
<!-- 设置字符集 -->
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
url=jdbc:mysql://localhost:3306/news
drclass=com.mysql.jdbc.Driver
userName=root
password=123456
package model;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class Dbuit {
static Properties p = new Properties();
static{
InputStream is = Dbuit.class.getResourceAsStream("/jdbc.properties");
try {
p.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
/*获取链接
* @return
*
*/
public static Connection getConnection() throws Exception{
String url=p.getProperty("url");
String drclass=p.getProperty("drclass");
String userName=p.getProperty("userName");
String password=p.getProperty("password");
Class.forName(drclass);
//登录成功
Connection conn = DriverManager.getConnection(url,userName,password);
return conn;
}
//执行sql语句
public static int execute(String sql) throws Exception{
//连接数据库
Connection con=getConnection();
//预编译SQL语句
PreparedStatement pst=con.prepareStatement(sql);
//执行SQL语句
int i=pst.executeUpdate();
con.close();
pst.close();
return i;
}
//查询
public static List<Map> query(String sql) throws Exception{
//连接数据库
Connection con=getConnection();
//预编译SQL语句
PreparedStatement pst=con.prepareStatement(sql);
//执行SQL语句
ResultSet rs=pst.executeQuery();
//获取列名
ResultSetMetaData remd =rs.getMetaData();
List list=new ArrayList();
//获取列的个数
int columnCount =remd.getColumnCount();
while(rs.next()){
Map map= new HashMap();
for(int i=1;i<=columnCount;i++){
//获取列名
String colName=remd.getColumnName(i);
//获取列值
String colValue=rs.getString(i);
map.put(colName, colValue);
}
list.add(map);
}
con.close();
pst.close();
rs.close();
return list;
}
}
package model;
import java.util.List;
import java.util.Map;
public class Mynews {
//发布新闻
public void inserNews(String title,String content,String newspath,String createtime) throws Exception{
String sql="insert into mynews(title,content,htmlpath,createtime)values('"+title+"','"+content+"','"+newspath+"','"+createtime+"')";
Dbuit.execute(sql);
}
//查询新闻
public List<Map> queryNews() throws Exception{
String sql="select * from mynews";
return Dbuit.query(sql);
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body align="center">
<h1><font color=blue>新闻发布</font></h1>
<form action="News" method="post">
标题:<input type="text" name="title"/><br/>
内容:<textarea rows="20" cols="100" name="content"></textarea><br/>
<input type="submit">
</form>
</body>
</html>
package controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import model.Mynews;
/**
* Servlet implementation class News
*/
public class News extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public News() {
// TODO Auto-generated constructor stub
}
//调用插入,查询的方法
Mynews my= new Mynews();
//设计时间格式
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//生成静态HTML存储的位置
public static final String HTML_DIR="E:\\html";
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置字符集
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
//获取新闻的标题
String title=request.getParameter("title");
//获取新闻的内容
String content=request.getParameter("content");
//获取时间
Date date= new Date();
String dates=sdf.format(date);
//获取唯一的UUID
String uuid=UUID.randomUUID().toString();
try {
//生成HTML
Configuration config=new Configuration(Configuration.VERSION_2_3_23);
//模板文件的位置
config.setDirectoryForTemplateLoading(new File("src/main/resources"));
config.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_23));
//把值注入HTML
Map root = new HashMap();
root.put("title", title);
root.put("content", content);
root.put("createtime", dates);
加载模板文件 -- 实例化模板对象
Template temp =config.getTemplate("news.ftl");
//文件的保存路径
String sa=HTML_DIR+"/"+(uuid)+".html";
Writer out =new OutputStreamWriter(new FileOutputStream(sa));
//文件的输出
temp.process(root, out);
out.flush();
out.close();
//新闻上传到数据库
my.inserNews(title, content, (uuid) + ".html", dates);
response.getWriter().println("发布成功...");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<div style="text-align:center;"><h1><font color=red>${title}</font><br/></h1></div>
${createtime}<br/>
${content}
<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>cn</groupId>
<artifactId>new</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 配置数据库的架包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!-- 配置freemarker的架包 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<!-- 配置commons-io的架包 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<!-- 设置字符集 -->
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
url=jdbc:mysql://localhost:3306/news
drclass=com.mysql.jdbc.Driver
userName=root
password=123456
package model;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class Dbuit {
static Properties p = new Properties();
static{
InputStream is = Dbuit.class.getResourceAsStream("/jdbc.properties");
try {
p.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
/*获取链接
* @return
*
*/
public static Connection getConnection() throws Exception{
String url=p.getProperty("url");
String drclass=p.getProperty("drclass");
String userName=p.getProperty("userName");
String password=p.getProperty("password");
Class.forName(drclass);
//登录成功
Connection conn = DriverManager.getConnection(url,userName,password);
return conn;
}
//执行sql
public static int execute(String sql) throws Exception{
//连接数据库
Connection con=getConnection();
//预编译SQL语句
PreparedStatement pst=con.prepareStatement(sql);
//执行SQL语句
int i=pst.executeUpdate();
con.close();
pst.close();
return i;
}
//查询
public static List<Map> query(String sql) throws Exception{
//连接数据库
Connection con=getConnection();
//预编译SQL语句
PreparedStatement pst=con.prepareStatement(sql);
//执行SQL语句
ResultSet rs=pst.executeQuery();
//获取列名
ResultSetMetaData remd =rs.getMetaData();
List list=new ArrayList();
//获取列的个数
int columnCount =remd.getColumnCount();
while(rs.next()){
Map map= new HashMap();
for(int i=1;i<=columnCount;i++){
//获取列名
String colName=remd.getColumnName(i);
//获取列值
String colValue=rs.getString(i);
map.put(colName, colValue);
}
list.add(map);
}
con.close();
pst.close();
rs.close();
return list;
}
}
package model;
import java.util.List;
import java.util.Map;
public class Mynews {
//查询
public List<Map> queryNews() throws Exception{
String sql="select * from mynews";
return Dbuit.query(sql);
}
}
16.刷新新闻页面
package main;
import java.util.Timer;
public class Index {
public static void main(String[] args) {
Timer ti= new Timer();
//new执行任务,执行时间,执行第一次之后多少时间之后执行下一次
ti.schedule(new MyTimerTask(), 1000,5000);
}
}
<#list List as new>
<#-- 首页显示新闻的连接与标题-->
<a href="new?path=${new.htmlpath}">${new.title}</a><br/>
</#list>
package main;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimerTask;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import model.Mynews;
public class MyTimerTask extends TimerTask{
//调用查询的方法
Mynews my= new Mynews();
public void run(){
try {
// 生成html
Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
//模板文件的位置
cfg.setDirectoryForTemplateLoading(new File("src/main/resources"));
cfg.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_23));
//获取所有的新闻
List<Map> result=my.queryNews();
Map root = new HashMap();
root.put("List", result);
//加载模板文件 -- 实例化模板对象
Template temp = cfg.getTemplate("index.ftl");
//生成首页页面的位置
String saveFile = "src/main/webapp/index.html";
//写入内容
Writer out = new OutputStreamWriter(new FileOutputStream(saveFile));
temp.process(root, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package main;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
/**
* Servlet implementation class NewServler
*/
public class NewServler extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public NewServler() {
// TODO Auto-generated constructor stub
}
//新闻存储的位置
public static final String HTML_DIR = "E:\\html\\";
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取模板传过来的连接路径
String path=request.getParameter("path");
//完整的文件存储路径
String abs=HTML_DIR+path;
//读取存储的新闻内容
byte[] bt=FileUtils.readFileToByteArray(new File(abs));
//输出到首页连接
response.getOutputStream().write(bt);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
2020年8月25日,第五次渗透测试。通过对sql语句进行注入,数据库的库名,表名,字段进步爆破,最终获得key。准备需求:1.windows系统pc2.2.burpsuite(bp)抓包软件3.sqlmap sql 数据库的爆破工具1.进入靶场..._使用bp进行布尔盲注
点击蓝字关注我们12月18日,以“鲲鹏展翅,力算未来,共赢多样性计算时代”为主题的“鲲鹏计算产业峰会·上海”在沪成功举办。本次峰会由上海市经济和信息化委员会、上海市徐汇区人民政府担任指导单...
? 在使用airflow的过程中需要大量的dag脚本进行性能测试,如果一个个去编写dag脚本未免太过麻烦,于是想到用python的jinja2模板引擎实现批量脚本生成。先通过pip命令安装jinja2模块:$ pip install jinja2然后创建模板文件(模板可以是任何形式的文本格式,没有特定扩展名,甚至可以不要扩展名):dag_templatefrom datetime import t..._jinja2 生成 python
转载:http://blog.csdn.net/u014546553/article/details/74332153 编译环境:Qt Creator 5.4.0_mingw最近利用QT做一个上位机界面,想用OpenGL将STL文件还原成三维模型,并将模型显示出来,那么问题来了,最简单的显示就直接创建一个窗口显示模型,根本就 没有用到QT的ui界面。现在的问题是,想把OpenGL绘制_qt ui提升
8年多爬虫经验的人告诉你,国内ADSL是王道,多申请些线路,分布在多个不同的电信区局,能跨省跨市更好,自己写好断线重拨组件,自己写动态IP追踪服务,远程硬件重置(主要针对ADSL猫,防止其宕机),其余的任务分配,数据回收,都不是大问题。我是将采集的任务按 目标站点的IP进行分组 通过控制每个IP 在单位时间内发出任务的个数,来避免被封.当然,这个前题是你采集很多网站.如果只是采集一个网站,那么只能通过多外部IP的方式来实现了.3.你的程序,使用轮训替换代理服务器来访问想要采集的网站。
将C语言中常见知识进行了简单讲解,为初识C语言_c语言解读
Android 节操视频播放器jiecaovideoplayer使用特点:全屏时启动新Activity实现播放器真正的全屏功能能在ListView、ViewPager和ListView、ViewPager和Fragment等多重嵌套模式下全屏工作ListView的拖拽和ViewPager的滑动时如果划出屏幕会自动重置视频视频大小的屏幕适配,宽或长至少有两个对边是充满屏幕的,另外_android jiechaoplay
在上一篇文章中,我们将 BS智能合约泛化为包括可选的链下验证部分,以及由脚本组成的常规链上部分。我们将这一概念应用于抛硬币游戏,通过使用抵押金的方式反向激励两人不要单方面中止游戏。在本文中,我们使用参考文献[^1]中所述的方法,实现了另外一种公平抛硬币合约,并再次展示了如何设计带有链上和链下部分的混合智能合约。_bsv-dapp
在比赛的考场上,自己的电脑是已经安装好了环境的,但是在比赛之前,同学们自己备赛的时候,肯定会用到一些软件,现在,公子带大家安装软件环境。第一节安装jre1,双击jre。2,点击“更改目标文件夹”,随后点击“安装”。3,点击“更换“。4,在弹出的路径中选择自己的安装路径,并点击确认。公子的安装路径在D/jre。5,点击“下一步“。6,开始安装了。7,安装完成,点击“关闭“即可。第二节安装STM32CubeMX1,双击Set..._嵌入式蓝桥杯可以用电脑里的资料吗
参见https://blog.csdn.net/kaitiren/article/details/21961235https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/JSAPI_User_Guidehttps://blog.csdn.net/jnstone3/article/details/3953203..._spidermonkey
GBase 8c采用两阶段提交协议和全局时间戳来保证全局事务的强一致性,每个跨节点的事务,要么全部成功,要么全部失败,不会出现某些节点事务成功,另外一些节点事务失败的情况,实现全局事务的强一致性。GBase 8c的事务处理具有自动容错能力,某个正在处理事务的节点发生故障后,新的节点会继续进行未完成的事务处理,不需要应用程序重新请求。..._gbase 8c全局时间怎么维护
我们经常在电路中见到0欧的电阻,对于新手来说,往往会很迷惑:既然是0欧的电阻,那就是导线,为何要装上它呢?还有这样的电阻市场上有卖吗? 其实0欧的电阻还是蛮有用的。0欧的电阻不但有卖,而且还有不同的规格呢,一般是按功率来分,如1/8瓦,1/4瓦等等。 0欧的电阻大概有以下几个功能: ①做为跳线使用。这样既美观,安装也方便。