SSM框架是目前企业比较常用的框架之一,它的灵活性、安全性相对于SSH有一定的优势。说到这,谈谈SSM和SSH的不同点,这也是企业常考初级程序员的面试题之一。说到这两套框架的不同,主要是持久层框架Hibernate和MyBatis的不同和控制层框架SpringMVC和Struts2的不同。

Hibernate和MyBatis的不同主要体现这么几点:

1.自动化和半自动化:Hibernate的SQL语句自动生成不需要程序员编写,而MyBatis需要编写。

2.学习上:Hibernate入门比较难,而MyBatis入门非常容易。

3.可移植性:Hibernate可移植性好,对应不同的数据库通过改变方言可以直接用,而MyBatis可移植性差,对应不同的数据库需要书写不同的SQL语句

4.关系维护上:Hibernate映射关系复杂,而MyBatis相对简单。

5.缓存:Hibernate有更好的二级缓存,可以使用第三方缓存,而MyBatis本身缓存就不好。

SpringMVC和Struts2的不同点如下:

1.入口不同:SpringMVC的入口是Servlet,Struts的入口是Filter。

2.性能上:spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通 setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

3.拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。

4. 设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。

5.SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。

6.Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。

第一步:导包(这一步只要成功,可以说成功了80%)

aopalliance.jar
aspectjweaver-1.5.4.jar
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
commons-logging-1.1.3.jar
fastjson-1.2.13.jar
jstl-1.2.jar
mail.jar
mybatis-3.3.1.jar
mybatis-spring-1.2.4.jar
mysql-connector-java-5.1.26-bin.jar
spring-aop-4.2.3.RELEASE.jar
spring-aspects-4.2.3.RELEASE.jar
spring-beans-4.2.3.RELEASE.jar
spring-context-4.2.3.RELEASE.jar
spring-context-support-4.2.3.RELEASE.jar
spring-core-4.2.3.RELEASE.jar
spring-expression-4.2.3.RELEASE.jar
spring-instrument-4.2.3.RELEASE.jar
spring-instrument-tomcat-4.2.3.RELEASE.jar
spring-jdbc-4.2.3.RELEASE.jar
spring-jms-4.2.3.RELEASE.jar
spring-messaging-4.2.3.RELEASE.jar
spring-orm-4.2.3.RELEASE.jar
spring-oxm-4.2.3.RELEASE.jar
spring-test-4.2.3.RELEASE.jar
spring-tx-4.2.3.RELEASE.jar
spring-web-4.2.3.RELEASE.jar
spring-webmvc-4.2.3.RELEASE.jar
spring-webmvc-portlet-4.2.3.RELEASE.jar
spring-websocket-4.2.3.RELEASE.jar

第二步:写Spring主配置文件以及MyBatis主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 起别名 -->
<typeAliases>
<package name="com.blog.entity"/>
</typeAliases> </configuration>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
<!-- 自动扫描注解 -->
<context:component-scan base-package="com.blog.service"></context:component-scan> <!-- 配置连接池 -->
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/blog_002"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</bean> <!-- 配置mybatis工厂 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean> <!-- 注解事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 动态扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.blog.mapper"></property> </bean> </beans>

第三步:创建实体类

package com.blog.entity;

public class User {

	private Integer Id;
private String email;
private String userName;
private String password;
private Integer power;
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getPower() {
return power;
}
public void setPower(Integer power) {
this.power = power;
} }

第四步:创建接口以及SQL映射文件(通过动态代理的方式绑定)

package com.blog.mapper;

import org.apache.ibatis.annotations.Param;

import com.blog.entity.User;

public interface UserMapper {

	User Login(String email);

	User Login2(@Param("email") String email,@Param("password") String password);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blog.mapper.UserMapper"> <select id="Login" parameterType="String" resultType="User">
select * from b_user where email=#{email}
</select> <select id="Login2" resultMap="logins">
select * from b_user where email=#{email} and password=#{password}
</select>
<resultMap type="User" id="logins">
<id column="Id" property="Id"/>
<result column="email" property="email"/>
<result column="password" property="password"/>
</resultMap> </mapper>

第五步:创建Service接口以及实现类

package com.blog.service;

import com.blog.entity.User;

public interface UserService {

	User Login(String email);

	User Login2(String email,String password);

}
package com.blog.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.blog.entity.User;
import com.blog.mapper.UserMapper;
import com.blog.service.UserService; @Service
public class UserServiceImpl implements UserService{ @Resource
private UserMapper userMapper; @Override
public User Login(String email) {
// TODO Auto-generated method stub
return userMapper.Login(email);
} @Override
public User Login2(String email, String password) {
// TODO Auto-generated method stub
return userMapper.Login2(email, password);
} }

第六步:写测试类测试上述方法

package com.blog.test;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.blog.entity.User;
import com.blog.mapper.UserMapper; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class testMapper { @Resource
private UserMapper userMapper; @Test
public void testName() throws Exception { User user=userMapper.Login("1933108196@qq.com");
System.out.println(user); } @Test
public void testName2() throws Exception { User user=userMapper.Login2("1933108196@qq.com", "kangri123");
System.out.println(user.getUserName()); } }

第七步:测试成功后,开始设置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Demo_Model</display-name> <!--全局配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <!-- 该监听器主要作用是随tomcat的启动,而加载context中的全局配置文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 该过滤器主要作用是处理字符乱码 ,可拦截所有请求,处理所有乱码-->
<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
<!--
*.do拦截所有带do的请求,对静态资源放行
/ 拦截所有带.jsp的请求,同时对静态资源拦截
/* 拦截所有
-->
</servlet-mapping> <welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
</web-app>

第八步:配置springmvc.xml(与Spring框架无缝整合)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd ">
<!--扫描Controller层 -->
<context:component-scan base-package="com.blog.controller"></context:component-scan> <!-- 开启注解 -->
<mvc:annotation-driven/> <!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean> </beans>

配置完毕后记得添加Controller 相关的类

package com.blog.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import com.alibaba.fastjson.JSON;
import com.blog.entity.User;
import com.blog.service.UserService; @Controller
public class UserController { @Resource
private UserService userService; @RequestMapping(value="emailCheck2.do",method=RequestMethod.POST)
public void emailCheck2(String email,HttpServletResponse response,HttpServletRequest request,HttpSession session,Model model) throws IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter(); User user=userService.Login(email);
if(user!=null){
out.println("邮箱已经存在");
}else{
out.println("邮箱可以使用");
} out.flush();
out.close(); } @RequestMapping(value="emailCheck.do",method=RequestMethod.POST)
public void emailCheck(String email,HttpServletResponse response,HttpServletRequest request,HttpSession session,Model model) throws IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter(); User user=userService.Login(email);
if(user!=null){
out.println("邮箱正确");
}else{
out.println("邮箱错误");
} out.flush();
out.close(); } @RequestMapping(value="passCheck.do",method=RequestMethod.POST)
public void emailCheck(String email,String password,HttpServletResponse response,HttpServletRequest request,HttpSession session,Model model) throws IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter(); User user=userService.Login2(email,password);
if(user!=null){
out.println("密码正确"); }else{
out.println("密码错误");
} out.flush();
out.close(); } @RequestMapping(value="LoginCheck.do",method=RequestMethod.POST)
public String LoginCheck(String email,String password,HttpServletResponse response,HttpServletRequest request,HttpSession session,Model model){
User user=userService.Login2(email, password);
if(user==null){
request.setAttribute("error", "用户名或密码不能为空");
return "Login";
}else{ model.addAttribute("user", user);
return "index";
} } }

第十步:开始启动tomcat,如果控制台无报错信息,说明配置整合成功,反之失败,所以整合过程中一定要仔细

十月 28, 2017 12:06:40 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Demo_Model' did not find a matching property.
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version: Apache Tomcat/7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server built: Sep 29 2017 12:23:15 UTC
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server number: 7.0.82.0
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name: Windows 8
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Version: 6.2
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Architecture: amd64
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java Home: D:\jdk1.7.0_51\jre
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Version: 1.7.0_51-b13
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Vendor: Oracle Corporation
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE: D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\wtpwebapps
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\endorsed
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=GBK
十月 28, 2017 12:06:40 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\jdk1.7.0_51\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:/jdk1.7.0_51/bin/../jre/bin/server;D:/jdk1.7.0_51/bin/../jre/bin;D:/jdk1.7.0_51/bin/../jre/lib/amd64;D:\jdk1.7.0_51\bin;D:\Maven\apache-maven-3.3.9\bin;C:\Program Files\Git\cmd;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;D:\Program Files\MySQL\MySQL Server 5.7\bin;C:\Program Files\VisualSVN Server\bin;C:\Program Files\TortoiseSVN\bin;D:\Program Files\mongodb-win32-x86_64-2.4.3\bin;C:\Users\tracholar\AppData\Roaming\cabal\bin;C:\Users\tracholar\AppData\Roaming\npm;D:\Program Files\userbin;D:\wamp64\bin\php\php5.6.16;D:\texlive\2015\bin\win32;D:\Program Files\eclipse;;.
十月 28, 2017 12:06:40 上午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
十月 28, 2017 12:06:40 上午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-bio-8009"]
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1592 ms
十月 28, 2017 12:06:40 上午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
十月 28, 2017 12:06:41 上午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.82
十月 28, 2017 12:06:46 上午 org.apache.catalina.startup.TldConfig execute
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
十月 28, 2017 12:06:46 上午 org.apache.catalina.core.ApplicationContext log
信息: No Spring WebApplicationInitializer types detected on classpath
十月 28, 2017 12:06:46 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
十月 28, 2017 12:06:46 上午 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization started
十月 28, 2017 12:06:46 上午 org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
信息: Refreshing Root WebApplicationContext: startup date [Sat Oct 28 00:06:46 CST 2017]; root of context hierarchy
十月 28, 2017 12:06:46 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
十月 28, 2017 12:06:49 上午 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization completed in 2875 ms
十月 28, 2017 12:06:49 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\docs
十月 28, 2017 12:06:49 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\docs has finished in 234 ms
十月 28, 2017 12:06:49 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\examples
十月 28, 2017 12:06:51 上午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
十月 28, 2017 12:06:51 上午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
十月 28, 2017 12:06:51 上午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@a8e6df5')
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\examples has finished in 1,568 ms
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\host-manager
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\host-manager has finished in 421 ms
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\manager
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\manager has finished in 141 ms
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\ROOT
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:\Program Files\apache-tomcat-7.0.82-windows-x64\apache-tomcat-7.0.82\webapps\ROOT has finished in 94 ms
十月 28, 2017 12:06:51 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
十月 28, 2017 12:06:51 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 11060 ms

接下来开始写登录页面做异步验证,在此之前AJax所需的jQuery插件一定要记得导,导入后,写个alert弹框测试一下,以保证在Ajax和JQuery交互的过程中不会因为插件的问题而报错

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script>
function m1() { $(document).ready(function() { var email = $("#email").val(); if (email == null || email == "") {
$("#nameDiv1").html("邮箱不能为空"); } else if (email.indexOf("@") == -1) {
$("#nameDiv1").html("邮箱格式不正确,必须包含@"); } else if (email.indexOf(".") == -1) {
$("#nameDiv1").html("邮箱格式不正确,必须包含.");
} else {
$.post("${pageContext.request.contextPath}/emailCheck.do", {
"email" : email
}, function(data) {
$("#nameDiv1").html(data);
}, "text"); } }); } function m2(){
$(document).ready(function(){
var email=$("#email").val();
var password=$("#password").val();
if(password==null||password==""){
$("#nameDiv2").html("密码不能为空");
}else if(password.length<6){
$("#nameDiv2").html("密码长度不能小于六位");
}else if(password.length>18){
$("#nameDiv2").html("密码长度已经超过18位,不符合给定要求");
}else{
$.post(
"${pageContext.request.contextPath}/passCheck.do",
{"email":email,"password":password},
function(data){
$("#nameDiv2").html(data);
},
"text"
); } });
}
</script> </head>
<body>
<div align="center">
<form action="LoginCheck.do" method="post">
<h2 align="center">${error}</h2>
<table align="center">
<tr>
<td>Email:<input type="text" name="email" id="email" onblur="m1()"
style="width: 200px;" /></td>
<td><span id="nameDiv1" style="color: red; font-size: 15px;"></span></td>
</tr>
<tr>
<td>Password:<input type="password" name="password" id="password" onblur="m2()"
style="width: 200px;" /></td>
<td><span id="nameDiv2" style="color: red; font-size: 15px;"></span></td>
</tr>
<tr>
<td><input type="submit" value="Login" /></td> </tr>
</table>
</form> </div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${user.userName}
</body>
</html>

ssm框架整合+Ajax异步验证的更多相关文章

  1. ssm 框架 使用ajax异步,实现登陆

    只是简单写一下 js.jsp.和controller jsp <%@ page contentType="text/html;charset=UTF-8" language= ...

  2. SpringMVC详解及SSM框架整合项目

    SpringMVC ssm : mybatis + Spring + SpringMVC MVC三层架构 JavaSE:认真学习,老师带,入门快 JavaWeb:认真学习,老师带,入门快 SSM框架: ...

  3. SpringMVC--从理解SpringMVC执行流程到SSM框架整合

    前言 SpringMVC框架是SSM框架中继Spring另一个重要的框架,那么什么是SpringMVC,如何用SpringMVC来整合SSM框架呢?下面让我们详细的了解一下. 注:在学习SpringM ...

  4. SSM框架整合模板

    SSM框架整合--MAVEN依赖 spring方面(包含了springmvc): spring-webmvc:spring与mvc的整合依赖,主要包括spring的核心包和springmvc需要的包 ...

  5. 基于maven的ssm框架整合

    基于maven的ssm框架整合 第一步:通过maven建立一个web项目.                第二步:pom文件导入jar包                              (1 ...

  6. JAVAEE——宜立方商城01:电商行业的背景、商城系统架构、后台工程搭建、SSM框架整合

    1. 学习计划 第一天: 1.电商行业的背景. 2.宜立方商城的系统架构 a) 功能介绍 b) 架构讲解 3.工程搭建-后台工程 a) 使用maven搭建工程 b) 使用maven的tomcat插件启 ...

  7. SpringMVC札集(10)——SSM框架整合

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  8. ssm框架整合-过程总结(第二次周总结)

    距离上次写博客已经有4.5天的时间了. 这次写博客目的是总结一下项目开始到现在,过程中遇到的问题.和学到的知识.经验. 初略总结下自己从中学到的: Spring :在学习中被反复强调的Ioc(反转控制 ...

  9. SSM框架整合项目 :租房管理系统

    使用ssm框架整合,oracle数据库 框架: Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastj ...

随机推荐

  1. es6 语法 (模块化)

    //export export let A=123; //导出 //导出函数 export function test(){ console.log('test'); } //导出类 export c ...

  2. JAVA代码根据经纬度范围计算WGS84与谷歌全球墨卡托包含的切片数目与拼接图像像素尺寸

    根据项目需求编写的代码. 适用场景:在网络地图上,比如天地图与谷歌地图,用户用鼠标在地图上拉一个矩形框,希望下载该矩形框内某一层级的瓦片数据,并将所有瓦片拼接成一个完整的,包含地理坐标的tif图像. ...

  3. iOS------获取当前时间和当前时间戳

    //获取当前的时间 +(NSString*)getCurrentTimes{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; ...

  4. 切换横竖屏的时候Activity的生命周期变化情况

    关于这个,有个博客说得比较清楚:http://blog.csdn.net/wulianghuan/article/details/8603982,直接给出链接,哈哈哈.

  5. MySQL 在Windows平台上的安装及实例多开

    MySQL在Windows平台上的安装及实例多开   by:授客 QQ:1033553122 测试环境 Win7 64 mysql-5.7.20-winx64.zip 下载地址: https://cd ...

  6. Android SurfaceView实现跟随手指移动的光标

    实例 public class DragSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ priv ...

  7. git 入门教程之忽略文件

    忽略文件 "并不是所有的牛奶都叫特仑苏",在版本控制系统中也有相似的表达,那就是"并不是所有的文件都需要提交". 有的是因为没必要提交,比如日志文件,系统缓存文 ...

  8. 钉钉扫码登录web网站

    钉钉扫码登录网站 前言  由于本公司前后台分离,这里主要讲述后台的实现逻辑与过程,前端相关的一略而过.前端我们采用的是把二维码内嵌到我们的网页中. 流程如下: 1.登录钉钉后台创建一个企业应用 2.根 ...

  9. python 饥饿的小易(网易笔试题)

    本周早些时候,学弟给我发了一道网易的笔试题,饥饿的小易,感觉有点意思-分享给大家 题目描述: 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前 ...

  10. HBase最佳实践之Scan

    一.简介 HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI.TableScanMR以及SnapshotScanMR.三种用法的原理不尽相同,扫描效率当然相差甚远,最重要的是这几种用 ...