搭建SpringMVC详解
文章目录
一、 创建一个web项目
- 新建一个Dynamic Web Project项目,版本选择2.5
- 删除Java Sources中的src文件夹,新建如下四个资源文件夹:
- 拷入如下所示的jar包:
二、 配置文件
- 打开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容器,并且开始扫描,将对象放入容器中。
ContextConfigLocation classpath:application.xml -
代表在服务器启动时创建Servlet对象。
<load-on-startup>1</load-on-startup>
-
加上"/"代表此Servlet拦截所有请求。
<url-pattern>/</url-pattern>
-
-
application.xml文件配置
-
指定base-package开始的包自动实例化,注意:包内类必须添加有 Controller、Service、Component类注解
<context:component-scan base-package="com.zzu"></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类,代码如图所示:
-
在Web Content/WEB-INF文件夹下新建文件夹view,并新建两个jsp文件:login.jsp和success.jsp
(因为WEB-INF中存放的数据最安全,只能用请求转发方式访问)
(报错是因为缺少servlet包,导入jar包即可) -
在application.xml文件中写入如下代码:
-
在WebContent目录下创建一个index.jsp,再在com.zzu.index包下创建一个IndexController类
index.jsp中代码如下
IndexController中代码如下 -
修改login.jsp中的代码如下:
-
修改success.jsp使其显示OK
-
此时发布项目,访问http://127.0.0.1:8080/test会出现如下登陆页面网页
输入用户名密码后会显示OK。
但此时会发现网址栏显示出用户名和密码,是因为from表单默认调用GET方法。
所以在login.jsp页面中修改from表单调用POST方法<form action="${path }userinfo/login.do" method="post">
并修改UserInfoController类中的RequestMapping注解如下
@RequestMapping(value="/userinfo/login.do",method=RequestMethod.POST)
四、搭建框架
- 如图所示,创建工具类与数据库连接
- 创建userinfo中的Dao层和Service层,实现登陆
- 在UserInfoController.java中进行处理
- 创建fail.jsp文件,当登录失败时返回的页面
-
IUserInfoService 中的代码
package com.zzu.userinfo; public interface IUserInfoService { public boolean login(String userName, String password); }
-
UserInfoService 中的代码
package com.zzu.userinfo.imp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zzu.userinfo.IUserInfoDao; import com.zzu.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.zzu.userinfo; public interface IUserInfoDao { public boolean login(String userName, String password); }
-
UserInfoDao 中的代码
package com.zzu.userinfo.imp; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.stereotype.Repository; import com.zzu.tool.db.DBTool; import com.zzu.tool.db.IRowMapper; import com.zzu.userinfo.IUserInfoDao; @Repository public class UserInfoDao implements IUserInfoDao { public boolean login(String userName, String password) { String sql = "select * from user_info where user_name = ? and password = ?"; class RowMapper implements IRowMapper{ boolean state; public void rowMapper(ResultSet resultSet) { try { if(resultSet.next()) { state = true; } } catch (SQLException e) { e.printStackTrace(); } } } RowMapper rowMapper = new RowMapper(); DBTool.select(sql, rowMapper, userName, password); return rowMapper.state; } }
-
UserInfoController中的代码
package com.zzu.userInfo; import javax.servlet.http.HttpServletRequest; 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, HttpServletRequest request) { System.out.println(userName+":"+password); if(userInfoService.login(userName, password)) { request.getSession().setAttribute("userName", userName); return "success"; } return "fail"; } }