注:本文仅仅属于我的记录文档。javascript
1、项目的整体结构、以及所须要的jar包css
1.项目结构(注:此处的rsrc/resources为资源目录,新建时New -> source folder)html
2.所须要的jar包java
2、配置文件源代码mysql
a. web.xmljquery
<?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>portals</display-name> <!-- 编码过滤 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring 监听器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- logback 配置监听器。 若不配置的话 会自动寻找根路径下的logback.xml --> <!-- <context-param> <param-name>logbackConfigLocation</param-name> <param-value>classpath:logback.xml</param-value> </context-param> <listener> <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class> </listener> --> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <!-- 此处配置成 / 注意和/*的区别 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/WEB-INF/login.jsp</welcome-file> </welcome-file-list> </web-app>
b.data.propertiesweb
driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/user jdbc.username= jdbc.password= webServer=http://localhost:8080/portals
c.applicationContext.xmlajax
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- 扫描service和dao --> <context:component-scan base-package="com.study.service,com.study.dao" /> <!-- 引入资源文件的三种方式 --> <!-- <context:property-placeholder location="classpath:data.properties"/> --> <!-- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>classpath:data.properties</value> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>--> <util:properties id="settings" location="classpath:data.properties" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="#{settings.driver}" /> <property name="url" value="#{settings['jdbc.url']}" /> <property name="username" value="#{settings['jdbc.username']}" /> <property name="password" value="#{settings['jdbc.password']}" /> </bean> <!-- 和mybatis的映射,能够引入comfig文件的配置,也能够不引入 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- mybatis主配置文件 --> <!-- <property name="configLocation" value="/WEB-INF/resource_xml/mybatis-config.xml" /> --> <!-- 映射mapper文件 --> <property name="mapperLocations" value="classpath*:com/study/sql/mybatis-sql-*.xml"/> <!-- 在sql中写入时 parameterType 能够直接写简写 没必要写整个包+class 和主配置文件一块使用--> <!-- <property name="typeAliasesPackage" value="com.study.pojo.*"/> --> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.study.dao"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- 配置事物 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="allServiceMethod" expression="execution(* com.study.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="allServiceMethod"/> </aop:config> <!-- 在容器启动时,完成webServer的注入,前台使用 --> <bean id="WebConfig" class="com.study.util.WebConfig"> <property name="beanName" value="webServer" /> <property name="webServer" value="#{settings.webServer}"></property> </bean> </beans>
d.spring-mvc.xmlspring
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 扫描controller service和dao在applicationContext.xml中进行扫描 --> <context:component-scan base-package="com.study.controller"/> <mvc:annotation-driven/> <!-- 资源映射的两种方式,选择一种便可 --> <mvc:default-servlet-handler /> <!-- <mvc:resources location="/resource/" mapping="/resource/**" /> --> <!-- 视图解析 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 此处本来是配置json的映射 发现引入了 jackson-annotations-2.8.4.jar jackson-core-2.8.4.jar jackson-databind-2.8.4.jar 三个jar包就能够实现 --> <!-- 在spring 4.x以后 使用 MappingJackson2HttpMessageConverter 之前的为 MappingJacksonHttpMessageConverter--> <!-- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> </bean> </list> </property> </bean> --> </beans>
e.mybatis-config.xmlsql
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <!-- <typeAlias type="com.study.pojo.User" alias="User"/> --> </typeAliases> <mappers> <!-- <mapper resource="com/study/sql/mybatis-sql-user.xml" /> --> </mappers> </configuration>
f.logback.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- configuration file for LogBack (slf4J implementation) See here for more details: http://gordondickens.com/wordpress/2013/03/27/sawing-through-the-java-loggers/ --> <configuration scan="true" scanPeriod="30 seconds"> <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> <resetJUL>true</resetJUL> </contextListener> <!-- To enable JMX Management --> <jmxConfigurator /> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss}-%-5level %logger{0} - %msg%n </pattern> </encoder> </appender> <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其余文件 --> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Encoding>UTF-8</Encoding> <!-- 指定日志文件的名称 <file>${compilePath}/exam.log</file> --> <!-- 当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名 TimeBasedRollingPolicy: 最经常使用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 %i:当文件大小超过maxFileSize时,按照i进行文件滚动 当使用tomcat配置时,修改$(user.dir)为${catalina.base}。获取绝对路径。 --> <fileNamePattern>D:/portals/logs/%d{yyyy-MM-dd}-%i.log </fileNamePattern> <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置天天滚动, 且maxHistory是365,则只保存最近365天的文件,删除以前的旧文件。注意,删除旧文件是, 那些为了归档而建立的目录也会被删除。 --> <MaxHistory>365</MaxHistory> <!-- 当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是没法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,不然按照句点分割。 %msg:日志消息,%n是换行符 --> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} - [ %-5level ] [ %logger{0} : %line ] - %msg%n</pattern> </layout> </appender> <!-- 打印sql语句 --> <logger name="java.sql.Connection" level="DEBUG" /> <logger name="java.sql.Statement" level="DEBUG" /> <logger name="java.sql.PreparedStatement" level="DEBUG" /> <root level="debug"> <appender-ref ref="console" /> <!-- 放开以后,会写入到文件中 --> <!-- <appender-ref ref="file" /> --> </root> </configuration>
3、java文件代码
a.User.java
package com.study.pojo; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; private String sex; private int age; public User() { } public User(int id, String name, String sex, int age) { super(); this.id = id; this.name = name; this.sex = sex; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; } }
b.UserController.java
package com.study.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.study.pojo.User; import com.study.service.UserService; import com.study.util.JsonResult; @Controller public class UserController { @Autowired private UserService userService; @Value("#{settings.driver}") private String name; @RequestMapping("login") @ResponseBody //不可缺乏该注解 public JsonResult login(User user,HttpServletRequest req) { System.out.println("================"+user); JsonResult jsonResult = new JsonResult(); jsonResult.setFlag(true); jsonResult.setObject(user); jsonResult.setMessage("success"); return jsonResult; } @RequestMapping("user") public String userList(Model model,HttpServletRequest req) { List<User> userList = userService.getUserList(); /*for(int i=100; i<105; i++){ userList.add(new User(i,"zhangsan","男",i-80)); }*/ System.out.println(userList.toString()); model.addAttribute("userList", userList); return "user"; } @RequestMapping("add") public String addUser(Model model,HttpServletRequest req) { User user = new User(57,"jack","男",18); userService.addUser(user); /*for(int i=100; i<105; i++){ userList.add(new User(i,"zhangsan","男",i-80)); }*/ System.out.println(user); return ""; } @RequestMapping("test") public String test(Model model,HttpServletRequest req) { System.out.println("------------------test--------------------"); List<User> userList = userService.getUserList(); /*for(int i=100; i<105; i++){ userList.add(new User(i,"zhangsan","男",i-80)); }*/ System.out.println(userList.toString()); model.addAttribute("userList", userList); return "test"; } @RequestMapping("test2") public String test2(Model model,HttpServletRequest req) { System.out.println(name +"------------------name--------------------"); return "test"; } }
c.UserServiceImpl.java (实现UserService接口)
package com.study.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.study.dao.UserDao; import com.study.pojo.User; import com.study.service.UserService; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public List<User> getUserList() { List<User> userList= userDao.getUserList(); return userList; } //测试事务 @Override public int addUser(User user) { System.out.println("----111----test-tx----------------"); int j = userDao.deleteUser(58); System.out.println("---222-----test-tx----------------"); int i = userDao.addUser(user); System.out.println("---333-----test-tx----------------"); return 5; } @Override public int deleteUser(int id) { int i = userDao.deleteUser(id); return i; } @Override public int updateUser(int id) { int i = userDao.updateUser(id); return i; } }
d.UserDao.java
package com.study.dao; import java.util.List; import org.springframework.stereotype.Repository; import com.study.pojo.User; @Repository public interface UserDao { public List<User> getUserList(); public int addUser(User user); public int deleteUser(int id); public int updateUser(int id); }
e.mybatis-sql-user.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.study.dao.UserDao"> <resultMap type="com.study.pojo.User" id="User" > <!-- <result column="id" property="id" /> <result column="name" property="name" /> <result column="sex" property="sex" /> <result column="age" property="age" /> --> </resultMap> <insert id="addUser" parameterType="com.study.pojo.User"> <![CDATA[ insert into tbl_user (id,password,name,sex,age) values(#{id},'123456',#{name},#{sex},#{age}) ]]> </insert> <select id="getUserList" resultMap="User"> <![CDATA[ select * from tbl_user ]]> </select> <update id="updateUser" parameterType="int"> <![CDATA[ update tbl_user set name=#{name},sex=#{sex},age=#{age} where id=#{id} ]]> </update> <delete id="deleteUser" parameterType="int"> <![CDATA[ delete from tbl_user where id=#{id} ]]> </delete> </mapper>
f.WebConfig.java
package com.study.util; import javax.servlet.ServletContext; import org.springframework.web.context.ServletContextAware; public class WebConfig implements ServletContextAware { private String beanName; //@Value("#{settings.webServer}") private String webServer; @Override public void setServletContext(ServletContext servletContext) { servletContext.setAttribute(beanName, webServer); } public String getBeanName() { return beanName; } public void setBeanName(String beanName) { this.beanName = beanName; } public String getWebServer() { return webServer; } public void setWebServer(String webServer) { this.webServer = webServer; } }
g.JsonResult.java
package com.study.util; public class JsonResult { private boolean flag; private Object object; private String message; public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
4、jsp文件
a. user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>user list</title> </head> <body> <h1>${webServer}</h1> <c:forEach items="${userList}" var="user"> <h1>${user.id}</h1> <h1>${user.name}</h1> <h1>${user.sex}</h1> <h1>${user.age}</h1> </c:forEach> </body> </html>
b.test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=0.5, initial-scale=1.0"> <title>my first bootstrap page</title> <link rel="stylesheet" type="text/css" href="${webServer}/resource/css/bootstrap.css"> <script type="text/javascript" src="${webServer}/resource/js/jquery-3.1.1.min.js"></script> <script type="text/javascript" src="${webServer}/resource/js/bootstrap.js"></script> <style type="text/css"> </style> </head> <body> <nav class="navbar navbar-inverse" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="javascript:void(0);">my library</a> </div> <div class="col-md-offset-2"> <ul class="nav navbar-nav"> <li class="active"><a href="javascript:void(0);">中文资料</a></li> <li><a href="javascript:void(0);">外文资料</a></li> <li><a href="javascript:void(0);">网络技术资料</a></li> <li class="dropdown"> <a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown">技术语言指导 <span class="caret"></span> </a> <ul class="dropdown-menu"> <li><a href="javascript:void(0);">java语言</a></li> <li class="divider"></li> <li><a href="javascript:void(0);">C语言</a></li> <li><a href="javascript:void(0);">C++语言</a></li> </ul> </li> </ul> </div> <div class="col-md-offset-10"> <ul class="nav navbar-nav"> <li class="disable"><a href="javascript:void(0);">欢迎:张三</a></li> <li class=""><a href="javascript:void(0);">2016-10-24</a></li> </ul> </div> </div> </nav> <div class="container-fluid"> <div class="row"> <div class="col-md-2"> <ul class="nav nav-stacked" style="background-color: rgba(211, 220, 222, 0.16);;"> <li style="background-color: rgba(134, 167, 210, 0.52);"><a href="javascript:void(0);">英文资料</a></li> <li><a href="javascript:void(0);">中文资料</a></li> <li class="disabled"><a href="javascript:void(0);">英文资料</a></li> <li><a href="javascript:void(0);"> <span class="glyphicon glyphicon-fire"></span>中文资料</a></li> <li><a href="javascript:void(0);"> <span class="glyphicon glyphicon-fire">英文资料</a></li> <li><a href="javascript:void(0);">中文资料</a></li> <li><a href="javascript:void(0);">英文资料</a></li> </ul> </div> <div class="col-md-10" style="backgroung-color:red;height:200px"> <div id="myCarousel" class="carousel slide"> <ol class="carousel-indicators"> <li data-target="#myCarousel" data-slide-to="0" class="active"></li> <li data-target="#myCarousel" data-slide-to="1"></li> <li data-target="#myCarousel" data-slide-to="2"></li> </ol> <div class="carousel-inner"> <div class="item active"> <img src="${webServer}/resource/img/Jellyfish.jpg" alt="First slide"> <div class="carousel-caption">美如画</div> </div> <div class="item"> <img src="${webServer}/resource/img/Koala.jpg" alt="Second slide"> <div class="carousel-caption">美如画</div> </div> <div class="item"> <img src="${webServer}/resource/img/Lighthouse.jpg" alt="Third slide"> <div class="carousel-caption">美如画</div> </div> </div> </div> <div style="margin-top:20px"> <ol class="breadcrumb"> <li><a href="javascript:void(0);">Home</a></li> <li><a href="javascript:void(0);">first</a></li> <li class="active">second</li> </ol> </div> <div style="margin-top:20px"> <table class="table table-hover"> <caption>悬停表格布局</caption> <thead> <tr> <th>id</th> <th>姓名</th> <th>性别</th> <th>年龄</th> </tr> </thead> <tbody> <c:forEach items="${userList}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.sex}</td> <td>${user.age}</td> </tr> </c:forEach> </tbody> </table> </div> <div style="margin-top:20px"> <button type="button" class="btn btn-lg btn-primary" data-toggle="collapse" data-target="#demo">简单的可折叠组件 </button> <div id="demo" class="collapse in"> Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. </div> <div class="pannel pannel-default"> <div class="panel-heading"> <span class="pannel-title"> <a data-toggle="collapse" data-target="#myDemo">点击</a> </span> </div> <div id="myDemo" class="pannel-collapse collapse in"> <div class="panel-body"> Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. </div> </div> </div> </div> </div> </div> </div> <script> </script> </body> </html>
c login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <!-- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> --> <title>Insert title here</title> <script type="text/javascript" src="${webServer}/resource/js/jquery-3.1.1.min.js"></script> </head> <body> <a href="http://localhost:8080/portals/user"><h1>跳转</h1></a> <div> 姓名: <input id="name" type="text" value="张三" placeholder="张三"/><br/> 性别: <select id="sex"> <option value="male">男</option> <option value="female">女</option> </select><br/> 年龄: <input id="age" type="text" value="20" placeholder="20"/>岁<br/> <button id="login">提交</button> </div> <script> $("#login").click(function(){ var user={ "name": $("#name").val(), "age" : $("#age").val(), "sex" : $("#sex").val() }; alert(user.name); $.ajax({ type: 'post', url: "${webServer}/login", data : user, success: function(data){ alert(data.message); }, error:function(data){ alert("出错了!!:"+data.msg); } }); return false; }); </script> </body> </html>