java web开发入门十二(idea创建maven SSM项目需要解决的问题)基于intellig idea(2019-11-09 11:23)

一、spring mvc action返回string带双引号问题

解决方法:

在springmvc.xml中添加字符串解析器

    <!-- 注册string和json解析适配器 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>

                <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            </list>
        </property>
    </bean>

二、css文件中引用的img url写法

暂未解决

三、action请求去掉.action

1.web.xml配置

 <!-- 注册springmvc核心控制器-->
    <servlet>
        <!--servlet-name的值对应一个文件:/WEB-INF/DispatcherServlet-servlet.xml   -->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!-- 指定application.xml文件 -->
            <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>*.action</url-pattern>-->
        <!--默认匹配所有请求-->
        <!--Spring MVC将捕获Web容器所有的请求,包括静态资源的请求,Spring MVC会将它们当成一个普通请求处理-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

2.修改spring.xml文件,让静态文件交给servlet处理

参考:https://www.cnblogs.com/jdbn/p/11020374.html

<!-- 配置SpringMVC -->
    <!-- 1.开启SpringMVC注解模式 -->
    <!-- 简化配置:
        (1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter
        (2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持
    -->
    <mvc:annotation-driven/>

    <!--
    静态资源交给servlet处理,
    在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,
    会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,
    它会像一个检查员,对进入DispatcherServlet的URL进行筛查,
    如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,
    如果不是静态资源的请求,才由DispatcherServlet继续处理。
    -->
    <mvc:default-servlet-handler/>

四、登录拦截器

1.编写LoginInterceptor

package com.eggtwo.euq.interceptor;

import com.eggtwo.euq.dto.CurrentSysUser;
import com.eggtwo.euq.utils.CacheUtil;
import com.eggtwo.euq.utils.ConfigUtil;
import com.eggtwo.euq.utils.CookieUtil;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class LoginInterceptor implements HandlerInterceptor {
    private boolean isAjaxRequest(HttpServletRequest request) {
        if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
            //如果是ajax请求响应头会有,x-requested-with
            System.out.print("发生ajax请求...");
            return true;

        }
        return false;
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String requestUri = request.getRequestURI(); //请求完整路径,可用于登陆后跳转
        String contextPath = request.getContextPath();  //项目下完整路径
        String url = requestUri.substring(contextPath.length()); //请求页面
        System.out.print("发生拦截...");
        System.out.println("来自:" + requestUri + "的请求");

        //拿到cookie
        //也就是获取session里的登录状态值
        String cookieKey = ConfigUtil.getBossCookieKey();
        String cookieValue = CookieUtil.getByName(request, cookieKey);
        CurrentSysUser currentSysUser =null;
        String errorMsg=null;
        if (cookieValue == null) {
            errorMsg="no login,please login";
        }else{
            currentSysUser = CacheUtil.getT(cookieValue);
            if (currentSysUser == null) {
                errorMsg="no login,please login";
            }
        }
        if (errorMsg!=null){
            if (isAjaxRequest(request)) {
                response.setContentType("application/json; charset=utf-8");
                PrintWriter writer = response.getWriter();
                writer.print("{type:0,msg:‘"+errorMsg+"‘}");
                writer.close();
                response.flushBuffer();
            } else {
                String basePath= request.getContextPath();
                response.sendRedirect(basePath+"/account/login?error="+errorMsg);
            }
            return false;//返回false不走下面的方法
        }
        //更新缓存过期时间
        CacheUtil.remove(cookieValue);
        CacheUtil.set(cookieValue, currentSysUser, ConfigUtil.getBossCookieTimeoutSecond());
        //更新cookie过期时间--覆盖原有的cookie
        CookieUtil.deleteCookie(response, cookieKey);
        //写入cookie
        CookieUtil.addCookie(response, cookieKey, cookieValue, ConfigUtil.getBossCookieTimeoutSecond());

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2.spring mvc中配置要拦截的action

 <!--配置拦截器, 多个拦截器,顺序执行 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 先匹配所有路径,然后排除不需要检查的路径 -->
            <mvc:mapping path="/**"/>

            <!--不拦截的action-->
            <mvc:exclude-mapping path="/account/login"/>
            <mvc:exclude-mapping path="/account/logout"/>

            <!-- 网站的登录路径是 "http://localhost:8080/cultivate-job/"
                路径path="/"表示的路径就是网站入口路径,
                也就是说拦截器只方向两种请求:
                1. 错误页面,直接访问jsp页面,这些页面不在WEB-INF目录下,可以直接访问
                2. 网站入口请求,检查到没有登录,会重定向到网站入口路径,再被定向到登录页面
            -->
            <mvc:exclude-mapping path="/"/>
            <!-- 以下是静态资源 -->
            <mvc:exclude-mapping path="/content/**" />
            <mvc:exclude-mapping path="/images/**" />
            <mvc:exclude-mapping path="/js/**" />
            <mvc:exclude-mapping path="/css/**" />
            <mvc:exclude-mapping path="/upload/**" />
            <mvc:exclude-mapping path="/download/**" />

            <!-- 自定义拦截器路径 -->
            <bean class="com.eggtwo.euq.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
        <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
    </mvc:interceptors>

五:异常拦截器

LoginInterceptor

原文地址:https://www.cnblogs.com/eggTwo/p/11826280.html

时间: 2024-08-03 17:30:47

java web开发入门十二(idea创建maven SSM项目需要解决的问题)基于intellig idea(2019-11-09 11:23)的相关文章

java web开发入门十(idea创建maven SSM项目)基于intellig idea

一.搭建项目骨架 二.配置pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apa

java web开发入门二(struts)基于eclispe

JavaBean JavaBean,  咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提供无参数的构造方法 2)类中属性都必须私有化(private) 3)该类提供公开的getter 和 setter方法 getName() setName(String name) 注意: boolean类型的get方法名称叫 isXXX()方法  public boolean isAcitve()

java web开发入门九(Maven使用&amp;idea创建maven项目)基于intellig idea

Maven 1.解决的问题 jar包的依赖和管理:版本.依赖关系等 自动构建项目 2.maven介绍 1.Maven是什么? Apache Maven是一个软件项目管理的综合工具.基于项目对象模型(POM)的概念,提供了帮助管理构建.文档.报告.依赖.发布等方法,Maven简化和标准化项目建设过程.处理编译,分配,文档,团队协作和其他任务的无缝连接. Maven增加可重用性并负责建立相关的任务. 2.Maven好处 可以将项目过程规范化.自动化.高效化以及强大的可扩展性,利用maven自身及其插

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/classes/package/NoodlesServlet.java 打包:jar cvf Restaurant.war . 移动:mv Restaurant.war .../webapps/ 项目复杂时:比如项目文件很多 -- IDE如eclipse --> IDE式:(如eclipse) 下载第三方依赖

java web开发入门一(servlet和jsp)基于eclispe

servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomcat中webapps目录下. 1.开发一个servlet步骤: 1)在src下新建包并编写java类,继承HttpServlet类 2)重写doGet和doPost方法 package com.eggtwo.boss; import java.io.IOException; import javax

Java Web开发入门之Servlet(二)

简介 我也苦恼自己的博客书写格式很烂,标题+代码格式.因为每天课程量比较大,没时间花在书写格式上面,如看不习惯请多多见谅.我坚持每天书写博客主要是养成一个习惯,并一直延续下去,虽然内容很空泛,目的也算达到了,总之为了巩固知识点,坚持不懈 Servlet快速入门 0. Servlet简介 什么是servlet 它其实就是java类,运行在服务器端,主要用途就是处理用户发送HTTP请求,并且作出响应 学习两个包:javax.servlet/javax.servlet.http Servlet容器就是

java web开发入门

一.Tomcat服务器常见启动问题: (1).Java_home环境变量,由于tomcat服务器的bin目录中的一些jar文件必须使用到java类库,所以必须先配置Java_home环境变量. (2).端口占用问题 (3).Catalina_home环境变量的问题,如果配置了catalina_home环境变量,则默认启动的是catalina_home所指向的tomcat服务器. 二.Tomcat目录结构: (1).bin:存放启动和关闭tomcat的脚本文件. (2).conf:存放tomcat

java web开发入门七(mybatis)基于intellig idea

mybatis 一. 入门开发步骤 1.导入相关jar包 mybatis3.4.2核心开发包 asm-5.1.jarcglib-3.2.4.jarcommons-logging-1.1.3.jarlog4j-1.2.17.jarmybatis-3.4.2.jar mysql驱动包 mysql-connector-java-5.1.7-bin.jar 2.定义实体及实体映射文件 定义member实体 package com.eggtwo.entity; import java.math.BigDe

java web开发入门四(spring)基于intellig idea

spring 1.spring简介 Spring框架,可以解决对象创建以及对象之间依赖关系的一种框架. 且可以和其他框架一起使用:Spring与Struts,  Spring与hibernate (起到整合(粘合)作用的一个框架) Spring提供了一站式解决方案: 1) Spring Core  spring的核心功能: IOC容器, 解决对象创建及依赖关系 2) Spring Web  Spring对web模块的支持. -à 可以与struts整合,让struts的action创建交给spr