说明:因为本人是初学者,所以不是小白的掠过,写的太啰嗦了,你没有这个耐心看完的。观看本文之前,请先看前文 《基于IDEA的SSH项目之一:创建web项目》
一、下载相关 Jar包。
1、使用spring-framework-3.2.0.RELEASE ,下载地址见:http://repo.spring.io/libs-release-local/org/springframework/spring/。
2、下载完成后,解压后libs文件夹即时需要的Jar包。(不喜欢sources和javadoc的小伙伴可以去除这些包)
3、下载其他必须的Jar包。包括数据库驱动、JSTL标签等。如下图,在WEB-INF目录下建一个lib文件夹,可以将这些包放置其中。
二、将Jar包导入到项目中
1、打开项目配置窗口,选择Libraries,中间一栏中点击“+”按钮,弹出设置Jar库的名称,填写lib。确定后弹出选择Module对话框(这个Jar库需要应用到哪个Module中),暂时只有一个Modulu:SpringPro,选中OK即可。
2、此时项目配置窗口的右边栏是一个选择Jar包的界面,点击Attach Classes...,浏览到刚才新建的lib文件夹,选中所有的Jar,导入进来。
3、按照同样的步骤,将Spring的Jar包也导入进来。这个Jar库取名叫做Spring。
4、切换到Modules配置项,中间栏选中SpringPro,右边栏选中Dependencies,会发现刚才配置的Jar库已经引入到了Module的依赖关系中。
5、仍然是这个页面,中间一栏选中Web,右边栏选中Web Settings,此时会发现Web Settings中的中间也多了刚才配置的Jar库。将这两个Jar默认的Do not package 改为Copy files to,复制到WEB-INF/lib下。
三、编写Spring配置文件
1、在src目录下新建一个Spring的配置文件applicationContext.xml,内容先放空。(这里的每一个头文件我也不是很清楚它的含义,先复制过来)
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
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-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
</beans>
2、此时打开项目配置,选中Module配置项,中间一栏在SpringPro下自动出现了Srping(如果没有出现,没有关系,选中SpringPro右键,new,Spring即可)。
3、在右边栏中点击New File Set..,在弹出的对话框中选择刚才创建的applicationContext.xml即可。
4、此时的项目目录结构如下所示。(PS:此时如果去启动Tomcat服务,还是可以正常启动的)(PS:如果你要深究的话,我可以告诉你,目前这个lib文件夹中总共有66个jar包,包括Spring的sources和javadoc)
四、配置Spring容器。
1、修改web.xml文件。修改之前是这样子的。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</web-app>
修改之后变为这样子。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!--①从类路径下加载Spring配置文件,classpath关键字特指在类路径下加载-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--② 负责启动Spring容器的监听器,他将引用处的①上下文参数获得的Spring配置文件-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--③ 声明一个servlet,让Spring也拥有一个配置文件,并且名字为servlet-name-servlet.xml。因此在此处,必须有一个叫 mvc-dispatcher-servlet.xml 的文件放置于WEB-INF下-->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<!--④ 对③处定义的servlet的URL路径进行定义-->
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
3、此时如果能够正常启动Tomcat服务,说明这一段的配置都没有问题了。
<%@ page import="org.apache.commons.lang3.StringUtils" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%
String error = (String)request.getAttribute("error");
String errorMsg = (String)request.getAttribute("errorMsg");
%>
<html>
<head>
<title>网站登录</title>
</head>
<body>
<% if(StringUtils.isNotEmpty(error)) { %>
<font color="red"><%=errorMsg%></font>
<% } %>
<form action='/admin/loginCheck.html' method="post">
用户名:
<input type="text" name="userName"><br>
密 码:
<input type="password" name="password"><br>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</form>
</body>
</html>
main.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>网站主页</title>
</head>
<body>
欢迎您进入网站主页!
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Simple jsp page</title>
<script>
window.location.href = "/admin/login.html";
</script>
</head>
<body>
<h1>这是一个IDEA WEB项目</h1>
</body>
</html>
2、显然,目前这样子是无法正常跳转的,需要使用到SpringMVC模式中的Controller控制器来实现跳转。我们之前在web.xml中已经定义了由DispatcherServlet来完成。因此在这里建一个LoginController.java的Controller控制器来实现跳转。由于还没有引入数据库,这里暂时先写死用户名为admin,密码为123456,其他都是不合法的用户名及密码。
package com.hzb.web;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
//① 标注成为一个SpringMVC的Controller
@RequestMapping(value = "/admin")
public class LoginController {
@RequestMapping(value = "/login.html")
//② 负责处理 /admin/login.html 的请求(需要加上类的映射请求路径),与index.jsp中的跳转目标保持一致
public String loginPage() {
return "login";
}
@RequestMapping(value = "/loginCheck.html")
//② 负责处理 /admin/loginCheck.html 的请求 ,与login.jsp页面form表单的action保持一致
public ModelAndView loginCheck(HttpServletRequest request,HttpServletRequest response) {
if ("admin".equals(request.getParameter("userName")) && "123456".equals(request.getParameter("password"))) {
return new ModelAndView("main");
} else {
return new ModelAndView("login").addObject("error", "error").addObject("errorMsg", "用户名或密码错误");
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- 扫描web包,应用Spring的注解 -->
<context:component-scan base-package="com.hzb.web"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>