IntelliJ IDEA
开发神器创建一个空白的Web Application
项目 配置SSM web项目框架在与
src
同级的目录下创建一个libs
目录用来放.jar
文件, 对于web项目感觉就是jar包一顿拷贝 粘贴。
jackson-annotations-2.4.0
、jackson-core-2.4.2
、jackson-databind-2.4.2
返回json数据支持。
mysql-connector-java-5.1.7-bin
数据库驱动包。
log4j-1.2.17
、log4j-api-2.0-rc1
、log4j-core-2.0-rc1
、slf4j-api-1.7.5
、slf4j-log4j12-1.7.5
log4j 日志框架包。
依赖jar 如下图:右键Add As Library
当 依赖jar包之后(或者移除一个jar包) 记得进入项目设置 查看依赖的jar是否需要添加至:artifact;只要点击Fix 选择第一个即可
使用Spring MVC 实现文件上传遇到的问题以及解决方案
src
同级目录下创建一个config
目录专门用来存放配置文件。这里需要将这个文件夹设为资源文件夹,在文件夹上右键如下操作:
首先配置Dao层:
sqlMapConfig.xml
空文件即可 需要文件头
<configuration>
configuration>
db.properties
jdbc驱动 地址 用户名 密码 jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.0.3:3306/azhon?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
applicationContextDao.xml
,让spring管理sql session factory 使用mybatis和spring整合包中的、配置Mapper扫描器
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:property-placeholder location="classpath:db.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:sqlMapConfig.xml" />
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.azhon.dao" />
bean>
beans>
配置Service层:
applicationContextService.xml
配置包扫描器,扫描@Service注解的类。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.azhon.service" />
beans>
applicationContextTrans.xml
配置事务
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
tx:attributes>
tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.azhon.service.*.*(..))" />
aop:config>
beans>
配置表现层
springMvc.xml
自动配置最新版的处理器映射器和处理器适配器、配置@Controller注解扫描
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
bean>
mvc:message-converters>
mvc:annotation-driven>
<context:component-scan base-package="com.azhon.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
bean>
beans>
配置log4j2.properties
日志,更多的配置可以前往官网或者百度查找。
log4j.rootLogger=DEBUG, CONSOLE, FILE
## for console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] - %m%n
config
的最终样子web.xml
文件位于项目的/web/WEB-INF/
下
<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_3_1.xsd"
version="3.1">
<servlet-mapping>
<servlet-name>springMvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
<servlet>
<servlet-name>springMvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springMvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.jpgurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.jsurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.cssurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.gifurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.pngurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.htmlurl-pattern>
servlet-mapping>
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:applicationContext*.xmlparam-value>
context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
<welcome-file-list>
<welcome-file>login.htmlwelcome-file>
welcome-file-list>
<filter>
<filter-name>characterEncodingFilterfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
<init-param>
<param-name>forceEncodingparam-name>
<param-value>trueparam-value>
init-param>
filter>
<filter-mapping>
<filter-name>characterEncodingFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
web-app>
在上面我配置了项目一启动的时候加载
login.html
这个文件(这是我在网上找的一个登录模版),你这里就可以在/web
目录下随便创建一个空白的html文件或者jsp文件 替换就好了。
Tomcat
服务器 我这里使用的是v7.0.82,如下图操作:1、进入项目设置
2、添加一个Tomcat
3、在Application server处 配置本地Tomcat路径,点击Fix 然后 点击OK就添加成功了
generatorConfig.xml
文件配置
<generatorConfiguration>
<classPathEntry location="mysql-connector-java-5.1.25-bin.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true" />
<property name="suppressAllComments" value="true" />
commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://地址:端口/数据库名字" userId="用户名"
password="密码"/>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
javaTypeResolver>
<javaModelGenerator targetPackage="com.azhon.pojo" targetProject="src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
javaModelGenerator>
<sqlMapGenerator targetPackage="com.azhon.dao" targetProject="src">
<property name="enableSubPackages" value="true" />
sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.azhon.dao" targetProject="src">
<property name="enableSubPackages" value="true" />
javaClientGenerator>
<table tableName="tb_member" domainObjectName="TbMember" enableCountByExample="true"
enableUpdateByExample="true" enableDeleteByExample="true"
enableSelectByExample="true" selectByExampleQueryId="true"/>
context>
generatorConfiguration>
文件中有注释的地方都是需要修改的地方,执行如下命令进行文件生成:
在 cmd/Terminal 中进入到generatorConfig.xml文件夹目录下 执行如下命令:
Java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
Service层:
LoginService.java
定义一个接口 编写一个根据用户名 密码查询数据库的方法public interface LoginService {
/**
* 根据用户名 密码查询数据库
*
* @param tmName 用户名
* @param tmPass 密码
* @throws Exception
*/
List findUserByName(String tmName, String tmPass) throws Exception;
}
LoginServiceImpl.java
实现接口的方法,编写数据查询。千万别落了@Service
注解@Service
public class LoginServiceImpl implements LoginService {
@Autowired
TbMemberMapper tbMemberMapper;
@Override
public List findUserByName(String tmName, String tmPass) throws Exception {
//添加查询条件
TbMemberExample example = new TbMemberExample();
TbMemberExample.Criteria criteria = example.or();
criteria.andTmNameEqualTo(tmName);
criteria.andTmPassEqualTo(tmPass);
return tbMemberMapper.selectByExample(example);
}
}
Controller层:方法上的参数也就是 网页表单提交传输过来的参数 名字要一一对应
LoginController.java
处理用户请求,千万别落了@Controller
注解 @Controller
public class LoginController {
public final Logger logger = LogManager.getLogger(getClass());
@Autowired
public LoginService loginService;
/**
* 添加这个映射 这样输入 localhost:8080/login 就可以直接访问我们的登录页面
*
* @return 返回文件的路径
*/
@RequestMapping("/login")
public String login() {
return "login.html";
}
@RequestMapping("/userlogin")
public String userLogin(String username, String password) throws Exception {
List members = loginService.findUserByName(username, password);
if (members.size() > 0) {
logger.error(members.get(0).getTmName());
//返回登录成功的页面
return "/jsp/success.jsp";
}
//返回登录失败的页面
return "/jsp/fail.jsp";
}
}
注意:当如果想返回一串JSON数据给用户时我们需要在方法上添加
@ResponseBody
注解,如下代码:
/**
* 返回json数据
*
* @return 因为添加了jackson 支持 所以会自动转化为json数据
*/
@ResponseBody
@RequestMapping("/json")
public Map json() {
Map result = new HashMap<>();
result.put("code", 100);
result.put("message", "请求成功");
return result;
}
/**
* @return 返回一个字符串
* @see #login() 如果返回的是一个文件路径 (上面的登录方法) 那么视图解析器就会自动识别返回这个页面
* 如果是字符串那就直接返回当前字符串
*/
@ResponseBody
@RequestMapping("/string")
public String string() {
return "请求成功";
}