眼下俺在搭建一个自己的个人站点玩玩。一边练习。一边把用到的技术总结一下,日后好复习。
站点框架大致例如以下图所看到的:
眼下仅仅用到了SpringMVC+Spring+Mybatis+Mysql。把它弄到了自己的server上来玩耍。
后台结构图:
- view–controller层与前台交互,登陆拦截器
- utils–工具类。一些经常使用的工具类。
- interceptor–拦截器。页面请求地址拦截和预防XSS漏洞拦截。
- impl–接口类,Service层-进行业务处理。
- exception–异常处理器。自己定义异常处理,拦截。
- entity–实体类,存放部分数据库相关实体。
- dao–与数据库进行交互,获取数据。
- 眼下缺少一个封装类包。
具体演示样例代码:
- TestController.java插入和依据ID获取数据
package com.YouXu.view;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.YouXu.entity.Test;
import com.YouXu.impl.TestImpl;
import com.YouXu.utils.IpAddr;
/**
*
* @Title: TestController.java
* @Package: com.YouXu.view
* @author you.xu
* @date 2015年12月21日下午4:38:04
* @version 1.0
*/
@Controller
public class TestController {
private static final Logger log = Logger.getLogger(TestController.class);
@Autowired
private TestImpl testImpl;
@RequestMapping("test")
@ResponseBody
public Test test(@RequestParam("id") Integer id) {
Test test = new Test();
try {
test = testImpl.getTest(id);
} catch (Exception e) {
e.printStackTrace();
log.error(e, e);
}
return test;
}
@RequestMapping("getIndex")
@ResponseBody
public void index(HttpServletRequest request) {
String iip = null;
try {
iip = IpAddr.getIpAddr(request);
} catch (Exception e) {
log.error(e, e);
e.printStackTrace();
}
testImpl.addTest(iip);
}
}
- TestImpl.java
package com.YouXu.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.YouXu.dao.TestDao;
import com.YouXu.entity.Test;
/**
*
* @Title: TestImpl.java
* @Package: com.YouXu.impl
* @author you.xu
* @date 2015年12月21日下午4:40:46
* @version 1.0
*/
@Service
public class TestImpl {
@Autowired
private TestDao testDao;
public Test getTest(Integer id) {
Test test = testDao.getTest(id);
return test;
}
public void addTest(String iip) {
testDao.addTest(iip);
}
}
- TestDao.java
package com.YouXu.dao;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.YouXu.entity.Test;
/**
*
* @Title: TestDao.java
* @Package: com.YouXu.dao
* @author you.xu
* @date 2015年12月21日下午4:40:56
* @version 1.0
*/
@Repository
public class TestDao extends SqlSessionDaoSupport {
@Autowired
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
String ns = "com.YouXu.sqlMap.TestMapper.";
public Test getTest(Integer id) {
Test test = this.getSqlSession().selectOne(ns + "getTestbyId", id);
return test;
}
public void addTest(String iip) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = formatter.format(new Date());
Test test = new Test();
test.setIip(iip);
test.setTtime(time);
this.getSqlSession().insert(ns + "insertTest", test);
}
}
- Test.java
package com.YouXu.entity;
/**
*
* @Title: Test.java
* @Package: com.YouXu.entity
* @author you.xu
* @date 2015年12月21日下午4:39:00
* @version 1.0
*/
public class Test {
private Integer iid;
private String iip;
private String ttime;
public Integer getIid() {
return iid;
}
public void setIid(Integer iid) {
this.iid = iid;
}
public String getIip() {
return iip;
}
public void setIip(String iip) {
this.iip = iip;
}
public String getTtime() {
return ttime;
}
public void setTtime(String ttime) {
this.ttime = ttime;
}
public String toString() {
return "Test [iid=" + iid + ", iip=" + iip + ", ttime=" + ttime + "]";
}
public Test(Integer iid, String iip, String ttime) {
super();
this.iid = iid;
this.iip = iip;
this.ttime = ttime;
}
public Test() {
super();
}
}
- springmvc.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<context:annotation-config />
<mvc:annotation-driven />
<aop:aspectj-autoproxy />
<context:component-scan base-package="com.YouXu" />
<mvc:resources mapping="/images/**" location="/WEB-INF/images/" />
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<mvc:resources mapping="/audio/**" location="/WEB-INF/audio/" />
<mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
<mvc:resources mapping="/**" location="/index.html" />
<bean id="jacksonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8value>
list>
property>
bean>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="4096" />
bean>
<bean class="com.YouXu.exception.CustomExceptionResolver">bean>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
bean>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/">property>
<property name="suffix" value=".jsp">property>
bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/login/*" />
<bean class="com.YouXu.view.LoginInterceptor">bean>
mvc:interceptor>
mvc:interceptors>
beans>
- applicationContext.xml
<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"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://************:3306/******" />
<property name="username" value="****" />
<property name="password" value="****" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource">property>
<property name="configLocation" value="classpath:sqlMapConfig.xml">property>
bean>
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource">property>
bean>
<tx:advice id="txAdive" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="get*" read-only="true" />
tx:attributes>
tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdive"
pointcut="execution(* com.YouXu.impl..*.*(..))" />
aop:config>
beans>
- sqlMapConfig.xml
<configuration>
<mappers>
<mapper resource="com/YouXu/sqlMap/TestMapper.xml" />
mappers>
configuration>
- log4j.properties
# 设定logger的root level为INFO,指定的输出目的地(appender)为file,并在控制台输出stdout(Console)
log4j.rootLogger=info, file, stdout
# 设定stdout控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{HH\:mm\:ss}] %5p %F\:%L "%m"%n
# 设定输出位置。此处设定tomcat文件夹的logs下,文件名称为projectLogs.log。
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.append = true
log4j.appender.file.encoding=UTF-8
log4j.appender.file.File=${catalina.home}/logs/youxu.log
log4j.appender.file.datePattern='.'yyyy-MM-dd
log4j.appender.file.BufferedIO=true
log4j.appender.file.BufferSize=8192
# 设定制定的file使用的PatternLayout.
# 有关ConversionPattern中的转意字符的含义參考说明
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p [%C:%M:%L] %m%n
- TestMapper.xml
>
<mapper namespace="com.YouXu.sqlMap.TestMapper"> <resultMap id="BaseResultMap" type="com.YouXu.entity.Test"> <id column="iid" property="iid" /> <result column="iip" property="iip" /> <result column="ttime" property="ttime" /> resultMap> <sql id="Base_Column_List"> iid,iip,ttime sql> <select id="getTestbyId" parameterType="Integer" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from Test where iid = #{iid} select> <insert id="insertTest" parameterType="com.YouXu.entity.Test"> <selectKey keyProperty="iid" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() selectKey> insert into test(iid,iip,ttime) values(null,#{iip},#{ttime}) insert> mapper>
- 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" id="WebApp_ID" version="2.5"> <display-name>YouXudisplay-name> <context-param> <param-name>contextConfigLocationparam-name> <param-value>/WEB-INF/classes/applicationContext.xmlparam-value> context-param> <context-param> <param-name>log4jConfigLocationparam-name> <param-value>/WEB-INF/classes/log4j.propertiesparam-value> context-param> <context-param> <param-name>log4jRefreshIntervalparam-name> <param-value>60000param-value> context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> listener> <listener> <listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class> listener> <filter> <filter-name>XSSFilterfilter-name> <filter-class>com.YouXu.interceptor.XSSFilterfilter-class> filter> <filter-mapping> <filter-name>XSSFilterfilter-name> <url-pattern>/*url-pattern> filter-mapping> <servlet> <servlet-name>springservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <init-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:springmvc.xmlparam-value> init-param> servlet> <servlet-mapping> <servlet-name>springservlet-name> <url-pattern>/url-pattern> servlet-mapping> <filter> <filter-name>CharacterEncodingFilterfilter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class> <init-param> <param-name>encodingparam-name> <param-value>UTF-8param-value> init-param> filter> <filter-mapping> <filter-name>CharacterEncodingFilterfilter-name> <url-pattern>/*url-pattern> filter-mapping> <error-page> <error-code>404error-code> <location>/404.jsplocation> error-page> <error-page> <error-code>500error-code> <location>/error.jsplocation> error-page> <session-config> <session-timeout>15session-timeout> session-config> <welcome-file-list> <welcome-file>index-h5.htmlwelcome-file> welcome-file-list> web-app>
所需用到的lib包:点击此处
眼下应该就是这些。日后有补充的在进行加入。
我是一个小菜鸟,大家如有更简单高效的配置搭建。欢迎在评论中指出,一起分享。谢谢