日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC入门简单静态资源处理

發布時間:2023/12/31 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC入门简单静态资源处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring入門簡單靜態資源處理

  • Springmvc簡介及項目搭建
    • 1. 什么是springMVC?
    • SpringMVC處理請求的流程
    • 3. SpringMVC核心開發步驟
    • 4. SpringMVC的組件
    • 5. 如何在項目中添加springmvc
  • Springmvc之helloword實現
  • 簡單CRUD及返回值處理
    • springmvc對靜態資源的處理

Springmvc簡介及項目搭建

1. 什么是springMVC?

Spring Web MVC是一種基于Java的實現了MVC設計模式的、請求驅動類型的、輕量級Web框架。

SpringMVC處理請求的流程

首先用戶發送請求–>DispatherServlet(拿到請求url并且處理獲得請求/xx)
DispatcherServlet–>HandlerMapping(處理器映射器)找到被@requestMapping注解所標記的類或者方法
DispatcherServlet–>HandlerAdapter(處理器適配器)動態的實例化類,動態調用被標記的方法實現業務
HandlerAdapter–>處理器功能處理方法的調用
ModelAndView的邏輯視圖名–>ViewRecolver
View–>渲染
返回控制權給DispatcherServlet,由DispatcherServlet返回呼應給用戶,流程結束

3. SpringMVC核心開發步驟

1 DispatcherServlet在web.xml中的部署描述,從而攔截請求到springMVC
2 HandlerMapping的配置,從而將請求映射到處理器
3 HandlerAdapter的配置,從而支持多種類型的處理器
4 處理器(頁面控制器)的配置,從而刊行功能處理
5 ViewResolver的配置,從而將邏輯視圖名解析為具體的視圖技術

4. SpringMVC的組件

1 前端控制器(DispatcherServlet)
2 請求到處理器映射(HandlerMapping)
3 處理器適配器(HandlerAdapter)
4 視圖解析器(ViewResolver)
5 處理器或頁面控制器(Controller)
6 驗證器(Validator)
7 命令對象(Command 請求參數綁定到的對象就叫命令對象)
8 表單對象(Form Object提供給表單展示和提交到的對象就叫表單對象)

5. 如何在項目中添加springmvc

1 添加相關依賴

因為等會要演示分頁需要導入jstl

<?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.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.liuchunming</groupId><artifactId>ssm</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>ssm Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><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><maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version><!--添加jar包依賴--><!--1.spring 5.0.2.RELEASE相關--><spring.version>5.0.2.RELEASE</spring.version><!--2.mybatis相關--><mybatis.version>3.4.5</mybatis.version><!--mysql--><mysql.version>5.1.44</mysql.version><!--pagehelper分頁jar依賴--><pagehelper.version>5.1.2</pagehelper.version><!--mybatis與spring集成jar依賴--><mybatis.spring.version>1.3.1</mybatis.spring.version><!--3.dbcp2連接池相關 druid--><commons.dbcp2.version>2.1.1</commons.dbcp2.version><commons.pool2.version>2.4.3</commons.pool2.version><!-- log4j2日志配置相關依賴 --><log4j2.version>2.9.1</log4j2.version><log4j2.disruptor.version>3.2.0</log4j2.disruptor.version><slf4j.version>1.7.13</slf4j.version><!--5.其他--><junit.version>4.12</junit.version><servlet.version>4.0.0</servlet.version><lombok.version>1.18.2</lombok.version><!-- redis與spring的整合依賴 --><redis.version>2.9.0</redis.version><redis.spring.version>1.7.1.RELEASE</redis.spring.version><!-- jackson --><jackson.version>2.9.3</jackson.version><jstl.version>1.2</jstl.version><standard.version>1.1.2</standard.version><tomcat-jsp-api.version>8.0.47</tomcat-jsp-api.version></properties><dependencies><!--1.spring相關--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!--2.mybatis相關--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--pagehelper分頁插件jar包依賴--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>${pagehelper.version}</version></dependency><!--mybatis與spring集成jar包依賴--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><!--3.dbcp2連接池相關--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>${commons.dbcp2.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>${commons.pool2.version}</version></dependency><!-- log4j2日志相關依賴 --><!-- log配置:Log4j2 + Slf4j --><!-- slf4j核心包--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version><scope>runtime</scope></dependency><!--核心log4j2jar包--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j2.version}</version></dependency><!--用于與slf4j保持橋接--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version></dependency><!--web工程需要包含log4j-web,非web工程不需要--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j2.version}</version><scope>runtime</scope></dependency><!--需要使用log4j2的AsyncLogger需要包含disruptor--><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>${log4j2.disruptor.version}</version></dependency><!--5.其他--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version><scope>provided</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><!--mybatis與ehcache整合--><dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-ehcache</artifactId><version>1.1.0</version></dependency><!--ehcache依賴--><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.0</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>${redis.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>${redis.spring.version}</version></dependency><!-- jackson --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency><!-- 5.3、jstl、standard --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>${standard.version}</version></dependency><!-- 5.4、tomcat-jsp-api --><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jsp-api</artifactId><version>${tomcat-jsp-api.version}</version></dependency></dependencies><build><finalName>ssm</finalName><resources><!--解決mybatis-generator-maven-plugin運行時沒有將XxxMapper.xml文件放入target文件夾的問題--><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><!--解決mybatis-generator-maven-plugin運行時沒有將jdbc.properites文件放入target文件夾的問題--><resource><directory>src/main/resources</directory><includes><include>*.properties</include><include>*.xml</include></includes></resource></resources><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven.compiler.plugin.version}</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><dependencies><!--使用Mybatis-generator插件不能使用太高版本的mysql驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies><configuration><overwrite>true</overwrite></configuration></plugin><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build> </project>

2 在WEB-INF下添加springmvc-servlet.xml(spring-mvc.xml)


springmvc-servlet.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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 通過context:component-scan元素掃描指定包下的控制器--><!--1) 掃描com.javaxl.zf及子子孫孫包下的控制器(掃描范圍過大,耗時)--><aop:aspectj-autoproxy/><context:component-scan base-package="com.liuchunming"/><!--2) 此標簽默認注冊DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --><!--兩個bean,這兩個bean是spring MVC為@Controllers分發請求所必須的。并提供了數據綁定支持,--><!--@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,讀寫XML的支持(JAXB),讀寫JSON的支持(Jackson)--><mvc:annotation-driven></mvc:annotation-driven><!--3) ViewResolver --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- viewClass需要在pom中引入兩個包:standard.jar and jstl.jar --><property name="viewClass"value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/"/><property name="suffix" value=".jsp"/></bean><!--4) 單獨處理圖片、樣式、js等資源 --><!--<mvc:resources location="/css/" mapping="/css/**"/>--><mvc:resources location="/static/" mapping="/static/**"/><!--<mvc:resources location="/js/" mapping="/js/**"/>--></beans>

3 修改web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><display-name>Archetype Created Web Application</display-name><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 讀取Spring上下文的監聽器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- Spring和web項目集成end --><!-- 防止Spring內存溢出監聽器 --><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><!-- 中文亂碼處理 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!--web.xml 3.0的新特性,是否支持異步--><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- Spring MVC servlet --><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--此參數可以不配置,默認值為:/WEB-INF/springmvc-servlet.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springmvc-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup><!--web.xml 3.0的新特性,是否支持異步--><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

Springmvc之helloword實現

1 @Controller:用于標識處理器類 相當與替換了struts中的<action type=“xxx” 標簽

2 @RequestMapping:請求到處理器功能方法的映射規則,可定義到類和方法
常用參數:value、method
可將@RequestMapping標簽定義到類名處窄化路徑

3 @RequestParam:請求參數到處理器功能處理方法的方法參數上的綁定
常用參數:value、required、defaultValue
注:required設置成false的參數類型必須是引用類型,因為基本數據類型是不能為null的

4 @ModelAttribute:請求參數到命令對象的綁定
常用參數:value
4.1 可用@ModelAttribute標注方法參數,方法參數會被添加到Model對象中(作用:向視圖層傳數據)
4.2 可用@ModelAttribute標注一個非請求處理方法,此方法會在每次調用請求處理方法前被調用(作用:數據初始化)
4.3 可用@ModelAttribute標注方法,方法返回值會被添加到Model對象中(作用:向視圖層傳數據)
但此方法視圖的邏輯圖就會根據請求路徑解析,例如:a/test42 --> /WEB-INF/a/test42.jsp
太麻煩幾乎不用,不用直接保存到Model或ModelAndView中

5@SessionAttributes:指定ModelMap中的哪些屬性需要轉存到session
常用參數:value、types
注1:必須放到class類名處

6 @InitBinder(本章暫不介紹):用于將請求參數轉換到命令對象屬性的對應類型

7@RequestBody(重要):用于目前比較流行的ajax開發的數據綁定(即提交數據的類型為json格式)

@ResponseBody 等于
ObjectMapper om =new ObjectMapper();
String xxx = om.writeValueAsString(“xxx”);
二行代碼
只要有這個@ResponseBody不管你方法的返回值是
String類型還是集合它都能給你返回json數據
第一個springMVC程序:HelloWorld
創建controller包添加HelloContrller

HelloController

package com.liuchunming.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap; import java.util.Map;/*** @author liuchunming* @site www.liuchunming.com* @company xxx公司* @create 2020-10-23 11:17*/ //將這個類交給spring所管理 @Controller public class HelloController {/*** @ResponseBody 等于* ObjectMapper om =new ObjectMapper();* String xxx = om.writeValueAsString("xxx");* 三行代碼* 只要有這個@ResponseBody不管你方法的返回值是* String類型還是集合它都能給你返回json數據** 五種情況* 1、轉發到頁面* 2、轉發到根路徑下的頁面* 3、轉發到requestMapper中* 4、重定向Dao根路徑下的頁面* 5、重定向到requestmapper下* @return*/@ResponseBody@RequestMapping("/hello1")public String hello1() {System.out.println("hello1 springmvc");return "hello1 springmvc";}@RequestMapping("/hello2")public String hello2(){System.out.println("hello2 springmvc 會進入頁面");return "hello";}@ResponseBody@RequestMapping("/hello3")public Map hello3(){System.out.println("hello3 springmvc json");Map map=new HashMap();map.put("total",12);map.put("rows","一串的數據");return map;}/*五種情況* 1、轉發到頁面* 2、轉發到根路徑下的頁面* 3、轉發到requestMapper中* 4、重定向Dao根路徑下的頁面* 5、重定向到requestMapper下* @RequestMapping("/forward1")public String forward1(){System.out.println("進來forward");return "aa";}@RequestMapping("/forward2")public String forward2(){return "forward:/bb.jsp";}@RequestMapping("/forward3")public String forward3(){return "forward:/forward1";}@RequestMapping("/redirect1")public String redirect1(){return "redirect:/bb.jsp";}@RequestMapping("/redirect2")public String redirect2(){return "redirect:/forward1";} */ }

訪問hello1直接返回json串

進入到hello.jsp

集合也是返回json

頁面跳轉五種情況
1、轉發到頁面
2、轉發到根路徑下的頁面
3、轉發到requestMapper中
4、重定向Dao根路徑下的頁面
5、重定向到requestMapper下

轉發:“forward:path”
重定向:“redirect:path”
注1:這兩種跳轉方式將會繞開視圖解析器的前綴和后綴
注2:還有就是如果是在同一controller中則不用使用"/"從根目錄開始,而如果是在不同的controller則一定要從根目錄開始。

HelloController

package com.liuchunming.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap; import java.util.Map;/*** @author liuchunming* @site www.liuchunming.com* @company xxx公司* @create 2020-10-23 11:17*/ //將這個類交給spring所管理 @Controller public class HelloController {/*** @ResponseBody 等于* ObjectMapper om =new ObjectMapper();* String xxx = om.writeValueAsString("xxx");* 三行代碼* 只要有這個@ResponseBody不管你方法的返回值是* String類型還是集合它都能給你返回json數據** 五種情況* 1、轉發到頁面* 2、轉發到根路徑下的頁面* 3、轉發到requestMapper中* 4、重定向Dao根路徑下的頁面* 5、重定向到requestmapper下* @return@ResponseBody@RequestMapping("/hello1")public String hello1() {System.out.println("hello1 springmvc");return "hello1 springmvc";}@RequestMapping("/hello2")public String hello2(){System.out.println("hello2 springmvc");return "hello";}@ResponseBody@RequestMapping("/hello3")public Map hello3(){System.out.println("hello3 springmvc");Map map=new HashMap();map.put("total",12);map.put("rows","一串的數據");return map;}*//*五種情況* 1、轉發到頁面* 2、轉發到根路徑下的頁面* 3、轉發到requestMapper中* 4、重定向Dao根路徑下的頁面* 5、重定向到requestMapper下* */@RequestMapping("/forward1")public String forward1(){System.out.println("進來forward");return "aa";}@RequestMapping("/forward2")public String forward2(){return "forward:/bb.jsp";}@RequestMapping("/forward3")public String forward3(){return "forward:/forward1";}@RequestMapping("/redirect1")public String redirect1(){return "redirect:/bb.jsp";}@RequestMapping("/redirect2")public String redirect2(){return "redirect:/forward1";}}

簡單CRUD及返回值處理

@PathVariable:用于將請求 URL 中的模板變量映射到功能處理方法的參數上,即取出 uri 模板中的變量作為參數。

之前是實現Modedriver來進行傳值的,現在不用了,只需要在方法里面加一個實體就ok了,前臺傳值只需要注意與實體的屬性對應就沒問題。

其實現原理是利用環繞通知中獲取所有參數的那種方法+反射賦值實現的。

分頁標簽
PageTag

package com.liuchunming.tag;import com.liuchunming.util.PageBean;import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; import java.io.IOException; import java.util.Map; import java.util.Map.Entry; import java.util.Set;public class PageTag extends BodyTagSupport{private static final long serialVersionUID = 1L;private PageBean pageBean;public PageBean getPageBean() {return pageBean;}public void setPageBean(PageBean pageBean) {this.pageBean = pageBean;}@Overridepublic int doStartTag() throws JspException {JspWriter out = pageContext.getOut();try {out.print(toHTML());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return super.doStartTag();}private String toHTML() {StringBuilder sb=new StringBuilder();//拼接下一次發送請求所要提交的隱藏的form表單sb.append("<form id='pageBeanForm' action='"+pageBean.getUrl()+"' method='post'>");//差第幾頁的數據sb.append("<input type='hidden' name='page'>");Map<String, String[]> pageMap = pageBean.getMap();if(pageMap.size()>0) {Set<Entry<String,String[]>> entrySet = pageMap.entrySet();for (Entry<String, String[]> entry : entrySet) {if(!"page".equals(entry.getKey())) {for(String val:entry.getValue()) {sb.append("<input type='hidden' value='"+val+"' name='"+entry.getKey()+"'>");}}}}sb.append("</form>");//默認展示前面四頁int page =pageBean.getPage();//獲取當前頁int max=pageBean.getMaxPage();//獲取最大頁//當前頁前面的頁碼是否大于4,大于就是4,小于前面頁碼-1int before = page > 4 ? 4 : page-1;//總共10頁減去當前頁,再減去當前頁前面的頁碼int after = 10 - 1 - before;//最大頁-當前頁after = max-page > after ? after : max-page;//用來控制上一頁點擊按鈕特效的boolean startFlag = page == 1;//用來控制下一頁點擊按鈕特效的boolean endFlag = max == page; // 拼接分頁條sb.append("<ul class='pagination'>");sb.append("<li class='page-item "+(startFlag ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage(1)'>首頁</a></li>");sb.append("<li class='page-item "+(startFlag ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage("+pageBean.getPreivousPage()+")'>&lt;</a></li>");// 代表了當前頁的前4頁for (int i = before; i > 0 ; i--) {sb.append("<li class='page-item'><a class='page-link' href='javascript:gotoPage("+(page-i)+")'>"+(page-i)+"</a></li>");}sb.append("<li class='page-item active'><a class='page-link' href='javascript:gotoPage("+pageBean.getPage()+")'>"+pageBean.getPage()+"</a></li>");// 代表了當前頁的后5頁for (int i = 1; i <= after; i++) {sb.append("<li class='page-item'><a class='page-link' href='javascript:gotoPage("+(page+i)+")'>"+(page+i)+"</a></li>");}sb.append("<li class='page-item "+(endFlag ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage("+pageBean.getNextPage()+")'>&gt;</a></li>");sb.append("<li class='page-item "+(endFlag ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾頁</a></li>");sb.append("<li class='page-item go-input'><b>到第</b><input class='page-link' type='text' id='skipPage' name='' /><b>頁</b></li>");sb.append("<li class='page-item go'><a class='page-link' href='javascript:skipPage()'>確定</a></li>");sb.append("<li class='page-item'><b>共"+pageBean.getTotal()+"條</b></li>");sb.append("</ul>");// 拼接分頁的js代碼sb.append("<script type='text/javascript'>");sb.append("function gotoPage(page) {");sb.append("document.getElementById('pageBeanForm').page.value = page;");sb.append("document.getElementById('pageBeanForm').submit();");sb.append("}");sb.append("function skipPage() {");sb.append("var page = document.getElementById('skipPage').value;");sb.append("if (!page || isNaN(page) || parseInt(page) < 1 || parseInt(page) > "+max+") {");sb.append("alert('請輸入1~N的數字');");sb.append("return;");sb.append("}");sb.append("gotoPage(page);");sb.append("}");sb.append("</script>");return sb.toString();} }

pageBean

package com.liuchunming.util;import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.util.Map;public class PageBean implements Serializable {private static final long serialVersionUID = 2422581023658455731L;//頁碼private int page=1;//每頁顯示記錄數private int rows=10;//總記錄數private int total=0;//是否分頁private boolean isPagination=true;//上一次的請求路徑private String url;//獲取所有的請求參數private Map<String,String[]> map;public PageBean() {super();}//設置請求參數public void setRequest(HttpServletRequest req) {String page=req.getParameter("page");String rows=req.getParameter("rows");String pagination=req.getParameter("pagination");this.setPage(page);this.setRows(rows);this.setPagination(pagination);this.url=req.getContextPath()+req.getServletPath();this.map=req.getParameterMap();}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Map<String, String[]> getMap() {return map;}public void setMap(Map<String, String[]> map) {this.map = map;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public void setPage(String page) {if(null!=page&&!"".equals(page.trim()))this.page = Integer.parseInt(page);}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}public void setRows(String rows) {if(null!=rows&&!"".equals(rows.trim()))this.rows = Integer.parseInt(rows);}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public void setTotal(String total) {this.total = Integer.parseInt(total);}public boolean isPagination() {return isPagination;}public void setPagination(boolean isPagination) {this.isPagination = isPagination;}public void setPagination(String isPagination) {if(null!=isPagination&&!"".equals(isPagination.trim()))this.isPagination = Boolean.parseBoolean(isPagination);}/*** 獲取分頁起始標記位置* @return*/public int getStartIndex() {//(當前頁碼-1)*顯示記錄數return (this.getPage()-1)*this.rows;}/*** 末頁* @return*/public int getMaxPage() {int totalpage=this.total/this.rows;if(this.total%this.rows!=0)totalpage++;return totalpage;}/*** 下一頁* @return*/public int getNextPage() {int nextPage=this.page+1;if(this.page>=this.getMaxPage())nextPage=this.getMaxPage();return nextPage;}/*** 上一頁* @return*/public int getPreivousPage() {int previousPage=this.page-1;if(previousPage<1)previousPage=1;return previousPage;}@Overridepublic String toString() {return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination+ "]";} }

l.tld

<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>JSTL 1.1 core library</description><display-name>JSTL core</display-name><tlib-version>1.1</tlib-version><short-name>l</short-name><uri>/liuchunming</uri><tag><name>page</name><tag-class>com.liuchunming.tag.PageTag</tag-class><body-content>JSP</body-content><attribute><name>pageBean</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag> </taglib>

BookController

package com.liuchunming.controller;import com.liuchunming.model.Book; import com.liuchunming.service.BookService; import com.liuchunming.util.PageBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest; import java.util.List;/*** @author liuchunming* @site www.liuchunming.com* @company xxx公司* @create 2020-10-24 9:03* @RequestMapping("/book") :定義命名空間,防止請求重復*/ @Controller @RequestMapping("/book") public class BookController {@Autowiredprivate BookService bookService;@RequestMapping("/list")public String list(Book book, HttpServletRequest req){PageBean pageBean =new PageBean();pageBean.setRequest(req);List<Book> bb = this.bookService.listPager(book, pageBean);req.setAttribute("bookList",bb);req.setAttribute("pageBean",pageBean);return "bookList";}@RequestMapping("/proSave")public String proSave(Book book, HttpServletRequest req){if(book !=null && book.getBid() !=null && book.getBid()!=0){Book b = this.bookService.selectByPrimaryKey(book.getBid());req.setAttribute("book2",b);}return "bookEdit";}@RequestMapping("/add")public String add(Book book,HttpServletRequest req){this.bookService.insert(book);//redirect:/book/list 跳到命名空間中的list方法return "redirect:/book/list";}@RequestMapping("/edit")public String edit(Book book, HttpServletRequest req){this.bookService.updateByPrimaryKeySelective(book);return "redirect:/book/list";}@RequestMapping("/del/{bid}")public String del(@PathVariable("bid") Integer bid, HttpServletRequest req){this.bookService.deleteByPrimaryKey(bid);return "redirect:/book/list";} }

效果

模糊查詢

springmvc對靜態資源的處理

正常來說我訪問項目下這張圖片是訪問不到的會報錯404,springmvc框架會將靜態資源文件訪問,當作一個request請求來處理,最終會找不到對應的資源文件


在springmvc-servlet.xml中配置映射js/css映射路徑


訪問效果

總結

以上是生活随笔為你收集整理的SpringMVC入门简单静态资源处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。