搭建Spring MVC详解

1、新建一个Web项目


  1. 建立一个web项目,版本选择2.5
  2. 删除src,右键选择Source Folder ,创建四个名字分别为src/test/javasrc/test/resourcesrc/main/javasrc/main/resource的文件夹
  3. 拷入如图所示的jar包
    在这里插入图片描述

2、配置文件


  1. web.xml中创建Spring容器并向其中添加对象在这里插入图片描述
  2. src/main/resource中 右键选择Spring Bean Configuration File创建一个名字为application.xml的文件。
    在这里插入图片描述
  3. application.xml的页面下方点击namespace勾选在这里插入图片描述
  4. application.xml中写入如下代码

在这里插入图片描述

解释:

1、

<servlet-class>
      org.springframework.web.servlet.DispatcherServlet
</servlet-class>

点击如图所示的DispatcherServlet.class,右键选择Copy Qualified Name,得到servlet路径名;
在这里插入图片描述
2、写在DispatcherServlet中,代表当Tomcat启动时此servlet调用init()方法,加载classpath:application.xml,产生一个Spring容器,并且开始扫描,将对象放入容器中。

    <init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:application.xml</param-value>
  	</init-param>

3、代表在服务器启动时创建Servlet对象
<load-on-startup>1</load-on-startup>
4、 加上"/"代表此Servlet拦截所有请求。

<servlet-mapping>
  	<servlet-name>DispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
</servlet-mapping>

5、
(1)
指定base-package开始的包自动实例化,注意:包内类必须添加有 Controller、Service、Component类注解

	<context:component-scan base-package="com.jd"></context:component-scan>

例:扫描以“com.jd”开头的包,并且使包里面的加有以上三个注解中任意一个注解的类 创建对象

(2) 如果请求没有任何一个Controller中的某一个方法处理,则交给Web服务器默认Servlet处理。

	<mvc:default-servlet-handler/>
   	<mvc:annotation-driven></mvc:annotation-driven>

6、逻辑:

(1)load-on-startup:服务器启动时创建Servlet对象
(2)获取contextConfigLocation值
(3)classpath:application.xml:创建Spring容器+实例化类
(4)若该类中含有@controller注解,则将该类中方法上@RequestMapping中的value值添加到Map集合中
(5)任何一个请求过来,就与Map集合中的已有的Servlet匹配
(6)如果在Map集合中没找到,不用等待,就用默认Servlet处理。

3、创建模块


  1. src/main/java中添加一个package,名字叫做com.jd.userinfo,在其中添加一个Class类,代码如图所示:在这里插入图片描述
  2. WebContent目录下添加两个jsp文件,如图所示出现错误,是因为没有引入jar包,在lib目录下引入servlet-api.jar即可。在这里插入图片描述
  3. application.xml中写入如下代码在这里插入图片描述
  4. 因为WEB-INF目录下的文件很安全,所以可在其目录下添加文件夹view,将login.jsp和success.jsp添加进去。
    此时无法访问页面,因为在WebContent直接目录下没有显示页面
  5. 在WebContent目录下创建一个index.jsp,再创建一个IndexController
    index.jsp页面
    在这里插入图片描述
    在这里插入图片描述
  6. 此时运行程序,登陆页面如图所示
    在这里插入图片描述
    在这里插入图片描述
    登陆成功后进入success.jsp,但显示出来userName和password,所以在login.jsp页面加上
    <form action="${path }userinfo/login.do" method="post">
    改成post请求保证安全,不显示姓名和密码
  7. 因为此时login.jsp是post请求,而UserInfoController中的@RequestMapping(value="/userinfo/login.do",method=RequestMethod.POST)
    默认Get请求,所以将代码改成上述代码,保证请求匹配。

解释

当Controller发送返回值“success”后,进入此配置进行拼接,找到正确的路径,进入成功页面。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>//前缀
		<property name="suffix" value=".jsp"></property>//后缀
	</bean>

4、搭建框架


  1. 如图所示,创建工具类与数据库连接
  2. 创建userinfo中的Dao层和Service层,实现登陆
  3. UserInfoController.java中进行处理
  4. 创建fail.jsp文件,当登录失败时返回的页面

List item

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.Repository;

import com.jd.tool.db.DBTool;
import com.jd.tool.db.IRowMapper;
import com.jd.userinfo.IUserInfoDao;

@Repository
public class UserInfoDao implements IUserInfoDao{

	public boolean login(String userName, String password) {

		String sql = "select user_name 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();
		try {
			DBTool.select(sql, rowMapper, userName,password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rowMapper.state;
	}
}


UserInfoControlle代码

package com.jd.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) {
		if (userInfoService.login(userName, password)) {
			request.getSession().setAttribute("userName", userName);//防止非法登陆
			return "success";
		}
		return "fail"; 
		
	}
}

解释:

1、@Component、@Repository、@Controller、@Service
联系application.xml中的此行代码
<context:component-scan base-package="com.jd"/>
将自动扫描路径下面的包,如果一个类带了以上任意一个注解,将自动添加到Spring容器中。
2、@Autowired:代表在Spring MVC框架中,加上次注解,相当于创建对象。

猜你喜欢

转载自blog.csdn.net/qq_42865575/article/details/89713298
今日推荐