Springweb的簡單應用

創建本地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);
	}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章