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%)
代码语言:javascript复制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主配置文件
1234567891011 | <?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>
第三步:创建实体类
1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 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映射文件(通过动态代理的方式绑定)
12345678910111213 | 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);} |
---|
123456789101112131415161718192021 | <?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接口以及实现类
12345678910111213 | 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);
}
}
第六步:写测试类测试上述方法
代码语言:javascript复制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
代码语言:javascript复制<?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框架无缝整合)
123456789101112131415 | <?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 相关的类
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 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; @Controllerpublic 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,如果控制台无报错信息,说明配置整合成功,反之失败,所以整合过程中一定要仔细
代码语言:javascript复制十月 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_51jre
十月 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 Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82wtpwebapps
十月 28, 2017 12:06:40 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82endorsed
十月 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_51bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;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_51bin;D:Mavenapache-maven-3.3.9bin;C:Program FilesGitcmd;C:Program Files (x86)ATI TechnologiesATI.ACECore-Static;D:Program FilesMySQLMySQL Server 5.7bin;C:Program FilesVisualSVN Serverbin;C:Program FilesTortoiseSVNbin;D:Program Filesmongodb-win32-x86_64-2.4.3bin;C:UserstracholarAppDataRoamingcabalbin;C:UserstracholarAppDataRoamingnpm;D:Program Filesuserbin;D:wamp64binphpphp5.6.16;D:texlive2015binwin32;D:Program Fileseclipse;;.
十月 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 Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsdocs
十月 28, 2017 12:06:49 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsdocs has finished in 234 ms
十月 28, 2017 12:06:49 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsexamples
十月 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 Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsexamples has finished in 1,568 ms
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappshost-manager
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappshost-manager has finished in 421 ms
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsmanager
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsmanager has finished in 141 ms
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsROOT
十月 28, 2017 12:06:51 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:Program Filesapache-tomcat-7.0.82-windows-x64apache-tomcat-7.0.82webappsROOT 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交互的过程中不会因为插件的问题而报错
代码语言:javascript复制<%@ 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>
123456789101112 | <%@ 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> |
---|