2021-07-09

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
在这里插入图片描述

根据图示选择
在这里插入图片描述
点击右侧的加号,选择第一个
在这里插入图片描述
根据图示选择
在这里插入图片描述
修改标注处。
在这里插入图片描述
最后就可以点击运行运行这个项目了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值