idea创建spring mvc项目以及拦截器的简单实现
一、idea搭建spring mvc项目
本文通过maven搭建项目,maven对jar包的自动管理功能使得创建web项目十分方便。maven的安装以及在idea中配置maven本文不做说明,需要安装及配置maven的同学可以参考其他人的博客安装配置,maven的安装配置还是比较容易的。
step1 File -> New- > Project
step2 选择maven中的web骨架
按照图示选择,最后直接next即可。需要注意的是这里面的webapp两个,记得选择maven webapp这个骨架。
step3 输入groupid和artifactid
这里简单说明一下,groupid是一般是公司域名的反写,artifactid是项目的编号,可以认为是你创建的项目的名字。
step4 配置maven
step5 确认信息,点击finish,创建项目完成
二、项目架构分析
因为是根据webapp的骨架创建的项目,所以创建完成之后,就可以看到基本的架构了,当然我们还需要手动添加一部分内容。首先看一下创建好的项目结构是怎样的。
2.1 项目初始结构
刚创建完的web项目,主要由src和pom.xml组成,在src中有main目录、webapp目录、WEB-INF目录,在WEB-INF目录里面有一个web的配置文件。index.jsp和WEB-INF存在在webapp目录下,是默认的首页。
2.2 配置pom文件
先把需要的jar包都导入进去,这里我直接把我的配置贴出来了,是可以直接使用的。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.2</version>
<!-- <scope>test</scope>-->
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
2.3 配置web.xml
这里我也是直接把配置文件贴出来了,一方面是方便自己以后查阅web的配置,另一方面和大家一起学习。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2.4 在配置spring-mvc之前,先创建java目录和resources目录
在main目录下按照图示分别创建java文件夹和resources文件夹,创建完之后如下图所示。
此时创建好的java目录和resources目录都只是单纯的文件及目录,我们还需要分别把java目录和resources目录标注为代码目录和资源目录。
标注完成之后,此时的目录结构如下图所示。
可以看到java目录和resources目录的颜色都发生了变化。
2.5 配置spring-mvc.xml文件
在resources目录中创建spring-mvc.xml文件。
new的时候直接选择file即可,注意命名的时候加上后缀.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task" xmlns:mcv="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd">
<!--开启注解-->
<mvc:annotation-driven/>
<!--处理静态资源-->
<mvc:default-servlet-handler/>
<mcv:view-controller path="/" view-name="login"/>
<context:component-scan base-package="com.testcompany.testproject.controller">
</context:component-scan>
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.shuai.test.controller.interceptor.Authorization"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
2.6 在Java目录下创建代码
按照图示创建相关的文件夹及java代码
其中
User类中的代码如下:
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
}
LoginController代码如下:
@Controller
public class LoginController {
@RequestMapping(value = "login", method = GET)
public String index() {
return "login";
}
@RequestMapping(value = "/login", method = POST)
public String login(@RequestParam("username") String username,
@RequestParam("password") String password, HttpSession session) {
if (username.equals("shuai") && password.equals("123456")) {
User user = new User();
user.setId(1);
user.setUsername(username);
user.setPassword(password);
session.setAttribute("user", user);
return "main";
}else {
return "login";
}
}
@RequestMapping("/public")
public String plcview() {
return "public";
}
@RequestMapping("/private")
public String priview() {
return "private";
}
@RequestMapping("/main")
protected String mainview() {
return "main";
}
}
Authorization的代码如下:
public class Authorization implements HandlerInterceptor {
private static final String[] URI = {"/login","/public"};
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("拦截器开始处理-->");
boolean flag = false;
String path = httpServletRequest.getServletPath();
for (String s: URI) {
if (path.contains(s)) {
flag = true;
break;
}
}
if (!flag) {
User user = (User) httpServletRequest.getSession().getAttribute("user");
if (user == null) {
System.out.println("拦截请求,请登录!");
httpServletRequest.getRequestDispatcher("login").forward(httpServletRequest,httpServletResponse);
}else {
System.out.println("已经登录,权限开放!");
flag = true;
}
}
return flag;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
2.7 创建几个jsp页面
这几个页面中,login页面和public页面是无需登录即可访问的,main页面和private页面需要登录才可以访问,这里主要贴一下login的页面,其他页面我就只写了一句话,所以你们可以自行创建这些页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login" method="post">
<table>
<tr>
<td><label>登录名:</label></td>
<td><input type="text" id="username" name="username"></td>
</tr>
<tr>
<td><label>密码:</label></td>
<td><input type="password" id="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>
这里说明以下,这个骨架自带的index.jsp页面被我删除了,因为这里我们不需要这个页面。
2.8 配置tomcat
点击图示位置
点击加号
根据图示选择tomcat
根据图示选择
点击右侧的加号,选择第一个
根据图示选择
修改标注处。
最后就可以点击运行运行这个项目了。