这里有一个简单的SpringMVC框架的示例,所需要环境:Eclipse已配置好Spring框架,以及准备好SpringMVC框架所需jar包
一、新建一个Web项目
- 新建一个Dynamic Web Project,版本选择2.5(注:创建项目时,默认选择的是3.0,而3.0版本的Web项目没有web.xml文件可供配置,而是将web.xml的功能整合到了注释中,对初学者比较麻烦)
- 在Java Resources文件夹中删除src文件夹,新建下图所示四个资源文件夹:
- 拷入如图所示的jar包:
新建Web项目的工作已经完成。
二、配置文件
- 打开web.xml文件,删去无用代码,创建Spring容器并向其中添加对象。
- 在src/main/resource中创建一个名字为application.xml的Spring Bean Configuration File文件
- 在application.xml的页面下方点击namespace进行如下勾选:
- 在application.xml中配置扫描器和调用默认servlet的代码:
对以上操作的解释:-
src/test/java、src/test/resource、src/main/java、src/main/resource这四个文件夹的作用:
src/test/java:存放测试代码
src/test/resource:存放测试资源文件
src/main/java:存放源程序核心代码
src/main/resource:存放源程序资源文件 -
web.xml文件配置的说明:
-
DispatcherServlet路径名
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
的由来:
右击如下所示的DispatcherServlet文件,选择Copy Qualified Name,即可将其全名放入剪切板中。
-
这段代码写在DispatcherServlet中,它意味着Tomcat启动时此Servlet调用init()方法,加载application.xml,产生一个Spring容器,并且开始扫描,将对象放入容器中。
<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application.xml</param-value> </init-param>
-
这段代码代表在服务器启动时创建Servlet对象。
<servlet-name>DispatcherServlet</servlet-name>
-
加上"/"代表此Servlet拦截所有请求。
<url-pattern>/</url-pattern>
-
-
application.xml文件配置
-
这段代码指定base-package开始的包自动实例化,注意:包内类必须添加有 Controller、Service、Component类注解。
<context:component-scan base-package="com.jd"></context:component-scan>
-
这段代码意味着如果请求没有任何一个Controller中的某一个方法处理,则交给Web服务器默认Servlet处理。
<mvc:default-servlet-handler/> <mvc:annotation-driven></mvc:annotation-driven>
-
-
整个项目的逻辑
- load-on-startup:服务器启动时创建Servlet对象。
- 请求被DispacherServlet拦截,并调用init()方法,获取contextConfigLocation变量的值:classpath:application.xml,经过处理调用application.xml文件,创建Spring容器+实例化类。
- 若该类中含有@controller注解,则将该类中方法上@RequestMapping中的value值添加到Map集合中
- 任何一个请求过来,就与Map集合中的已有的Servlet匹配
- 如果在Map集合中没找到,不用等待,就用默认Servlet处理。
-
三、创建模块
-
在src/main/java中添加一个package,名字叫做com.jd.userinfo,在其中添加一个UserInfoCotroller类,代码如图所示:
由于from表单默认调用GET方法,传到后端的数据会以明文形式出现在网址栏中,例:
Post方法可以避免这一情况,所以需要在注解中加上“method=RequestMethod.Post”准备接受Post方法。 -
在Web Content/WEB-INF文件夹下新建文件夹view,并新建两个jsp文件:login.jsp和success.jsp
(因为WEB-INF中存放的数据最安全,只能用请求转发方式访问)
如果报错了可能是因为缺少servlet包,导入jar包即可 -
在application.xml文件中写入如下代码:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/"></property> <property name="suffix" value=".jsp"></property> </bean>
-
在WebContent目录下创建一个index.jsp,再在com.jd.index包下创建一个IndexController类
index.jsp中代码如下
IndexController中代码如下
-
修改login.jsp中的代码如下:
正如在写UserInfoControl类时说的那样,from表单默认使用的是GET方法,为了不让数据以明文方式传回,特别指明让from表单使用Post方法。 -
修改success.jsp使其显示OK
四、搭建框架
- 如图所示,创建工具类与数据库连接
- 创建userinfo中的Dao层和Service层,实现登陆
- 在UserInfoController.java中进行处理
- 创建fail.jsp文件,当登录失败时返回的页面
- IUserInfoService 中的代码
package com.jd.userinfo;
public interface IUserinfoService {
boolean login(String userName, String password);
}
- UserInfoService 中的代码
package com.jd.userinfo.imp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jd.userinfo.IUserinfoDao;
import com.jd.userinfo.IUserinfoService;
@Service
public class UserinfoService implements IUserinfoService{
@Autowired
private IUserinfoDao userinfoDao;
public boolean login(String userName, String password) {
return userinfoDao.login(userName, password);
}
}
- IUserInfoDao 中的代码
package com.jd.userinfo;
public interface IUserinfoDao {
boolean login(String userName, String password);
}
- UserInfoDao 中的代码
package com.jd.userinfo.imp;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.stereotype.Component;
import com.jd.tool.DBTool;
import com.jd.tool.IRowMapper;
import com.jd.userinfo.IUserinfoDao;
@Component
public class UserinfoDao implements IUserinfoDao{
public boolean login(String userName, String password) {
String sql = "select * from userinfo where user_name=? and password=?";
class RowMapper implements IRowMapper{
boolean state;
public void rowMapper(ResultSet rs) {
try {
if(rs.next()) {
state = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
RowMapper rowMapper = new RowMapper();
DBTool.select(sql, rowMapper, userName, password);
return rowMapper.state;
}
}
- UserInfoController中的代码
package com.jd.userinfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class UserInfoController {
@Autowired
private IUserinfoService userinfoService;
@RequestMapping(value="userinfo/login.do", method=RequestMethod.POST)
public String login(String userName, String password) {
boolean state = userinfoService.login(userName, password);
if(state) {
return("success");
}else {
return("fail");
}
}
}