Commit 5d3a855b by 罗晓明

图片

parents
# Default ignored files
/workspace.xml
\ No newline at end of file
XmgResume
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="xmResume" />
<module name="XmgResume" />
</profile>
</annotationProcessing>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/../../XmgResume/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/../../XmgResume/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
<file type="web" url="file://$USER_HOME$/XmgResume" />
</component>
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
<option value="$USER_HOME$/XmgResume/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/printProject.iml" filepath="$PROJECT_DIR$/.idea/printProject.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>xmResume</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<build>
<finalName>xmResume</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.xm.xr.bean;
import com.xm.xr.bean.base.BaseBean;
public class Award extends BaseBean {
private String name;
private String image;
private String intro;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
}
package com.xm.xr.bean;
import com.xm.xr.bean.base.BaseBean;
public class Company extends BaseBean {
private String name;
private String logo;
private String website;
private String intro;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
}
package com.xm.xr.bean;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.xm.xr.bean.base.BaseBean;
import java.util.Date;
public class Education extends BaseBean {
private String name;
private String intro;
private Date beginDay;
private Date endDay;
private Integer type;
@JsonIgnore
public String getTypeString() {
switch (type) {
case 1: return "小学";
case 2: return "初中";
case 3: return "高中";
case 4: return "中专";
case 5: return "大专";
case 6: return "本科";
case 7: return "硕士";
case 8: return "博士";
default: return "其它";
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
public Date getBeginDay() {
return beginDay;
}
public void setBeginDay(Date beginDay) {
this.beginDay = beginDay;
}
public Date getEndDay() {
return endDay;
}
public void setEndDay(Date endDay) {
this.endDay = endDay;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
}
package com.xm.xr.bean;
import com.xm.xr.bean.base.DateBean;
public class Experience extends DateBean {
private String job;
private String intro;
private Company company;
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
// @JsonIgnore
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
// public Integer getCompanyId() {
// return company.getId();
// }
}
package com.xm.xr.bean;
import com.xm.xr.bean.base.DateBean;
public class Project extends DateBean {
private String name;
private String intro;
private String website;
private String image;
private Company company;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
}
package com.xm.xr.bean;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.xm.xr.bean.base.BaseBean;
public class Skill extends BaseBean {
private String name;
private Integer level;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
@JsonIgnore
public String getLevelString() {
switch (level) {
case 1: return "熟悉";
case 2: return "掌握";
case 3: return "精通";
default: return "了解";
}
}
}
package com.xm.xr.bean;
import org.apache.commons.fileupload.FileItem;
import java.util.Map;
public class UploadParams {
private Map<String, Object> params;
private Map<String, FileItem> fileParams;
public Map<String, Object> getParams() {
return params;
}
public void setParams(Map<String, Object> params) {
this.params = params;
}
public Map<String, FileItem> getFileParams() {
return fileParams;
}
public void setFileParams(Map<String, FileItem> fileParams) {
this.fileParams = fileParams;
}
public FileItem getFileParam(String name) {
return fileParams.get(name);
}
public Object getParam(String name) {
return params.get(name);
}
}
package com.xm.xr.bean;
import com.xm.xr.bean.base.BaseBean;
public class WebSite extends BaseBean {
private String footer;
public String getFooter() {
return footer;
}
public void setFooter(String footer) {
this.footer = footer;
}
}
package com.xm.xr.bean.base;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BaseBean {
private Integer id;
private Date createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@JsonIgnore
public String getJSON() throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
String jsonStr = mapper.writeValueAsString(this).replace("\"","'");
return jsonStr;
}
}
package com.xm.xr.bean.base;
import java.util.Date;
public abstract class DateBean extends BaseBean {
private Date beginDay;
private Date endDay;
public Date getBeginDay() {
return beginDay;
}
public void setBeginDay(Date beginDay) {
this.beginDay = beginDay;
}
public Date getEndDay() {
return endDay;
}
public void setEndDay(Date endDay) {
this.endDay = endDay;
}
}
package com.xm.xr.dao;
import com.xm.xr.bean.Award;
public interface AwardDao extends BaseDao<Award> {
}
package com.xm.xr.dao;
import java.util.List;
public interface BaseDao<T> {
boolean remove(Integer id);
boolean remove(List<Integer> ids);
boolean save(T bean);
T get(Integer id);
List<T> list();
int count();
}
package com.xm.xr.dao;
import com.xm.xr.bean.Company;
public interface CompanyDao extends BaseDao<Company> {
}
package com.xm.xr.dao;
public interface EducationDao {
}
package com.xm.xr.dao;
import com.xm.xr.bean.Experience;
public interface ExperienceDao extends BaseDao<Experience> {
}
package com.xm.xr.dao;
import com.xm.xr.bean.Project;
public interface ProjectDao extends BaseDao<Project> {
}
package com.xm.xr.dao;
import com.xm.xr.bean.Skill;
public interface SkillDao extends BaseDao<Skill> {
}
package com.xm.xr.dao;
import com.xm.xr.bean.WebSite;
public interface WebsiteDao extends BaseDao<WebSite> {
}
package com.xm.xr.dao.impl;
import com.xm.xr.bean.Award;
import com.xm.xr.dao.AwardDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import java.util.ArrayList;
import java.util.List;
public class AwardDaoImpl extends BaseDaoImpl<Award> implements AwardDao {
/**
* 更新或者保存
*/
public boolean save(Award obj) {
String sql;
List<Object> args = new ArrayList<>();
args.add(obj.getName());
args.add(obj.getImage());
args.add(obj.getIntro());
Integer id = obj.getId();
if (id == null || id < 1) {
// 添加
sql = "INSERT INTO award(name, image, intro) VALUES(?,?,?)";
} else {
// 更新
sql = "UPDATE award SET name = ?,image = ?, intro = ? WHERE id = ?";
args.add(id);
}
try {
return getTpl().update(sql,args.toArray()) > 0;
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 获取单个对象
*/
public Award get(Integer id) {
String sql = "SELECT id, created_time, name, image, intro FROM award WHERE id = ?";
return getTpl().queryForObject(sql,new BeanPropertyRowMapper<>(Award.class),id);
}
/**
* 获取多个对象
*/
public List<Award> list() {
String sql = "SELECT id, created_time, name, image, intro FROM award";
List<Award> beans = getTpl().query(sql,new BeanPropertyRowMapper<>(Award.class));
return beans;
}
@Override
public int count() {
return 0;
}
}
package com.xm.xr.dao.impl;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.xm.xr.dao.BaseDao;
import com.xm.xr.service.BaseService;
import com.xm.xr.util.Strings;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.io.InputStream;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public abstract class BaseDaoImpl<T> implements BaseDao<T> {
protected static JdbcTemplate tpl;
static {
try (InputStream is = BaseDaoImpl.class.getClassLoader().getResourceAsStream("druid.properties")) {
// 获取连接池
Properties properties = new Properties();
properties.load(is);
DataSource ds = DruidDataSourceFactory.createDataSource(properties);
// 创建tpl
tpl = new JdbcTemplate(ds);
} catch (Exception e) {
e.printStackTrace();
}
}
public static JdbcTemplate getTpl() {
return tpl;
}
private String table = table();
protected String table() {
ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
Class beanCls = (Class) type.getActualTypeArguments()[0];
return Strings.underlineCase(beanCls.getSimpleName());
}
public boolean remove(Integer id) {
String sql = "DELETE FROM " + table + " WHERE id = ?";
return getTpl().update(sql, id) > 0;
}
public boolean remove(List<Integer> ids) {
List<Object> args = new ArrayList<>();
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM ").append(table).append(" WHERE id in (");
for (Integer id : ids) {
args.add(id);
sql.append("?, ");
}
sql.replace(sql.length() - 2, sql.length(), ")");
// DELETE FROM education WHERE id in (?, ?, ?)
return getTpl().update(sql.toString(), args.toArray()) > 0;
}
public int count() {
String sql = "SELECT COUNT(*) FROM " + table;
return tpl.queryForObject(sql, new BeanPropertyRowMapper<>(Integer.class));
}
}
package com.xm.xr.dao.impl;
import com.xm.xr.bean.Company;
import com.xm.xr.dao.CompanyDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import java.util.ArrayList;
import java.util.List;
public class CompanyDaoImpl extends BaseDaoImpl<Company> implements CompanyDao {
@Override
public boolean save(Company bean) {
Integer id = bean.getId();
List<Object> args = new ArrayList<>();
args.add(bean.getName());
args.add(bean.getLogo());
args.add(bean.getWebsite());
args.add(bean.getIntro());
String sql;
if (id == null || id < 1) { // 添加
sql = "INSERT INTO " + table() + "(name, logo, website,intro) VALUES(?, ?, ? ,?)";
} else {
sql = "UPDATE "+table()+" SET name = ?, logo = ?, website = ? , intro = ? WHERE id = ?";
args.add(id);
}
return tpl.update(sql, args.toArray()) > 0;
}
@Override
public Company get(Integer id) {
String sql = "SELECT id, created_time, name, logo, website ,intro FROM "+ table() +" WHERE id = ?";
return tpl.queryForObject(sql, new BeanPropertyRowMapper<>(Company.class), id);
}
@Override
public List<Company> list() {
String sql = "SELECT id, created_time, name, logo, website , intro FROM "+ table();
return tpl.query(sql, new BeanPropertyRowMapper<>(Company.class));
}
}
package com.xm.xr.dao.impl;
import com.xm.xr.bean.Education;
import com.xm.xr.dao.EducationDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import java.util.ArrayList;
import java.util.List;
public class EducationDaoImpl extends BaseDaoImpl<Education> implements EducationDao {
/**
* 更新或者保存
*/
public boolean save(Education education) {
String sql;
List<Object> args = new ArrayList<>();
args.add(education.getName());
args.add(education.getType());
args.add(education.getIntro());
args.add(education.getBeginDay());
args.add(education.getEndDay());
Integer id = education.getId();
if (id == null || id < 1) {
// 添加
sql = "INSERT INTO education(name, type, intro, begin_day, end_day) VALUES(?,?,?,?,?)";
} else {
// 更新
sql = "UPDATE education SET name = ?,type = ?, intro = ?, begin_day = ?, end_day = ? WHERE id = ?";
args.add(id);
}
try {
return getTpl().update(sql,args.toArray()) > 0;
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 获取单个对象
*/
public Education get(Integer id) {
String sql = "SELECT id, created_time, name, type, intro, begin_day, end_day FROM education WHERE id = ?";
return getTpl().queryForObject(sql,new BeanPropertyRowMapper<>(Education.class),id);
}
/**
* 获取多个对象
*/
public List<Education> list() {
String sql = "SELECT id, created_time, name, type, intro, begin_day, end_day FROM education";
List<Education> educationBeans = getTpl().query(sql,new BeanPropertyRowMapper<>(Education.class));
return educationBeans;
}
@Override
public int count() {
return 0;
}
}
package com.xm.xr.dao.impl;
import com.xm.xr.bean.Company;
import com.xm.xr.bean.Experience;
import com.xm.xr.bean.base.DateBean;
import com.xm.xr.dao.ExperienceDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import java.util.ArrayList;
import java.util.List;
public class ExperienceDaoImpl extends BaseDaoImpl<Experience> implements ExperienceDao {
private static String listSql;
private static RowMapper<Experience> rowMapper;
static {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ");
sql.append("t1.id, t1.created_time, t1.job, t1.intro, t1.begin_day, t1.end_day, ");
sql.append("t2.id, t2.created_time, t2.name, t2.logo, t2.website, t2.intro ");
sql.append("FROM experience t1 JOIN company t2 ON t1.company_id = t2.id");
listSql = sql.toString();
rowMapper = (resultSet, i) -> {
Experience experience = new Experience();
experience.setId(resultSet.getInt("t1.id"));
experience.setCreateTime(resultSet.getDate("t1.created_time"));
experience.setIntro(resultSet.getString("t1.intro"));
experience.setJob(resultSet.getString("t1.job"));
experience.setBeginDay(resultSet.getDate("t1.begin_day"));
experience.setEndDay(resultSet.getDate("t1.end_day"));
Company company = new Company();
experience.setCompany(company);
company.setId(resultSet.getInt("t2.id"));
company.setCreateTime(resultSet.getDate("t2.created_time"));
company.setIntro(resultSet.getString("t2.intro"));
company.setLogo(resultSet.getString("t2.logo"));
company.setWebsite(resultSet.getString("t2.website"));
company.setName(resultSet.getString("t2.name"));
return experience;
};
}
@Override
public boolean save(Experience bean) {
Integer id = bean.getId();
List<Object> args = new ArrayList<>();
args.add(bean.getJob());
args.add(bean.getIntro());
args.add(bean.getBeginDay());
args.add(bean.getEndDay());
args.add(bean.getCompany().getId());
String sql;
if (id == null || id < 1) { // 添加
sql = "INSERT INTO experience(job, intro, begin_day,end_day,company_id) VALUES(?,?,?,?,?)";
} else {
sql = "UPDATE experience SET job = ?, intro = ?, begin_day = ?, end_day = ?, company_id = ? WHERE id = ?";
args.add(id);
}
return tpl.update(sql, args.toArray()) > 0;
}
@Override
public Experience get(Integer id) {
String sql = "SELECT id, created_time, name, image, intro FROM award WHERE id = ?";
return tpl.queryForObject(sql, rowMapper, id);
}
@Override
public List<Experience> list() {
return tpl.query(listSql, rowMapper);
}
}
package com.xm.xr.dao.impl;
import com.xm.xr.bean.Company;
import com.xm.xr.bean.Project;
import com.xm.xr.dao.ProjectDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import java.util.ArrayList;
import java.util.List;
public class ProjectDaoImpl extends BaseDaoImpl<Project> implements ProjectDao {
private static String listSql;
private static String getSql;
private static RowMapper<Project> rowMapper;
static {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ");
sql.append("t1.id, t1.created_time, t1.name, t1.intro, t1.website, t1.image, t1.begin_day, t1.end_day, ");
sql.append("t2.id, t2.created_time, t2.name, t2.logo, t2.website, t2.intro ");
sql.append("FROM project t1 JOIN company t2 ON t1.company_id = t2.id");
listSql = sql.toString();
getSql = listSql + " WHERE t1.id = ?";
rowMapper = (resultSet, i) -> {
Project project = new Project();
project.setId(resultSet.getInt("t1.id"));
project.setCreateTime(resultSet.getDate("t1.created_time"));
project.setIntro(resultSet.getString("t1.intro"));
project.setName(resultSet.getString("t1.name"));
project.setImage(resultSet.getString("t1.image"));
project.setWebsite(resultSet.getString("t1.website"));
project.setBeginDay(resultSet.getDate("t1.begin_day"));
project.setEndDay(resultSet.getDate("t1.end_day"));
Company company = new Company();
project.setCompany(company);
company.setId(resultSet.getInt("t2.id"));
company.setCreateTime(resultSet.getDate("t2.created_time"));
company.setIntro(resultSet.getString("t2.intro"));
company.setLogo(resultSet.getString("t2.logo"));
company.setWebsite(resultSet.getString("t2.website"));
company.setName(resultSet.getString("t2.name"));
return project;
};
}
@Override
public boolean save(Project bean) {
Integer id = bean.getId();
List<Object> args = new ArrayList<>();
args.add(bean.getName());
args.add(bean.getIntro());
args.add(bean.getImage());
args.add(bean.getWebsite());
args.add(bean.getBeginDay());
args.add(bean.getEndDay());
args.add(bean.getCompany().getId());
String sql;
if (id == null || id < 1) { // 添加
sql = "INSERT INTO project(name, intro, image, website, begin_day, end_day, company_id) VALUES(?, ?, ?, ?, ?, ?, ?)";
} else {
sql = "UPDATE project SET name = ?, intro = ?, image = ?, website = ?, begin_day = ?, end_day = ?, company_id = ? WHERE id = ?";
args.add(id);
}
return tpl.update(sql, args.toArray()) > 0;
}
@Override
public Project get(Integer id) {
return tpl.queryForObject(getSql, rowMapper, id);
}
@Override
public List<Project> list() {
return tpl.query(listSql, rowMapper);
}
}
\ No newline at end of file
package com.xm.xr.dao.impl;
import com.xm.xr.bean.Skill;
import com.xm.xr.dao.SkillDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import java.util.ArrayList;
import java.util.List;
public class SkillDaoImpl extends BaseDaoImpl<Skill> implements SkillDao {
@Override
public boolean save(Skill bean) {
String sql;
List<Object> args = new ArrayList<>();
args.add(bean.getName());
args.add(bean.getLevel());
Integer id = bean.getId();
if (id == null || id < 1) {
// 添加
sql = "INSERT INTO skill(name, level) VALUES(?,?)";
} else {
// 更新
sql = "UPDATE skill SET name = ?,level = ? WHERE id = ?";
args.add(id);
}
try {
return getTpl().update(sql,args.toArray()) > 0;
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
public Skill get(Integer id) {
String sql = "SELECT id, created_time, name, name, level FROM skill WHERE id = ?";
return getTpl().queryForObject(sql,new BeanPropertyRowMapper<>(Skill.class),id);
}
@Override
public List<Skill> list() {
String sql = "SELECT id, created_time, name, level FROM skill";
List<Skill> Beans = getTpl().query(sql,new BeanPropertyRowMapper<>(Skill.class));
return Beans;
}
@Override
public int count() {
return 0;
}
}
package com.xm.xr.dao.impl;
import com.xm.xr.bean.WebSite;
import com.xm.xr.dao.WebsiteDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import java.util.ArrayList;
import java.util.List;
public class WebsiteDaoImpl extends BaseDaoImpl<WebSite> implements WebsiteDao {
/**
*保存,添加
*/
@Override
public boolean save(WebSite webSite) {
String sql;
List<Object> args = new ArrayList<>();
args.add(webSite.getFooter());
Integer id = webSite.getId();
if (id == null || id < 1) {
// 添加
sql = "INSERT INTO website(footer) VALUES(?)";
} else {
// 更新
sql = "UPDATE website SET footer = ? WHERE id = ?";
args.add(id);
}
return getTpl().update(sql,args.toArray()) > 0;
}
@Override
public WebSite get(Integer id) {
return null;
}
/*获取所有数据*/
public List<WebSite> list() {
String sql = "SELECT id, created_time, footer FROM website";
List<WebSite> websiteBeans = getTpl().query(sql,new BeanPropertyRowMapper<>(WebSite.class));
return websiteBeans;
}
@Override
public int count() {
return 0;
}
}
package com.xm.xr.service;
import com.xm.xr.bean.Award;
public interface AwardService extends BaseService<Award> {
}
package com.xm.xr.service;
import java.util.List;
public interface BaseService<T> {
boolean remove(Integer id);
boolean remove(List<Integer> ids);
boolean save(T bean);
T get(Integer id);
List<T> list();
int count();
}
package com.xm.xr.service;
import com.xm.xr.bean.Company;
public interface CompanyService extends BaseService<Company> {
}
package com.xm.xr.service;
import com.xm.xr.bean.Education;
public interface EducationService extends BaseService<Education> {
}
package com.xm.xr.service;
import com.xm.xr.bean.Experience;
public interface ExperienceService extends BaseService<Experience> {
}
package com.xm.xr.service;
import com.xm.xr.bean.Project;
public interface ProjectService extends BaseService<Project> {
}
package com.xm.xr.service;
import com.xm.xr.bean.Skill;
public interface SkillService extends BaseService<Skill> {
}
package com.xm.xr.service;
import com.xm.xr.bean.WebSite;
public interface WebsiteService extends BaseService<WebSite> {
}
package com.xm.xr.service.impl;
import com.xm.xr.bean.Award;
import com.xm.xr.service.AwardService;
public class AwardServiceImpl extends BaseServiceImpl<Award> implements AwardService {
// @Override
// protected BaseDao<Award> dao() {
// return new AwardDaoImpl();
// }
}
package com.xm.xr.service.impl;
import com.xm.xr.dao.BaseDao;
import com.xm.xr.service.BaseService;
import com.xm.xr.util.Strings;
import java.lang.reflect.ParameterizedType;
import java.util.List;
public abstract class BaseServiceImpl<T> implements BaseService<T> {
private BaseDao<T> dao = dao();
protected BaseDao<T> dao() {
// ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
// Class beanCls = (Class) type.getActualTypeArguments()[0];
//
// return Strings.underlineCase(beanCls.getSimpleName());s
String name = getClass().getName();
name = name.replace(".service.",".dao.");
name = name.replace("ServiceImpl","DaoImpl");
try {
BaseDao<T> dao = (BaseDao<T>) Class.forName(name).newInstance();
return dao;
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 删除
*/
public boolean remove(Integer id) {
return dao.remove(id);
}
public boolean remove(List<Integer> ids) {
return dao.remove(ids);
}
/**
* 添加或更新
*/
public boolean save(T bean) {
return dao.save(bean);
}
/**
* 获取单个对象
*/
public T get(Integer id) {
return dao.get(id);
}
/**
* 获取多个对象
*/
public List<T> list() {
return dao.list();
}
/**
* 获取统计值
*/
public int count() {
return dao.count();
}
}
package com.xm.xr.service.impl;
import com.xm.xr.bean.Company;
import com.xm.xr.service.CompanyService;
public class CompanyServiceImpl extends BaseServiceImpl<Company> implements CompanyService {
}
package com.xm.xr.service.impl;
import com.xm.xr.bean.Education;
import com.xm.xr.service.EducationService;
public class EducationServiceImpl extends BaseServiceImpl<Education> implements EducationService {
// @Override
// protected BaseDao<Education> dao() {
// return new EducationDaoImpl();
// }
}
package com.xm.xr.service.impl;
import com.xm.xr.bean.Experience;
import com.xm.xr.service.ExperienceService;
public class ExperienceServiceImpl extends BaseServiceImpl<Experience> implements ExperienceService {
}
package com.xm.xr.service.impl;
import com.xm.xr.bean.Project;
import com.xm.xr.service.ProjectService;
public class ProjectServiceImpl extends BaseServiceImpl<Project> implements ProjectService {
}
package com.xm.xr.service.impl;
import com.xm.xr.bean.Skill;
import com.xm.xr.service.SkillService;
public class SkillServiceImpl extends BaseServiceImpl<Skill> implements SkillService {
// @Override
// protected BaseDao<Skill> dao() {
// return new SkillDaoImpl();
// }
}
package com.xm.xr.service.impl;
import com.xm.xr.bean.WebSite;
import com.xm.xr.service.WebsiteService;
public class WebsiteServiceImpl extends BaseServiceImpl<WebSite> implements WebsiteService {
// @Override
// protected BaseDao<WebSite> dao() {
// return new WebsiteDaoImpl();
// }
}
package com.xm.xr.servlet;
import com.xm.xr.bean.Award;
import com.xm.xr.bean.UploadParams;
import com.xm.xr.util.Uploads;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@WebServlet("/award/*")
public class AwardServlet extends BaseServlet {
public void admin(HttpServletRequest request,HttpServletResponse response) throws Exception {
List<Award> awards = service.list();
request.setAttribute("awards",awards);
forward(request,response,"admin/award.jsp");
}
public void save(HttpServletRequest request,HttpServletResponse response) throws Exception {
UploadParams uploadParams = Uploads.parseRequest(request);
Award obj = new Award();
BeanUtils.populate(obj,uploadParams.getParams());
String image = "";
image = Uploads.uploadImage(uploadParams.getFileParam("imageFile"),request,obj.getImage());
obj.setImage(image);
if (service.save(obj)) {
// 保存成功
redirect(request,response,"award/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
public void remove(HttpServletRequest request,HttpServletResponse response) throws Exception {
String[] idStrs = request.getParameterValues("id");
List<Integer> ids = new ArrayList<>();
for (String id : idStrs) {
ids.add(Integer.valueOf(id));
}
if (service.remove(ids)) {
// 保存成功
redirect(request,response,"award/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
}
package com.xm.xr.servlet;
import com.xm.xr.service.AwardService;
import com.xm.xr.service.BaseService;
import com.xm.xr.service.impl.AwardServiceImpl;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Date;
@WebServlet(name = "BaseServlet")
public class BaseServlet<T> extends HttpServlet {
protected BaseService<T> service = newService();
protected BaseService<T> newService() {
// com.mj.xr.servlet.WebsiteServlet
// com.mj.xr.service.impl.WebsiteServiceImpl
try {
String clsName = getClass().getName()
.replace(".servlet.", ".service.impl.")
.replace("Servlet", "ServiceImpl");
return (BaseService<T>) Class.forName(clsName).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
static {
// null参数表示允许值为null
DateConverter dateConverter = new DateConverter(null);
dateConverter.setPatterns(new String[]{"yyyy-MM-dd"});
ConvertUtils.register(dateConverter, Date.class);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 设置编码
request.setCharacterEncoding("UTF-8");
// 利用方法名调用方法
String uri = request.getRequestURI();
String[] cmps = uri.split("/");
String methodName = cmps[cmps.length - 1];
Method method = getClass()
.getMethod(methodName,
HttpServletRequest.class,
HttpServletResponse.class);
method.invoke(this, request, response);
} catch (Exception e) {
e.printStackTrace();
Throwable cause = e;
while (cause.getCause() != null) {
cause = cause.getCause();
}
request.setAttribute("error",cause.getClass().getName() + ":" + cause.getMessage());
request.getRequestDispatcher("/WEB-INF/page/error.jsp").forward(request,response);
}
}
protected void redirect(HttpServletRequest request, HttpServletResponse response, String path) throws IOException {
response.sendRedirect(request.getContextPath() + "/" + path);
}
protected void forward(HttpServletRequest request, HttpServletResponse response, String path)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/page/" + path).forward(request, response);
}
protected void forwardError(HttpServletRequest request, HttpServletResponse response, String error)
throws ServletException, IOException {
request.setAttribute("error", error);
forward(request, response, "error.jsp");
}
}
package com.xm.xr.servlet;
import com.xm.xr.bean.Award;
import com.xm.xr.bean.Company;
import com.xm.xr.bean.UploadParams;
import com.xm.xr.util.Uploads;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/company/*")
public class CompanyServlet extends BaseServlet<Company> {
public void admin(HttpServletRequest request, HttpServletResponse response) throws Exception {
List<Company> companys = service.list();
request.setAttribute("companys",companys);
forward(request,response,"admin/company.jsp");
}
public void save(HttpServletRequest request, HttpServletResponse response) throws Exception {
UploadParams uploadParams = Uploads.parseRequest(request);
Company obj = new Company();
BeanUtils.populate(obj,uploadParams.getParams());
String logo = "";
logo = Uploads.uploadImage(uploadParams.getFileParam("imageFile"),request,obj.getLogo());
obj.setLogo(logo);
if (service.save(obj)) {
// 保存成功
redirect(request,response,"company/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
public void remove(HttpServletRequest request,HttpServletResponse response) throws Exception {
String[] idStrs = request.getParameterValues("id");
List<Integer> ids = new ArrayList<>();
for (String id : idStrs) {
ids.add(Integer.valueOf(id));
}
if (service.remove(ids)) {
// 保存成功
redirect(request,response,"company/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
}
package com.xm.xr.servlet;
import com.xm.xr.bean.Education;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/education/*")
public class EducationServlet extends BaseServlet {
// private EducationService service = new EducationServiceImpl();
public void admin(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setAttribute("educations",service.list());
forward(request,response,"admin/education.jsp");
}
public void save(HttpServletRequest request, HttpServletResponse response) throws Exception {
Education education = new Education();
System.out.println(request.getParameter("beginDay"));
System.out.println(request.getParameter("endDay"));
BeanUtils.populate(education,request.getParameterMap());
if (service.save(education)) {
// 保存成功
redirect(request,response,"education/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
public void remove(HttpServletRequest request, HttpServletResponse response) throws Exception {
String[] idStrs = request.getParameterValues("id");
List<Integer> ids = new ArrayList<>();
for (String id : idStrs) {
ids.add(Integer.valueOf(id));
}
if (service.remove(ids)) {
// 保存成功
redirect(request,response,"education/admin");
} else {
// 保存失败
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
}
package com.xm.xr.servlet;
import com.xm.xr.bean.Company;
import com.xm.xr.bean.Education;
import com.xm.xr.bean.Experience;
import com.xm.xr.service.CompanyService;
import com.xm.xr.service.impl.CompanyServiceImpl;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/experience/*")
public class ExperienceServlet extends BaseServlet<Experience> {
private CompanyServiceImpl companyService = new CompanyServiceImpl();
public void admin(HttpServletRequest request, HttpServletResponse response) throws Exception {
List<Experience> experiences = service.list();
List<Company> companies = companyService.list();
request.setAttribute("experiences",experiences);
request.setAttribute("companies",companies);
forward(request,response,"admin/experience.jsp");
}
public void save(HttpServletRequest request, HttpServletResponse response) throws Exception {
for (String key : request.getParameterMap().keySet()) {
System.out.println(key);
System.out.println(request.getParameter(key));
}
Experience experience = new Experience();
BeanUtils.populate(experience,request.getParameterMap());
Company company = new Company();
Integer id = Integer.valueOf(request.getParameter("companyId"));
company.setId(id);
experience.setCompany(company);
if (service.save(experience)) {
// 保存成功
redirect(request,response,"experience/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
public void remove(HttpServletRequest request, HttpServletResponse response) throws Exception {
String[] idStrs = request.getParameterValues("id");
List<Integer> ids = new ArrayList<>();
for (String id : idStrs) {
ids.add(Integer.valueOf(id));
}
if (service.remove(ids)) {
// 保存成功
redirect(request,response,"experience/admin");
} else {
// 保存失败
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
}
package com.xm.xr.servlet;
import com.xm.xr.bean.Company;
import com.xm.xr.bean.Project;
import com.xm.xr.bean.Project;
import com.xm.xr.bean.UploadParams;
import com.xm.xr.service.impl.CompanyServiceImpl;
import com.xm.xr.util.Uploads;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.fileupload.FileItem;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/project/*")
public class ProjectServlet extends BaseServlet<Project> {
private CompanyServiceImpl companyService = new CompanyServiceImpl();
public void admin(HttpServletRequest request, HttpServletResponse response) throws Exception {
List<Project> Projects = service.list();
List<Company> companies = companyService.list();
request.setAttribute("Projects",Projects);
request.setAttribute("companies",companies);
forward(request,response,"admin/project.jsp");
}
public void save(HttpServletRequest request, HttpServletResponse response) throws Exception {
UploadParams uploadParams = Uploads.parseRequest(request);
Project project = new Project();
BeanUtils.populate(project, uploadParams.getParams());
// 对公司信息作特殊处理
Company company = new Company();
company.setId(Integer.valueOf(uploadParams.getParam("companyId").toString()));
project.setCompany(company);
// 项目图片
FileItem item = uploadParams.getFileParam("imageFile");
project.setImage(Uploads.uploadImage(item, request, project.getImage()));
if (service.save(project)) { // 保存成功
redirect(request, response, "project/admin");
} else {
forwardError(request, response, "项目经验保存失败");
}
}
public void remove(HttpServletRequest request, HttpServletResponse response) throws Exception {
String[] idStrs = request.getParameterValues("id");
List<Integer> ids = new ArrayList<>();
for (String idStr : idStrs) {
ids.add(Integer.valueOf(idStr));
}
// 删除
if (service.remove(ids)) {
redirect(request, response, "project/admin");
} else {
forwardError(request, response, "项目经验删除失败");
}
}
}
package com.xm.xr.servlet;
import com.xm.xr.bean.Skill;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/skill/*")
public class SkillServlet extends BaseServlet {
public void admin(HttpServletRequest request,HttpServletResponse response) throws Exception {
List<Skill> skills = service.list();
request.setAttribute("skills",skills);
forward(request,response,"admin/skill.jsp");
}
public void save(HttpServletRequest request,HttpServletResponse response) throws Exception {
Skill skill = new Skill();
BeanUtils.populate(skill,request.getParameterMap());
if (service.save(skill)) {
// 保存成功
redirect(request,response,"skill/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
public void remove(HttpServletRequest request,HttpServletResponse response) throws Exception {
String[] idStrs = request.getParameterValues("id");
List<Integer> ids = new ArrayList<>();
for (String id : idStrs) {
ids.add(Integer.valueOf(id));
}
if (service.remove(ids)) {
// 保存成功
redirect(request,response,"skill/admin");
} else {
// 保存失败
forwardError(request,response,"教育信息保存失败");
}
}
}
package com.xm.xr.servlet;
import com.xm.xr.bean.WebSite;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@WebServlet("/website/*")
public class WebsiteServlet extends BaseServlet {
// public WebsiteService service = new WebsiteServiceImpl();
public void admin(HttpServletRequest request,HttpServletResponse response) throws Exception {
List<WebSite> webSites = service.list();
WebSite webSite = new WebSite();
if (webSites != null && !webSites.isEmpty()) {
webSite = webSites.get(0);
}
request.setAttribute("webSite",webSite);
// 转发
request.getRequestDispatcher("/WEB-INF/page/admin/website.jsp").forward(request,response);
}
public void save(HttpServletRequest request,HttpServletResponse response) throws Exception {
WebSite webSite = new WebSite();
BeanUtils.populate(webSite,request.getParameterMap());
if (service.save(webSite)) {
// 保存成功
response.sendRedirect(request.getContextPath() + "/website/admin");
} else {
response.sendRedirect(request.getContextPath() + "/WEB-INF/page/error.jsp");
// 保存失败
}
}
}
package com.xm.xr.util;
public class Strings {
/**
* @param str 可能是小驼峰(myAge)、大驼峰(MyAge)
* @return my_age
*/
public static String underlineCase(String str) {
if (str == null) return null;
int len = str.length();
if (len == 0) return str;
StringBuilder sb = new StringBuilder();
sb.append(Character.toLowerCase(str.charAt(0)));
for (int i = 1; i < len; i++) {
char c = str.charAt(i);
if (Character.isUpperCase(c)) {
sb.append("_");
sb.append(Character.toLowerCase(c));
} else {
sb.append(c);
}
}
return sb.toString();
}
}
package com.xm.xr.util;
import com.xm.xr.bean.UploadParams;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class Uploads {
private static final String BASE_DIR = "upload";
private static final String IMG_DIR = "img";
/**
* 图片上传
* @param item 文件参数
* @param request 请求
* @param oldImage 以前的图片路径
* @return 存储到数据库的图片路径
* @throws Exception
*/
public static String uploadImage(FileItem item, HttpServletRequest request, String oldImage) throws Exception {
// 如果oldImage是空字符串,就设置为null
if (oldImage != null && oldImage.length() == 0) {
oldImage = null;
}
if (item == null) return oldImage;
InputStream is = item.getInputStream();
if (is.available() == 0) return oldImage;
ServletContext ctx = request.getServletContext();
String filename = UUID.randomUUID() + "." + FilenameUtils.getExtension(item.getName());
String image = BASE_DIR + "/" + IMG_DIR + "/" + filename;
String filepath = ctx.getRealPath(image);
FileUtils.copyInputStreamToFile(item.getInputStream(), new File(filepath));
// 删除旧的文件
if (oldImage != null) {
// 如果oldImage是空串,那么就会把整个web项目的文件夹给删掉
FileUtils.deleteQuietly(new File(ctx.getRealPath(oldImage)));
}
return image;
}
public static UploadParams parseRequest(HttpServletRequest request) throws Exception {
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setHeaderEncoding("UTF-8");
// 一个FileItem就代表一个请求参数(文件参数、非文件参数)
List<FileItem> items = upload.parseRequest(request);
// 非文件参数
Map<String, Object> params = new HashMap<>();
// 文件参数
Map<String, FileItem> fileParams = new HashMap<>();
// 遍历请求参数
for (FileItem item : items) {
String fieldName = item.getFieldName();
if (item.isFormField()) { // 非文件参数
params.put(fieldName, item.getString("UTF-8"));
} else { // 文件参数
fileParams.put(fieldName, item);
}
}
UploadParams uploadParams = new UploadParams();
uploadParams.setParams(params);
uploadParams.setFileParams(fileParams);
return uploadParams;
}
}
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/xr
username=root
password=show8864
initialSize=5
maxActive=10
maxWait=5000
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>小码哥教育-404</title>
<%@ include file="admin/common/head.jsp" %>
</head>
<body class="four-zero-four">
<div class="four-zero-four-container">
<div class="error-code">404</div>
<div class="error-message">喔豁,这个页面被外星人抓走了...</div>
<div class="button-place">
<%-- <a href="#" class="btn btn-default btn-lg waves-effect">回到首页</a>--%>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>小码哥教育-500</title>
<%@ include file="admin/common/head.jsp" %>
</head>
<body class="five-zero-zero">
<div class="five-zero-zero-container">
<div class="error-code">500</div>
<div class="error-message">服务器正忙,请稍后再试...</div>
<div class="button-place">
<a href="#" class="btn btn-default btn-lg waves-effect">回到首页</a>
</div>
</div>
</body>
</html>
\ No newline at end of file
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<script src="${ctx}/asset/plugin/jquery/jquery.min.js"></script>
<script src="${ctx}/asset/plugin/bootstrap/bootstrap.min.js"></script>
<script src="${ctx}/asset/plugin/bootstrap-fileinput/bootstrap-fileinput.js"></script>
<script src="${ctx}/asset/plugin/bootstrap-notify/bootstrap-notify.min.js"></script>
<script src="${ctx}/asset/plugin/node-waves/waves.js"></script>
<script src="${ctx}/asset/plugin/jquery-validation/jquery.validate.js"></script>
<script src="${ctx}/asset/plugin/jquery-validation/messages_zh.js"></script>
<script src="${ctx}/asset/plugin/sweetalert/sweetalert.min.js"></script>
<!-- Custom Js -->
<script src="${ctx}/asset/admin/js/default.js"></script>
<script src="${ctx}/asset/admin/js/main.js"></script>
\ No newline at end of file
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% request.setAttribute("ctx", request.getContextPath()); %>
<meta charset="UTF-8">
<link rel="icon" href="${ctx}/asset/admin/img/favicon.png" type="image/x-icon">
<link href="${ctx}/asset/plugin/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="${ctx}/asset/plugin/bootstrap-fileinput/bootstrap-fileinput.css" rel="stylesheet">
<link href="${ctx}/asset/plugin/node-waves/waves.css" rel="stylesheet">
<link href="${ctx}/asset/plugin/animate-css/animate.min.css" rel="stylesheet">
<link href="${ctx}/asset/admin/css/material-icons.css" rel="stylesheet">
<link href="${ctx}/asset/admin/css/style.min.css" rel="stylesheet">
<link href="${ctx}/asset/admin/css/theme-blue.min.css" rel="stylesheet">
<link href="${ctx}/asset/admin/css/main.css" rel="stylesheet">
\ No newline at end of file
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- Overlay For Sidebars -->
<div class="overlay"></div>
<!-- #END# Overlay For Sidebars -->
<!-- Search Bar -->
<div class="search-bar">
<div class="search-icon">
<i class="material-icons">search</i>
</div>
<input type="text" placeholder="输入开始搜索">
<div class="close-search">
<i class="material-icons">close</i>
</div>
</div>
<!-- #END# Search Bar -->
<!-- Top Bar -->
<nav class="navbar">
<div class="container-fluid">
<div class="navbar-header">
<a href="javascript:void(0);" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false"></a>
<a href="javascript:void(0);" class="bars"></a>
<a class="navbar-brand" href="#">小码哥简历管理</a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<!-- Call Search -->
<li><a href="javascript:void(0);" class="js-search" data-close="true"><i class="material-icons">search</i></a></li>
<!-- #END# Tasks -->
<li><a href="javascript:void(0);" data-close="true"><i class="material-icons">more_vert</i></a></li>
</ul>
</div>
</div>
</nav>
<!-- #Top Bar -->
<section>
<!-- Left Sidebar -->
<aside id="leftsidebar" class="sidebar">
<!-- User Info -->
<div class="user-info">
<div class="image">
<img src="${ctx}/asset/admin/img/avatar.png" alt="User">
</div>
<div class="info-container">
<div class="name">M了个J</div>
<div class="email">小码哥 | 讲师</div>
<div class="btn-group user-helper-dropdown">
<i class="material-icons" data-toggle="dropdown">keyboard_arrow_down</i>
<ul class="dropdown-menu pull-right">
<li><a href="../front/user.html"><i class="material-icons">person</i>个人信息</a></li>
<li role="separator" class="divider"></li>
<li><a href="../login.html"><i class="material-icons">input</i>退出登录</a></li>
</ul>
</div>
</div>
</div>
<!-- #User Info -->
<!-- Menu -->
<div class="menu">
<ul class="list">
<li class="user">
<a href="../user.html">
<i class="material-icons">person</i>
<span>个人信息</span>
</a>
</li>
<li class="skill">
<a href="${ctx}/skill/admin">
<i class="material-icons">accessibility</i>
<span>专业技能</span>
</a>
</li>
<li class="password">
<a href="../password.html">
<i class="material-icons">lock</i>
<span>修改密码</span>
</a>
</li>
<li class="education">
<a href="${ctx}/education/admin">
<i class="material-icons">school</i>
<span>教育经验</span>
</a>
</li>
<li class="company">
<a href="${ctx}/company/admin">
<i class="material-icons">domain</i>
<span>公司信息</span>
</a>
</li>
<li class="experience">
<a href="${ctx}/experience/admin">
<i class="material-icons">work</i>
<span>工作经验</span>
</a>
</li>
<li class="project">
<a href="${ctx}/project/admin">
<i class="material-icons">build</i>
<span>项目经验</span>
</a>
</li>
<li class="award">
<a href="${ctx}/award/admin">
<i class="material-icons">plus_one</i>
<span>获奖成就</span>
</a>
</li>
<li class="contact">
<a href="../contact.html">
<i class="material-icons">comment</i>
<span>留言信息</span>
</a>
</li>
<li class="website">
<a href="${ctx}/website/admin">
<i class="material-icons">language</i>
<span>网站信息</span>
</a>
</li>
</ul>
</div>
<!-- #Menu -->
</aside>
<!-- #END# Left Sidebar -->
</section>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>小码哥简历管理-网站信息</title>
<link rel="icon" href="../../../asset/admin/img/favicon.png" type="image/x-icon">
<link href="../../../asset/plugin/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="../../../asset/plugin/bootstrap-fileinput/bootstrap-fileinput.css" rel="stylesheet">
<link href="../../../asset/plugin/node-waves/waves.css" rel="stylesheet">
<link href="../../../asset/plugin/animate-css/animate.min.css" rel="stylesheet">
<link href="../../../asset/admin/css/material-icons.css" rel="stylesheet">
<link href="../../../asset/admin/css/style.min.css" rel="stylesheet">
<link href="../../../asset/admin/css/theme-blue.min.css" rel="stylesheet">
<link href="../../../asset/admin/css/main.css" rel="stylesheet">
</head>
<body class="theme-blue">
<!-- Overlay For Sidebars -->
<div class="overlay"></div>
<!-- #END# Overlay For Sidebars -->
<!-- Search Bar -->
<div class="search-bar">
<div class="search-icon">
<i class="material-icons">search</i>
</div>
<input type="text" placeholder="输入开始搜索">
<div class="close-search">
<i class="material-icons">close</i>
</div>
</div>
<!-- #END# Search Bar -->
<!-- Top Bar -->
<nav class="navbar">
<div class="container-fluid">
<div class="navbar-header">
<a href="javascript:void(0);" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false"></a>
<a href="javascript:void(0);" class="bars"></a>
<a class="navbar-brand" href="#">小码哥简历管理</a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<!-- Call Search -->
<li><a href="javascript:void(0);" class="js-search" data-close="true"><i class="material-icons">search</i></a></li>
<!-- #END# Tasks -->
<li><a href="javascript:void(0);" data-close="true"><i class="material-icons">more_vert</i></a></li>
</ul>
</div>
</div>
</nav>
<!-- #Top Bar -->
<section>
<!-- Left Sidebar -->
<aside id="leftsidebar" class="sidebar">
<!-- User Info -->
<div class="user-info">
<div class="image">
<img src="../../../asset/admin/img/avatar.png" alt="User">
</div>
<div class="info-container">
<div class="name">M了个J</div>
<div class="email">小码哥 | 讲师</div>
<div class="btn-group user-helper-dropdown">
<i class="material-icons" data-toggle="dropdown">keyboard_arrow_down</i>
<ul class="dropdown-menu pull-right">
<li><a href="../front/user.html"><i class="material-icons">person</i>个人信息</a></li>
<li role="separator" class="divider"></li>
<li><a href="../login.html"><i class="material-icons">input</i>退出登录</a></li>
</ul>
</div>
</div>
</div>
<!-- #User Info -->
<!-- Menu -->
<div class="menu">
<ul class="list">
<li>
<a href="user.html">
<i class="material-icons">person</i>
<span>个人信息</span>
</a>
</li>
<li>
<a href="skill.html">
<i class="material-icons">accessibility</i>
<span>专业技能</span>
</a>
</li>
<li>
<a href="password.html">
<i class="material-icons">lock</i>
<span>修改密码</span>
</a>
</li>
<li>
<a href="education.html">
<i class="material-icons">school</i>
<span>教育经验</span>
</a>
</li>
<li>
<a href="company.html">
<i class="material-icons">domain</i>
<span>公司信息</span>
</a>
</li>
<li>
<a href="experience.html">
<i class="material-icons">work</i>
<span>工作经验</span>
</a>
</li>
<li>
<a href="project.html">
<i class="material-icons">build</i>
<span>项目经验</span>
</a>
</li>
<li>
<a href="award.html">
<i class="material-icons">plus_one</i>
<span>获奖成就</span>
</a>
</li>
<li>
<a href="contact.html">
<i class="material-icons">comment</i>
<span>留言信息</span>
</a>
</li>
<li class="active">
<a href="website.html">
<i class="material-icons">language</i>
<span>网站信息</span>
</a>
</li>
</ul>
</div>
<!-- #Menu -->
</aside>
<!-- #END# Left Sidebar -->
</section>
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="card">
<div class="header">
<h2>网站信息</h2>
</div>
<div class="body">
<form class="form-validation" method="post">
<div class="row">
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-3 form-control-label">
<label for="footer">底部</label>
</div>
<div class="col-lg-10 col-md-10 col-sm-9 col-xs-9">
<div class="form-group">
<div class="form-line">
<textarea name="footer" maxlength="1000"
id="footer" cols="30" rows="5"
class="form-control no-resize"
placeholder="底部"></textarea>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-offset-2 col-md-offset-2 col-sm-offset-3 col-xs-offset-3">
<button class="btn btn-primary waves-effect m-l-15" type="submit">保存</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<script src="../../../asset/plugin/jquery/jquery.min.js"></script>
<script src="../../../asset/plugin/bootstrap/bootstrap.min.js"></script>
<script src="../../../asset/plugin/bootstrap-fileinput/bootstrap-fileinput.js"></script>
<script src="../../../asset/plugin/bootstrap-notify/bootstrap-notify.min.js"></script>
<script src="../../../asset/plugin/node-waves/waves.js"></script>
<script src="../../../asset/plugin/jquery-validation/jquery.validate.js"></script>
<script src="../../../asset/plugin/jquery-validation/messages_zh.js"></script>
<script src="../../../asset/plugin/sweetalert/sweetalert.min.js"></script>
<!-- Custom Js -->
<script src="../../../asset/admin/js/default.js"></script>
<script src="../../../asset/admin/js/main.js"></script>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% request.setAttribute("ctx",request.getContextPath());%>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>小码哥简历管理-网站信息</title>
<%@ include file="common/head.jsp" %>
</head>
<body class="theme-blue">
<%@ include file="common/middle.jsp" %>
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="card">
<div class="header">
<h2>网站信息</h2>
</div>
<div class="body">
<form class="form-validation" method="post" action="${ctx}/website/save">
<div class="row">
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-3 form-control-label">
<label for="footer">底部</label>
</div>
<div class="col-lg-10 col-md-10 col-sm-9 col-xs-9">
<div class="form-group">
<div class="form-line">
<input type="hidden" name="id" value="${webSite.id}">
<textarea name="footer" maxlength="1000"
id="footer" cols="30" rows="5"
class="form-control no-resize"
placeholder="底部">${webSite.footer}</textarea>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-offset-2 col-md-offset-2 col-sm-offset-3 col-xs-offset-3">
<button class="btn btn-primary waves-effect m-l-15" type="submit">保存</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<%@ include file="common/foot.jsp" %>
<script>
$('.menu .list .website').addClass('active')
</script>
</body>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% request.setAttribute("ctx",request.getContextPath());%>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>小码哥教育-Error</title>
<%@ include file="admin/common/head.jsp" %>
</head>
<body class="five-zero-zero">
<div class="five-zero-zero-container">
<div class="error-title">喔豁,出错了</div>
<div class="error-msg">${error}</div>
<div class="button-place">
<a href="#" class="btn btn-default btn-lg waves-effect">回到首页</a>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en" class="crt crt-nav-on crt-nav-type1 crt-main-nav-on crt-sidebar-on crt-layers-2">
<head>
<meta charset="utf-8">
<title>M了个J-教育经验</title>
<link href="../../../asset/front/css/icmoon.css" rel="stylesheet"><!-- Styles -->
<link href="../../../asset/front/css/plugins.min.css" rel="stylesheet">
<link href="../../../asset/front/css/style.min.css" rel="stylesheet"><!-- Modernizer -->
<link href="../../../asset/front/css/main.css" rel="stylesheet"><!-- Modernizer -->
</head>
<body class="">
<div class="crt-wrapper">
<header id="crt-header">
<nav id="crt-nav-sm" class="crt-nav hidden-lg hidden-md">
<ul class="clear-list">
<li>
<a href="user.html">
<img class="avatar avatar-42" src="../../../asset/front/img/avatar/avatar-42x42.png" alt="">
</a>
</li>
<li><a href="education.html"><span
class="crt-icon crt-icon-book"></span></a></li>
<li><a href="experience.html"><span
class="crt-icon crt-icon-experience"></span></a></li>
<li><a href="project.html"><span
class="crt-icon crt-icon-wrench"></span></a></li>
<li><a href="contact.html"><span
class="crt-icon crt-icon-contact"></span></a></li>
<li><a href="../admin/user.html"><span
class="crt-icon crt-icon-key"></span></a></li>
</ul>
</nav><!-- #crt-nav-sm --></header><!-- #crt-header -->
<div id="crt-container" class="crt-container">
<div id="crt-nav-wrap" class="hidden-sm hidden-xs">
<div id="crt-nav-inner">
<div class="crt-nav-cont">
<div id="crt-nav-scroll">
<nav id="crt-nav" class="crt-nav">
<ul class="clear-list">
<li>
<a href="user.html" data-tooltip="首页">
<img class="avatar avatar-42" src="../../../asset/front/img/avatar/avatar-42x42.png" alt="">
</a>
</li>
<li><a href="education.html" data-tooltip="教育经验"><span
class="crt-icon crt-icon-book"></span></a></li>
<li><a href="experience.html" data-tooltip="工作经验"><span
class="crt-icon crt-icon-experience"></span></a></li>
<li><a href="project.html" data-tooltip="项目经验"><span
class="crt-icon crt-icon-wrench"></span></a></li>
<li><a href="contact.html" data-tooltip="联系我吧"><span
class="crt-icon crt-icon-contact"></span></a></li>
<li><a href="../admin/user.html" data-tooltip="后台管理"><span
class="crt-icon crt-icon-key"></span></a></li>
</ul>
</nav>
</div>
<div id="crt-nav-tools" class="hidden"><span class="crt-icon crt-icon-dots-three-horizontal"></span>
<button id="crt-nav-arrow" class="clear-btn"><span
class="crt-icon crt-icon-chevron-thin-down"></span></button>
</div>
</div>
<div class="crt-nav-btm"></div>
</div>
</div><!-- .crt-nav-wrap -->
<div class="crt-container-sm">
<div class="crt-paper-layers">
<div class="crt-paper clear-mrg">
<div class="crt-paper-cont paper-padd clear-mrg">
<div class="padd-box">
<h2 class="title-lg text-upper">联系我吧</h2>
<div class="padd-box-xs">
<header class="contact-head">
<h3 class="title text-upper">可以随时联系我!</h3>
</header>
</div>
<div class="padd-box-sm">
<form action="#" method="post" class="contact-form">
<div class="form-group">
<label class="form-label" for="name">您的姓名</label>
<div class="form-item-wrap">
<input id="name" name="name" maxlength="20" class="form-item" type="text" required>
</div>
</div>
<div class="form-group">
<label class="form-label" for="email">您的邮箱</label>
<div class="form-item-wrap">
<input id="email" name="email" maxlength="50" class="form-item" type="email" required>
</div>
</div>
<div class="form-group">
<label class="form-label" for="subject">您的主题</label>
<div class="form-item-wrap">
<input id="subject" name="subject" class="form-item" type="text">
</div>
</div>
<div class="form-group"><label class="form-label" for="comment">您的留言</label>
<div class="form-item-wrap">
<textarea id="comment" name="comment" class="form-item" required></textarea>
</div>
</div>
<div class="form-group">
<label class="form-label" for="captcha">验证码</label>
<div class="form-item-wrap">
<input id="captcha" name="captcha" class="form-item" type="text" required>
<img src="../../../asset/img/captcha.png" alt="">
</div>
</div>
<div class="form-submit form-item-wrap">
<input class="btn btn-primary btn-lg" type="submit" value="发布您的留言">
</div>
</form>
</div>
</div>
</div>
<!-- .crt-paper -->
</div><!-- .crt-paper-layers -->
</div><!-- .crt-container-sm -->
</div>
<!-- .crt-container -->
<footer id="crt-footer" class="crt-container-lg">
<div class="crt-container">
<div class="crt-container-sm clear-mrg text-center"><p>M了个J &copy; All Rights Reserved 2020</p></div>
</div><!-- .crt-container -->
</footer><!-- #crt-footer -->
<svg id="crt-bg-shape-1" class="hidden-sm hidden-xs" height="519" width="758">
<polygon class="pol" points="0,455,693,352,173,0,92,0,0,71"/>
</svg>
<svg id="crt-bg-shape-2" class="hidden-sm hidden-xs" height="536" width="633">
<polygon points="0,0,633,0,633,536"/>
</svg>
</div><!-- .crt-wrapper --><!-- Scripts -->
<script src="../../../asset/front/js/modernizr-3.3.1.min.js"></script>
<script src="../../../asset/plugin/jquery/jquery.min.js"></script>
<script src="../../../asset/front/js/plugins.min.js"></script>
<script src="../../../asset/front/js/theme.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en" class="crt crt-nav-on crt-nav-type1 crt-main-nav-on crt-sidebar-on crt-layers-2">
<head>
<meta charset="utf-8">
<title>M了个J-教育经验</title>
<link href="../../../asset/front/css/icmoon.css" rel="stylesheet"><!-- Styles -->
<link href="../../../asset/front/css/plugins.min.css" rel="stylesheet">
<link href="../../../asset/front/css/style.min.css" rel="stylesheet"><!-- Modernizer -->
<link href="../../../asset/front/css/main.css" rel="stylesheet"><!-- Modernizer -->
</head>
<body class="">
<div class="crt-wrapper">
<header id="crt-header">
<nav id="crt-nav-sm" class="crt-nav hidden-lg hidden-md">
<ul class="clear-list">
<li>
<a href="user.html">
<img class="avatar avatar-42" src="../../../asset/front/img/avatar/avatar-42x42.png" alt="">
</a>
</li>
<li><a href="education.html"><span
class="crt-icon crt-icon-book"></span></a></li>
<li><a href="experience.html"><span
class="crt-icon crt-icon-experience"></span></a></li>
<li><a href="project.html"><span
class="crt-icon crt-icon-wrench"></span></a></li>
<li><a href="contact.html"><span
class="crt-icon crt-icon-contact"></span></a></li>
<li><a href="../admin/user.html"><span
class="crt-icon crt-icon-key"></span></a></li>
</ul>
</nav><!-- #crt-nav-sm --></header><!-- #crt-header -->
<div id="crt-container" class="crt-container">
<div id="crt-nav-wrap" class="hidden-sm hidden-xs">
<div id="crt-nav-inner">
<div class="crt-nav-cont">
<div id="crt-nav-scroll">
<nav id="crt-nav" class="crt-nav">
<ul class="clear-list">
<li>
<a href="user.html" data-tooltip="首页">
<img class="avatar avatar-42" src="../../../asset/front/img/avatar/avatar-42x42.png" alt="">
</a>
</li>
<li><a href="education.html" data-tooltip="教育经验"><span
class="crt-icon crt-icon-book"></span></a></li>
<li><a href="experience.html" data-tooltip="工作经验"><span
class="crt-icon crt-icon-experience"></span></a></li>
<li><a href="project.html" data-tooltip="项目经验"><span
class="crt-icon crt-icon-wrench"></span></a></li>
<li><a href="contact.html" data-tooltip="联系我吧"><span
class="crt-icon crt-icon-contact"></span></a></li>
<li><a href="../admin/user.html" data-tooltip="后台管理"><span
class="crt-icon crt-icon-key"></span></a></li>
</ul>
</nav>
</div>
<div id="crt-nav-tools" class="hidden"><span class="crt-icon crt-icon-dots-three-horizontal"></span>
<button id="crt-nav-arrow" class="clear-btn"><span
class="crt-icon crt-icon-chevron-thin-down"></span></button>
</div>
</div>
<div class="crt-nav-btm"></div>
</div>
</div><!-- .crt-nav-wrap -->
<div class="crt-container-sm">
<div class="crt-paper-layers">
<div class="crt-paper clear-mrg">
<div class="crt-paper-cont paper-padd clear-mrg">
<h2 class="title-lg text-upper padd-box">教育经验</h2>
<div class="education">
<div class="education-box">
<time class="education-date">
<span>
<strong class="text-upper">2014</strong>/07 -
<strong>2016</strong>/07
</span>
</time>
<h3>全日制本科</h3>
<span class="education-company">布鲁斯特大学</span>
<p>天天翘课打电动</p>
</div>
<div class="education-box">
<time class="education-date">
<span>
<strong class="text-upper">2014</strong>/07 -
<strong>2016</strong>/07
</span>
</time>
<h3>硕士研究生</h3>
<span class="education-company">社会大学</span>
<p>琢磨如何赚钱</p>
</div>
<div class="education-box">
<time class="education-date">
<span>
<strong class="text-upper">2014</strong>/07 -
<strong>2016</strong>/07
</span>
</time>
<h3>博士生</h3>
<span class="education-company">纽伊斯特大学</span>
<p>学习如何用电脑控制挖掘机炒菜</p>
</div>
</div>
</div>
</div>
<!-- .crt-paper -->
</div><!-- .crt-paper-layers -->
</div><!-- .crt-container-sm -->
</div>
<!-- .crt-container -->
<footer id="crt-footer" class="crt-container-lg">
<div class="crt-container">
<div class="crt-container-sm clear-mrg text-center"><p>M了个J &copy; All Rights Reserved 2020</p></div>
</div><!-- .crt-container -->
</footer><!-- #crt-footer -->
<svg id="crt-bg-shape-1" class="hidden-sm hidden-xs" height="519" width="758">
<polygon class="pol" points="0,455,693,352,173,0,92,0,0,71"/>
</svg>
<svg id="crt-bg-shape-2" class="hidden-sm hidden-xs" height="536" width="633">
<polygon points="0,0,633,0,633,536"/>
</svg>
</div><!-- .crt-wrapper --><!-- Scripts -->
<script src="../../../asset/front/js/modernizr-3.3.1.min.js"></script>
<script src="../../../asset/plugin/jquery/jquery.min.js"></script>
<script src="../../../asset/front/js/plugins.min.js"></script>
<script src="../../../asset/front/js/theme.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en" class="crt crt-nav-on crt-nav-type1 crt-main-nav-on crt-sidebar-on crt-layers-2">
<head>
<meta charset="utf-8">
<title>M了个J-工作经验</title>
<link href="../../../asset/front/css/icmoon.css" rel="stylesheet"><!-- Styles -->
<link href="../../../asset/front/css/plugins.min.css" rel="stylesheet">
<link href="../../../asset/front/css/style.min.css" rel="stylesheet"><!-- Modernizer -->
<link href="../../../asset/front/css/main.css" rel="stylesheet"><!-- Modernizer -->
</head>
<body class="">
<div class="crt-wrapper">
<header id="crt-header">
<nav id="crt-nav-sm" class="crt-nav hidden-lg hidden-md">
<ul class="clear-list">
<li>
<a href="user.html">
<img class="avatar avatar-42" src="../../../asset/front/img/avatar/avatar-42x42.png" alt="">
</a>
</li>
<li><a href="education.html"><span
class="crt-icon crt-icon-book"></span></a></li>
<li><a href="experience.html"><span
class="crt-icon crt-icon-experience"></span></a></li>
<li><a href="project.html"><span
class="crt-icon crt-icon-wrench"></span></a></li>
<li><a href="contact.html"><span
class="crt-icon crt-icon-contact"></span></a></li>
<li><a href="../admin/user.html"><span
class="crt-icon crt-icon-key"></span></a></li>
</ul>
</nav><!-- #crt-nav-sm --></header><!-- #crt-header -->
<div id="crt-container" class="crt-container">
<div id="crt-nav-wrap" class="hidden-sm hidden-xs">
<div id="crt-nav-inner">
<div class="crt-nav-cont">
<div id="crt-nav-scroll">
<nav id="crt-nav" class="crt-nav">
<ul class="clear-list">
<li>
<a href="user.html" data-tooltip="首页">
<img class="avatar avatar-42" src="../../../asset/front/img/avatar/avatar-42x42.png" alt="">
</a>
</li>
<li><a href="education.html" data-tooltip="教育经验"><span
class="crt-icon crt-icon-book"></span></a></li>
<li><a href="experience.html" data-tooltip="工作经验"><span
class="crt-icon crt-icon-experience"></span></a></li>
<li><a href="project.html" data-tooltip="项目经验"><span
class="crt-icon crt-icon-wrench"></span></a></li>
<li><a href="contact.html" data-tooltip="联系我吧"><span
class="crt-icon crt-icon-contact"></span></a></li>
<li><a href="../admin/user.html" data-tooltip="后台管理"><span
class="crt-icon crt-icon-key"></span></a></li>
</ul>
</nav>
</div>
<div id="crt-nav-tools" class="hidden"><span class="crt-icon crt-icon-dots-three-horizontal"></span>
<button id="crt-nav-arrow" class="clear-btn"><span
class="crt-icon crt-icon-chevron-thin-down"></span></button>
</div>
</div>
<div class="crt-nav-btm"></div>
</div>
</div><!-- .crt-nav-wrap -->
<div class="crt-container-sm">
<div class="crt-paper-layers">
<div class="crt-paper clear-mrg">
<div class="crt-paper-cont paper-padd clear-mrg">
<h2 class="title-lg text-upper padd-box">工作经验</h2>
<div class="education">
<div class="education-box">
<time class="education-date">
<span>
<strong class="text-upper">2014</strong>/07 -
<strong>2016</strong>/07
</span>
</time>
<h3>全栈工程师</h3>
<div class="education-logo">
<img src="../../../asset/front/img/experience/alibaba.png" alt="">
</div>
<span class="education-company">阿里巴巴</span>
<p>端茶倒水打杂</p></div>
<!-- .education-box -->
<div class="education-box">
<time class="education-date">
<span>
<strong class="text-upper">2014</strong>/07 -
<strong>2016</strong>/07
</span>
</time>
<h3>Java架构师</h3>
<div class="education-logo"><img
src="../../../asset/front/img/experience/tencent.jpg" alt=""></div>
<span class="education-company">腾讯</span>
<p>天天想着充钱买装备</p>
</div>
<div class="education-box">
<time class="education-date">
<span>
<strong class="text-upper">2014</strong>/07 -
<strong>2016</strong>/07
</span>
</time>
<h3>CTO</h3>
<div class="education-logo">
<img src="../../../asset/front/img/experience/bytedance.jpg"
alt="">
</div>
<span class="education-company">字节跳动</span>
<p>天天增删改查,准备删库跑路</p></div>
</div>
</div>
</div>
<!-- .crt-paper -->
</div><!-- .crt-paper-layers -->
</div><!-- .crt-container-sm -->
</div>
<!-- .crt-container -->
<footer id="crt-footer" class="crt-container-lg">
<div class="crt-container">
<div class="crt-container-sm clear-mrg text-center"><p>M了个J &copy; All Rights Reserved 2020</p></div>
</div><!-- .crt-container -->
</footer><!-- #crt-footer -->
<svg id="crt-bg-shape-1" class="hidden-sm hidden-xs" height="519" width="758">
<polygon class="pol" points="0,455,693,352,173,0,92,0,0,71"/>
</svg>
<svg id="crt-bg-shape-2" class="hidden-sm hidden-xs" height="536" width="633">
<polygon points="0,0,633,0,633,536"/>
</svg>
</div><!-- .crt-wrapper --><!-- Scripts -->
<script src="../../../asset/front/js/modernizr-3.3.1.min.js"></script>
<script src="../../../asset/plugin/jquery/jquery.min.js"></script>
<script src="../../../asset/front/js/plugins.min.js"></script>
<script src="../../../asset/front/js/theme.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>小码哥简历管理-登录</title>
<link rel="icon" href="../../asset/admin/img/favicon.png" type="image/x-icon">
<link href="../../asset/plugin/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="../../asset/plugin/node-waves/waves.css" rel="stylesheet">
<link href="../../asset/plugin/animate-css/animate.min.css" rel="stylesheet">
<link href="../../asset/admin/css/material-icons.css" rel="stylesheet">
<link href="../../asset/admin/css/style.min.css" rel="stylesheet">
<link href="../../asset/admin/css/main.css" rel="stylesheet">
</head>
<body class="login-page">
<div class="login-box">
<div class="logo">
<a href="javascript:void(0);"><b>小码哥简历管理</b></a>
<small>您身边最好用的简历助手</small>
</div>
<div class="card">
<div class="body">
<form class="form-validation" method="post">
<div class="msg">赶紧登录吧</div>
<div class="input-group form-group form-float">
<span class="input-group-addon">
<i class="material-icons">email</i>
</span>
<div class="form-line">
<input type="email" class="form-control" name="email" maxlength="50" placeholder="邮箱" required autofocus>
</div>
</div>
<div class="input-group form-group">
<span class="input-group-addon">
<i class="material-icons">lock</i>
</span>
<div class="form-line">
<input type="password" class="form-control" name="password" maxlength="20"placeholder="密码" required>
</div>
</div>
<div class="input-group form-group captcha">
<span class="input-group-addon">
<i class="material-icons">security</i>
</span>
<div class="form-line">
<input type="text" class="form-control" name="captcha" placeholder="验证码" required>
</div>
<img src="../../asset/img/captcha.png" alt="验证码">
</div>
<div class="row">
<div class="col-xs-8 p-t-5">
<input type="checkbox" name="rememberme" id="rememberme" class="filled-in chk-col-pink">
<label for="rememberme">记住密码</label>
</div>
<div class="col-xs-4">
<button class="btn btn-block bg-pink waves-effect" type="submit">登录</button>
</div>
</div>
<div class="row m-t-15 m-b--20">
<div class="col-xs-6">
<a href="register.html">现在注册</a>
</div>
</div>
</form>
</div>
</div>
</div>
<script src="../../asset/plugin/jquery/jquery.min.js"></script>
<script src="../../asset/plugin/bootstrap/bootstrap.min.js"></script>
<script src="../../asset/plugin/node-waves/waves.js"></script>
<script src="../../asset/plugin/jquery-validation/jquery.validate.js"></script>
<script src="../../asset/plugin/jquery-validation/messages_zh.js"></script>
<!-- Custom Js -->
<script src="../../asset/admin/js/default.js"></script>
<script src="../../asset/admin/js/main.js"></script>
<script>
addValidatorRules('.form-validation')
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>小码哥简历管理-注册</title>
<link rel="icon" href="../../asset/admin/img/favicon.png" type="image/x-icon">
<link href="../../asset/plugin/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="../../asset/plugin/node-waves/waves.css" rel="stylesheet">
<link href="../../asset/plugin/animate-css/animate.min.css" rel="stylesheet">
<link href="../../asset/admin/css/material-icons.css" rel="stylesheet">
<link href="../../asset/admin/css/style.min.css" rel="stylesheet">
<link href="../../asset/admin/css/main.css" rel="stylesheet">
</head>
<body class="signup-page">
<div class="signup-box">
<div class="logo">
<a href="javascript:void(0);"><b>小码哥简历管理</b></a>
<small>您身边最好用的简历助手</small>
</div>
<div class="card">
<div class="body">
<form class="form-validation" method="post">
<div class="msg">注册一个新的帐号</div>
<div class="input-group form-group">
<span class="input-group-addon">
<i class="material-icons">email</i>
</span>
<div class="form-line">
<input type="email" class="form-control" name="email" maxlength="50" placeholder="邮箱" required>
</div>
</div>
<div class="input-group form-group">
<span class="input-group-addon">
<i class="material-icons">lock</i>
</span>
<div class="form-line">
<input type="password" class="form-control" name="password" maxlength="20"placeholder="密码" required>
</div>
</div>
<div class="input-group form-group">
<span class="input-group-addon">
<i class="material-icons">lock</i>
</span>
<div class="form-line">
<input type="password" class="form-control" id="confirm" placeholder="确认" required>
</div>
</div>
<div class="input-group form-group captcha">
<span class="input-group-addon">
<i class="material-icons">security</i>
</span>
<div class="form-line">
<input type="text" class="form-control" name="captcha" placeholder="验证码" required>
</div>
<img src="../../asset/img/captcha.png" alt="验证码">
</div>
<div class="form-group">
<input type="checkbox" name="terms" id="terms" class="filled-in chk-col-pink" required>
<label for="terms">已阅读和同意<a href="javascript:void(0);">用户使用协议</a></label>
</div>
<button class="btn btn-block btn-lg bg-pink waves-effect" type="submit">注册</button>
<div class="m-t-25 m-b--5 align-center">
<a href="login.html">已经注册过?</a>
</div>
</form>
</div>
</div>
</div>
<script src="../../asset/plugin/jquery/jquery.min.js"></script>
<script src="../../asset/plugin/bootstrap/bootstrap.min.js"></script>
<script src="../../asset/plugin/node-waves/waves.js"></script>
<script src="../../asset/plugin/jquery-validation/jquery.validate.js"></script>
<script src="../../asset/plugin/jquery-validation/messages_zh.js"></script>
<!-- Custom Js -->
<script src="../../asset/admin/js/default.js"></script>
<script src="../../asset/admin/js/main.js"></script>
<script>
addValidatorRules('.form-validation')
$('#confirm').rules("add", {
equalTo: '[name=password]'
})
</script>
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/page/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/page/500.jsp</location>
</error-page>
</web-app>
\ No newline at end of file
.form-control {
background: none;
}
.form-validation input[type=file] {
display: inline-block;
}
#leftsidebar .user-info {
display: flex;
height: auto;
}
#leftsidebar .user-info .info-container {
top: 0;
width: 100%;
}
#leftsidebar .user-info .image img {
width: 48px;
height: 48px;
}
.table-responsive {
overflow-x: auto;
overflow-y: visible;
}
.table-responsive .table th,
.table-responsive .table td {
text-align: center;
vertical-align: middle;
}
.table-responsive .table td button {
margin: 0 5px;
}
.table-responsive .menus {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
.table-responsive .menus .buttons {
margin-bottom: 20px;
}
.table-responsive .menus .removeAll {
margin-left: 15px;
}
.page-size {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.page-size select {
margin: 0 10px;
}
.page-box {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
.page-box .pagination {
margin: 0;
}
.error-title {
font-size: 80px;
}
.error-msg {
font-size: 27px;
color: #333;
font-weight: bold;
margin-bottom: 20px;
}
.search-box {
display: flex;
align-items: center;
margin: 0;
width: auto;
}
.search-box button {
margin-top: -25px;
}
.search-box .input-group-addon {
padding: 0;
margin-right: 10px;
margin-top: -20px;
}
.search-box .form-line {
margin: 0 15px 25px;
}
.search-box .keyword {
width: 150px;
}
.search-box .input {
width: 100px;
}
.search-box .datetime-input {
width: 150px;
}
.search-box select {
height: 25px;
position: relative;
top: -11px;
margin-right: 15px;
}
.form-group select {
position: relative;
top: 5px;
height: 25px;
}
.fileinput {
position: relative;
}
.fileinput .clear {
position: absolute;
right: 0;
top: 0;
z-index: 10;
cursor: pointer;
background-color: #fff;
border: 1px solid #ddd;
font-weight: bold;
}
.fileinput input[type=file] {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
z-index: 9;
}
.form-validation .captcha .form-line {
width: 80px;
}
.form-validation .captcha img {
width: 100px;
height: 35px;
margin-left: 15px;
position: relative;
top: -15px;
cursor: pointer;
}
.signup-page, .login-page {
margin: 50px auto;
}
[type="checkbox"]+label {
font-size: 14px;
}
.logo small,
.form-group .form-line.focused .form-label {
font-size: 13px;
}
.fileinput,
.fileinput-new.thumbnail {
margin-bottom: 0;
}
.fileinput input {
cursor: pointer;
}
.bootstrap-tagsinput {
width: 100%;
padding-left: 0;
}
.bootstrap-tagsinput .tag {
font-size: 14px;
background-color: #2196f3;
margin-bottom: 10px;
display: inline-block;
}
.bootstrap-tagsinput input {
padding: 0;
width: 100%;
}
#leftsidebar {
width: 220px;
}
section.content {
margin-left: 235px;
}
.fileinput-new.thumbnail img {
max-width: 200px;
max-height: 140px;
}
.fileinput-preview.thumbnail {
max-width: 210px;
max-height: 150px;
margin-bottom: 0;
}
td img {
height: 50px;
width: auto;
}
\ No newline at end of file
/* fallback */
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: url(material-icons.woff2) format('woff2');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
.theme-blue .navbar{background-color:#2196f3;}.theme-blue .navbar-brand{color:#fff;}.theme-blue .navbar-brand:hover{color:#fff;}.theme-blue .navbar-brand:active{color:#fff;}.theme-blue .navbar-brand:focus{color:#fff;}.theme-blue .nav>li>a{color:#fff;}.theme-blue .nav>li>a:hover{background-color:transparent;}.theme-blue .nav>li>a:focus{background-color:transparent;}.theme-blue .nav .open>a{background-color:transparent;}.theme-blue .nav .open>a:hover{background-color:transparent;}.theme-blue .nav .open>a:focus{background-color:transparent;}.theme-blue .bars{color:#fff;}.theme-blue .sidebar .menu .list li.active{background-color:transparent;}.theme-blue .sidebar .menu .list li.active>:first-child i,.theme-blue .sidebar .menu .list li.active>:first-child span{color:#2196f3;}.theme-blue .sidebar .menu .list .toggled{background-color:transparent;}.theme-blue .sidebar .menu .list .ml-menu{background-color:transparent;}.theme-blue .sidebar .legal{background-color:#fff;}.theme-blue .sidebar .legal .copyright a{color:#2196f3 !important;}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment