木子-工具-开发工具小知识点

目录

Idea篇:

       1、如何热处理

       2、idea在jsp页面编写java内置代码不会自动提示问题解决

       3、 解决application.properties内的配置不会高亮问题(有强迫症。。不高亮不习惯)

      4、遇到Error running 'allowanceTest': Unable to open debugger port (127.0.0.1:8081): java.net.BindException "Address already in use: NET_Bind问题如何解决

SpringBoot篇

          1、 如何配置拦截器(如果不想用我写的老版继承类建议别看了。。视图解析器的继承类过期了,我们用最新的WebMvcConfigurationSupport,结果全面接管了配置。。。我被搞疯了,可以静态访问页面,但是无法后台跳转到静态页面。)

           2、SpringBoot如何配置servlet

           3、SpringBoot如何搭配JSP


Idea篇:

       1、如何热处理

                   首先,打开你的idea项目中pom.xml

              修改两处

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

第二步摁下快捷键Ctrl+Shift+A打开快速搜索

输入:registry然后回车,打开一个窗口,将我框起来的部分勾选,一下然后点close关闭

 

第三步还是快捷搜索,输入make project

我的idea是最新版的,所以和老版的部分不太一样找不到makeproject的话在的底下,可能别的里面,仔细找找即可

//------------------------------------------------------------------------------------//

       2、idea在jsp页面编写java内置代码不会自动提示问题解决

     此解决办法仅针对在jsp页面编写java代码没有自动提示问题,将下方图片内的勾选即可

//------------------------------------------------------------------------------------//

       3、 解决application.properties内的配置不会高亮问题(有强迫症。。不高亮不习惯)

将图片内的勾选框去掉即可

//------------------------------------------------------------------------------------//

       4、遇到Error running 'allowanceTest': Unable to open debugger port (127.0.0.1:8081): java.net.BindException "Address already in use: NET_Bind问题如何解决

如下图所示,我描述一下问题出现的环境,一个idea,一个tomcat,两个项目,项目A   HTTP使用8081端口+JMX使用9001端口        项目B使用8088端口+1099端口      

每次A启动完成后,启动B项目就会报这个错,很多人以为是端口被占用,杀死进程就好,其实不是的,确实是端口被占用了,但不用杀死。

解决方法如下图所示,把这个的port改成别的端口就行了

//------------------------------------------------------------------------------------//

 

SpringBoot篇

          1、 如何配置拦截器(如果不想用我写的老版继承类建议别看了。。视图解析器的继承类过期了,我们用最新的WebMvcConfigurationSupport,结果全面接管了配置。。。我被搞疯了,可以静态访问页面,但是无法后台跳转到静态页面。)

   springBoot因为整合了框架,所以不怎么使用xml配置,但是我们依然要进行某些特殊的配置,比如拦截器,MVC视图映射等等

这里以一个登陆为栗子

1、描述这个拦截器拦截的是什么?

         我有一个登陆页面,登陆成功后跳转进templates文件夹内的一个页面,众所周知templates是不可以被外部直接访问的,因为我做了一个视图解析器,进行了路径替换。发现可以被外部直接访问。我要拦截的就是所有没有从登陆页面登陆进后台的访问路径。

2、首先我们先写一个拦截器的class类调用HandlerInterceptor抽象类,并实现preHandle方法(该方法是在被调用别的方法时先进入该方法,是对整个项目所有的路径都进行拦截(前提要被调用))

     Object username=request.getSession().getAttribute("username");是我在登陆账号进入后台的方法加了一个session,如果成功该session赋值,代表是正确登陆的,在这里要作为验证是非法登陆还是正常登陆的依据

/**
 * 拦截器,进行某些检查
 */
public class handlerInterceptor implements HandlerInterceptor {

    //目标方法执行之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object username=request.getSession().getAttribute("username");
        if(username==null){
            //未登陆转发到登陆页面
            request.setAttribute("msg","没有权限");//这是我在登陆页面有一个p标签,不是重点。。
            request.getRequestDispatcher("/").forward(request,response);
            //上面是request的重新跳转方法,转发和重定向,至于那个/是我在第三步的视图解析器中定义的
            //一个跳转到登录页面的自定义路径
            //(比如你想让系统将未登录时跳转到哪个路径,你自己写你自己的指定的路径就好)
        }else{
            //已登录
            return true;
        }
        return false;
    }

3、编写一个MVC视图解析器

       首先要继承WebMvcConfigurerAdapter这个类,重写它的某些方法

        其次不要用@EnableWebMvc注解,会导致,SpringBoot默认的MVC配置完全失效变成我们自定义的配置接管,我们弄太累了

        第一个方法是指定,我在浏览器输入别的路径时系统会自动给我跳转到我指定的页面,或者后台重定向/跳转时输入我自定义的一个没有的参数,自动知道我需要它跳转到哪个页面(我用的templates模板,去了前缀和后缀,所以index只是一个html的名字)

        第二个方法是注册和调用拦截器的,网上有说SpringBoot默认了不拦截静态资源,但是我这个不知道为什么会拦截我静态资源中的css,我的css都在asserts文件夹下,所以我设置默认不拦截asserts文件夹下所有。

       同时记得加上你登陆的页面和登陆方法也不要拦截。。。不然你还没有session就被pass了

/@EnableWebMvc全面接管MVC视图映射,系统默认的会失效
@Configuration//代表的我们自定义一个视图映射
public class myMvcConfig extends WebMvcConfigurerAdapter {
    //页面输入别的路径跳转到指定地址
    //可以指定前台访问动态页面
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //super.addViewControllers(registry);
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/dashboard.html").setViewName("dashboard");
    }

    //注册拦截器的
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new handlerInterceptor())
                .addPathPatterns("/**")//添加要拦截的请求,可多个,也可单写
                .excludePathPatterns("/", "/user/login","/asserts/**","/webjars/**");//因为写了拦截所有的,所以要给登陆页面和登陆按钮事件加上不拦截
    }
}

然后就OK了基本上,八九不离十吧,我最近也在学习springBoot。所以不是很明白,我也知道网上百度的都是别人的思路,我都看不懂。如果看不懂这个的,可以作为一个参考就好了

//------------------------------------------------------------------------------------//

           2、SpringBoot如何配置servlet

首先写一个servlet的类,继承HttpServlet类

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "Servlet",urlPatterns = "/servlet")
public class Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

然后在项目的入口,也就是SpringBoot的启动器上加上一行注解:@ServletComponentScan



import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan //作用:在启动时,Springboot会扫描servlet注解,并将该类实例化
public class BookApplication {

    public static void main(String[] args) {
        SpringApplication.run(BookApplication.class, args);
    }

}

然后启动项目:输入路径http://localhost:9877/servlet

路径中的/servlet请看我在第一张图片中定义的url的命名

结果:

//------------------------------------------------------------------------------------//

           3、SpringBoot如何搭配JSP

 1、首先我们先引入jsp的2个jar

        <!--jstl标签库的坐标        jsp-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <scope>provided</scope>
        </dependency>

        <!--tomcat中对于jsp处理的一个引擎        jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>9.0.19</version>
        </dependency>

2、配置文件中加上jsp的配置前缀和后缀

##定义jsp的前缀与后缀
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

3、编写一个实体类


public class User {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }
}

4、编写一个Controller

/**
 * 整合jsp的Controller
 */
@Controller
public class JspController {

    /**
     * 处理请求产生数据
     */
    @RequestMapping("/jspDome")
    public String jspDome(Model mode){
        List<User>list=new ArrayList<>();
        list.add(new User("1","11"));
        list.add(new User("2","22"));
        list.add(new User("3","33"));
        mode.addAttribute("list",list);
        return "/dome";
    }
}

5、我们可以能发现无法创建jsp.这是因为我们idea默认支持html。我们想用jsp就需要让系统知道

(1)首先添加jsp模板

(2)给项目添加WEB

(3)到上一步为止我们最多就是生成的一个WEBAPP的文件夹。然后我们需要根据我们配置文件定义的路径自己添加下级文件夹

(4)这时候我们在jsp文件夹下就可以new出jsp文件了

6、我们现在已经创建成功后台以及前台的。我们需要在jsp页面将我们的后台数据循环遍历出来

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>xxx</title>
</head>
<body>
    <table>
        <c:forEach items="${list}" var ="list">
            <tr><td>${list.id}</td><td>${list.name}</td></tr>
        </c:forEach>
    </table>
</body>
</html>

7、访问后台路径测试一下(OK了)

//------------------------------------------------------------------------------------//

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值