创建本地mavenweb项目
1.在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>spring_war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 加载spring的架包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<!-- 加载web的架包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<!-- 加载jdbc的架包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<!-- 加载数据库的架包 -->
<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>
2.创建spring.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!-- 扫描所有的包 -->
<context:component-scan base-package="web"></context:component-scan>
<context:property-placeholder location="classpath:jdbc.properties"/>
</beans>
3.创建jdbc.properties文件和freemarker模板
url=jdbc:mysql://localhost:3306/news
driverClassName=com.mysql.jdbc.Driver
userName1=root
password=123456
<div style="text-align:center;"><h1><font color=red>${title}</font><br/></h1></div>
${createtime}<br/>
${content}
4.在web.xml中配置监听器
<?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>spring_war</display-name>
<!-- 该监听器 是ServletContext(jsp aoolication)的生命周期监听器
Tomcat启动时 contextInitialzed 用于创建spring的容器 WebApplicationContext
Tomcat关闭时 ContextDestroyed 调用容器的close 方法关闭
-->
<context-param>
<!-- 容器所在的位置 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
<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>
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html;charset=UTF-8</param-value>
</init-param>
<init-param>
<param-name>template_update_delay</param-name>
<param-value>0</param-value>
</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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>NewController</display-name>
<servlet-name>NewController</servlet-name>
<servlet-class>web.controller.NewController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NewController</servlet-name>
<url-pattern>/nc</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>News</display-name>
<servlet-name>News</servlet-name>
<servlet-class>web.controller.News</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>News</servlet-name>
<url-pattern>/News</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>NewsAddService</display-name>
<servlet-name>NewsAddService</servlet-name>
<servlet-class>web.controller.NewsAddService</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NewsAddService</servlet-name>
<url-pattern>/na</url-pattern>
</servlet-mapping>
</web-app>
5.实体化bean
package web.config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
public class MyConf {
@Value("${url}")
private String url;
@Value("${driverClassName}")
private String driverClassName;
@Value("${userName1}")
private String username;
@Value("${password}")
private String password;
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource data= new DriverManagerDataSource();
data.setUrl(url);
data.setDriverClassName(driverClassName);
data.setUsername(username);
data.setPassword(password);
return data;
}
}
6.持久化层
package web.dao;
import java.util.List;
import java.util.Map;
public interface NewDao {
/*
* @return 返回新闻列表
*/
public List<Map<String, Object>> queryAll();
/*
* @author
* 根据内容 模糊查询
* @param content 新闻内容
* @return
*/
public List<Map<String, Object>> queryNewsByContent(String content);
public void inserNews(String title,String content,String newspath,String createtime);
}
package web.dao.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import web.dao.NewDao;
@Repository
public class NewDaoImpl implements NewDao{
@Autowired
public JdbcTemplate jdbc;
//查所有
public List<Map<String, Object>> queryAll(){
String sql="select * from mynews";
return jdbc.queryForList(sql);
}
//根据内容模糊查询
public List<Map<String, Object>> queryNewsByContent(String content){
String sql="select * from mynews where content like '%"+content+"%'";
return jdbc.queryForList(sql);
}
//新增新闻
public void inserNews(String title,String content,String newspath,String createtime){
String sql="insert into mynews(title,content,htmlpath,createtime)values('"+title+"','"+content+"','"+newspath+"','"+createtime+"')";
jdbc.execute(sql);
}
}
7.业务逻辑层Service
package web.service;
import java.util.List;
import java.util.Map;
public interface NewsService {
//根据内容查询
public List<Map<String, Object>> queryNewsByContent(String content);
//添加新闻
public void inserNews(String title,String content,String newspath,String createtime);
}
package web.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import web.dao.NewDao;
import web.service.NewsService;
@Service
public class NewServiceImpl implements NewsService{
@Autowired
private NewDao dao;
//根据内容查询
public List<Map<String, Object>> queryNewsByContent(String content){
if(content==null){
content="";
}
return dao.queryNewsByContent(content);
}
//新增
public void inserNews(String title,String content,String newspath,String createtime){
dao.inserNews(title, content, newspath, createtime);
}
}
8.controller层
package web.controller;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import web.service.NewsService;
/**
* Servlet implementation class NewController
*/
public class NewController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public NewController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//获取容器对象
ApplicationContext ac= WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
//获取service层的bean
NewsService ns=(NewsService)ac.getBean("newServiceImpl");
//获取传过来的值
String mycontent=request.getParameter("mycontent");
//查询内容
List<Map<String, Object>> queryNewsByContent =ns.queryNewsByContent(mycontent);
//渲染到页面
request.setAttribute("newList", queryNewsByContent);
//跳转到ftl
request.getRequestDispatcher("/news.ftl").forward(request, response);
}
/**
* @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);
}
}
9.视图层。在webapp下创建
<div style="text-align:center;"><form action="nc" method="get">
内容<input type="text" name="mycontent" >
<input type="submit" value="查询">
</form>
<table border=1 align="center">
<tr><th>新闻标题</th><th>新闻内容</th></tr>
<#list newList as tmp>
<tr><td>${tmp.title}</td><td>${tmp.content}</td></tr>
</#list>
</table>
<input type="button" value="新增文章"οnclick='window.open("news.html")'/>
<div>
10.增加新闻
<!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 web.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 org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import web.dao.impl.NewDaoImpl;
import web.service.NewsService;
/**
* Servlet implementation class News
*/
public class News extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public News() {
// TODO Auto-generated constructor stub
}
NewDaoImpl my= new NewDaoImpl();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
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");
//获取容器对象
ApplicationContext ac= WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
//获取标题
String title=request.getParameter("title");
//获取内容
String content=request.getParameter("content");
//获取时间
Date date= new Date();
String dates=sdf.format(date);
String uuid=UUID.randomUUID().toString();
try {
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));
Map root = new HashMap();
root.put("title", title);
root.put("content", content);
root.put("createtime", dates);
Template temp =config.getTemplate("new.ftl");
String sa=HTML_DIR+"/"+(uuid)+".html";
Writer out =new OutputStreamWriter(new FileOutputStream(sa));
temp.process(root, out);
out.flush();
out.close();
NewsService ns=(NewsService)ac.getBean("newServiceImpl");
ns.inserNews(title, content, (uuid) + ".html", dates);
response.getWriter().println("发布成功...");
request.getRequestDispatcher("/nc").forward(request, response);
} 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);
}
}