springmvc請路徑引數,springmvc-json-ajax使用,springmvc檔案上傳,springmvc檔案下載,springmvc攔截器(內容較多)
按照操作,絕對都可以實現,親測。。。。。(專案所有檔案和目錄結構全都放上去了)
idea工具,建立maven專案
第一步:
放置各種配置檔案:
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.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zit</groupId> <artifactId>springmvc03</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>springmvc03</name> <dependencies> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.9.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2.1-b03</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.6</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <testSourceDirectory>src/test/java</testSourceDirectory> <sourceDirectory>src/main/java</sourceDirectory> <!-- 解決無法載入資源配置檔案 --> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> <plugins> <!-- 配置maven編譯外掛 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 配置jetty servlet伺服器 --> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.12.v20180830</version> <configuration> <stopKey>exit</stopKey> <stopPort>8989</stopPort> <scanIntervalSeconds>10</scanIntervalSeconds> <reload>manual</reload> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> <httpConnector> <port>80</port> </httpConnector> </configuration> <executions> <execution> <id>jetty-run</id> <phase>test</phase> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
src/main/resources目錄下:src/main/resources/smvc.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 配置自動掃描的包 --> <context:component-scan base-package="com.zit.controller"/> <!-- 在沒有配置mvc:resources的時候沒有問題,一旦配置了mvc:resources,註解方式的url就沒有載入 --> <mvc:annotation-driven> <!-- 訊息轉換器 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 檔案上傳支援 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 104857600 代表100MB --> <property name="maxUploadSize" value="104857600"/> <property name="maxInMemorySize" value="40960"/> <property name="defaultEncoding" value="UTF-8"></property> </bean> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/admin/**"/> <mvc:exclude-mapping path="/admin/login"/> <bean class="com.zit.interceptor.TestInterceptor"/> </mvc:interceptor> </mvc:interceptors> <!--<mvc:resources mapping="/images/**" location="/images/" />--> <!-- 配置檢視解析器 如何把handler 方法返回值解析為實際的物理檢視 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/template/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
src/main/webapp/WEB-INF/web.xml檔案:
<?xml version="1.0" encoding="UTF-8"?> <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_4_0.xsd" version="4.0"> <display-name>springmvc02</display-name> <!--springmvc 5.0.9--> <!--不使用註解,可以使用配置--> <!-- //@WebServlet(name = "springmvc", urlPatterns = {"/"}, loadOnStartup = 1, initParams = {@WebInitParam(name = "contextConfigLocation", value = "classpath:smvc.xml")})--> <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*:smvc.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> <!-- <!– 配置spring框架中的編碼過濾器,實現接post請求中文亂碼處理 –> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>--> <!-- spring filter 編碼過濾器 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--訪問靜態資源--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> <url-pattern>*.css</url-pattern> <url-pattern>*.js</url-pattern> <url-pattern>*.jpg</url-pattern> <url-pattern>*.gif</url-pattern> <url-pattern>*.png</url-pattern> <url-pattern>*.rar</url-pattern> </servlet-mapping> <!--配置web專案的web.xml檔案的首頁--> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- <error-page><!–當系統出現404錯誤,跳轉到頁面nopage.html–> <error-code>404</error-code> <location>/404.html</location> </error-page> <error-page><!–當系統出現java.lang.NullPointerException,跳轉到頁面error.html–> <exception-type>java.lang.Exception</exception-type> <location>/error.html</location> </error-page> <session-config><!–會話超時配置 ,單位分鐘–> <session-timeout>30</session-timeout> </session-config>--> </web-app>
配置檔案完成。。。。
第二步:
目錄結構以及目錄結構中的內容:
controller目錄下的檔案:
AdminController.java
package com.zit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@Controller
@RequestMapping("/admin")
public class AdminController {
@RequestMapping("/index")
public void index() {
}
@RequestMapping("/login")
public void login() {
}
//<img src=check/>
@RequestMapping("/check")
public void check(HttpServletRequest req, HttpServletResponse resp) {
}
}
DownloadController.java
package com.zit.controller;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
@Controller
public class DownloadController {
@RequestMapping("/down")
@ResponseBody
public ResponseEntity<byte[]> down(HttpServletRequest req) {
String f = req.getServletContext().getRealPath("/images/images.rar");
File ff = new File(f);
System.out.println(ff.getName());
ResponseEntity<byte[]> entity = null;
try {
FileInputStream fis = new FileInputStream(ff);
byte[] body = new byte[fis.available()];
fis.read(body);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attchment;filename=" + ff.getName());
System.out.println("filename" + ff.getName());
HttpStatus statusCode = HttpStatus.OK;
entity = new ResponseEntity<byte[]>(body, headers, statusCode);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return entity;
}
}
HomeController.java
package com.zit.controller;
import com.zit.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@Controller
public class HomeController {
@RequestMapping("/index")
@ResponseBody
public String index() {
return "hello-index";
}
@GetMapping("/abc")
public void add(Model model) {
model.addAttribute("name", "李四");
List<Student> list = new ArrayList<Student>();
Student st1 = new Student();
st1.setId(3);
st1.setName("金剛");
st1.setScore(83);
Student st2 = new Student();
st2.setId(5);
st2.setName("郝剛");
st2.setScore(93);
list.add(st1);
list.add(st2);
model.addAttribute("students", list);
// /WEB-INF/template/abc.jsp
}
@RequestMapping("/xxx")
public ModelAndView xxx() {
ModelAndView mv = new ModelAndView("admin");//預設找admin.jsp檢視檔案
mv.addObject("user", "李青");
// mv.setViewName("ok");//WEB-INF/template/ok.jsp
//mv.setViewName("");
return mv;
}
/* @GetMapping("/add") @ResponseBody /add?name=jack&id=6
public void add(String name, int id, PrintWriter out){
out.print(name);
out.print(id);
}*/
/* @GetMapping("/add/{name}/{id}")
@ResponseBody
public void add(@PathVariable("name") String nn, @PathVariable("id") int id, PrintWriter out) {
out.print(nn);
out.print(id);
}*/
//http://localhost:8080/add?ii=30&nn=james
@GetMapping("/add")
@ResponseBody
public void add(@RequestParam(value = "nn", required = false, defaultValue = "李四") String name, @RequestParam("ii") int id, PrintWriter out) {
out.print(name);
out.print(id);
}
}
TimeController.java
package com.zit.controller;
import com.zit.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Controller
public class TimeController {
@GetMapping("/timer")
@ResponseBody
public String time() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(new Date());
}
@GetMapping("/find")
@ResponseBody
public Student find() {
Student st = new Student();
st.setScore(80);
st.setId(2);
st.setName("李勇");
return st;
}
/*@GetMapping("/query") @ResponseBody*/
@RequestMapping(value = "/query")
@ResponseBody
public List<Student> query() {
Student st = new Student();
st.setScore(80);
st.setId(2);
st.setName("李勇");
Student st2 = new Student();
st2.setScore(88);
st2.setId(4);
st2.setName("李香蘭");
List<Student> list = new ArrayList<>();
list.add(st);
list.add(st2);
return list;
}
@PostMapping("/save")
@ResponseBody
public boolean save(Student tt) {
System.out.println("insert into stu values(" + tt.getId() + ",'" + tt.getName() + "'," + tt.getScore() + ")");
return true;
}
}
UploadController.java
package com.zit.controller;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class UploadController {
@RequestMapping("/upload")
@ResponseBody
public String upload(@RequestParam("name") String name, @RequestParam("file") CommonsMultipartFile file, HttpServletRequest req) {
String path = req.getServletContext().getRealPath("/upload/user");
File ff = new File(path);
System.out.println(3);
if (!ff.exists()) {
ff.mkdirs();
}
/*System.out.println(path);
System.out.println(name);
System.out.println(file.getName());
System.out.println(file.getSize());//大小
System.out.println(file.getOriginalFilename());//檔名稱*/
try {
file.transferTo(new File(path, file.getOriginalFilename()));
} catch (IOException e) {
e.printStackTrace();
}
return "ok";
}
@RequestMapping("/uploads")
public String uploads(@RequestParam("name") String name, @RequestParam("file") CommonsMultipartFile[] file, HttpServletRequest req, Model model) {
String path = req.getServletContext().getRealPath("/upload/user");
File ff = new File(path);
if (!ff.exists()) {
ff.mkdirs();
}
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for (CommonsMultipartFile f : file) {
System.out.println(path);
System.out.println(name);
System.out.println(f.getName());
System.out.println(f.getSize());//大小
System.out.println(f.getOriginalFilename());//檔名稱
try {
f.transferTo(new File(path, f.getOriginalFilename()));
} catch (IOException e) {
e.printStackTrace();
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", f.getOriginalFilename());
map.put("size", f.getSize());
list.add(map);
}
model.addAttribute("files", list);
return "/up";
}
}
UserController.java
package com.zit.controller;
import com.zit.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/show/{nn}/{id}")
@ResponseBody
public void show(@PathVariable String nn, @PathVariable int id, PrintWriter out) {
out.print("歡迎" + nn + "hello world" + id);
}
@GetMapping("/save")
@ResponseBody
public String save() {
// void save()
// /WEB-INF/template/user/save.jsp
//String save()
// return "ok" 會使用 /WEB-INF/template/ok.jsp模板檔案渲染顯示
// /WEB-INF/template/user/save.jsp
// String save() 如果加上@ResponseBody,那麼return 返回的字串直接輸出到網頁上
return "ok";
}
//@PostMapping("/add")
@RequestMapping(value = "/add", method = RequestMethod.GET)
@ResponseBody
//@GetMapping("/add")@ResponseBody和上面性質一樣
public void add(HttpServletRequest req, HttpServletResponse resp) {
try {
resp.getWriter().print(req.getParameter("id"));
} catch (IOException e) {
e.printStackTrace();
}
}
/* @GetMapping("/myadd") @ResponseBody
public void myadd(String name,String gender){
System.out.println(name+","+gender);
}*/
@GetMapping("/myadd")
@ResponseBody
public void myadd(Student student, PrintWriter out) {
out.print(student);
}
@GetMapping("/aaa")
public String aaa() {
//return "forward:aaa.jsp"; // 轉發到/user/aaa.jsp找檢視,請求地址不變
return "forward:/aaa.jsp"; // /aaa.jsp
}
@GetMapping("/bbb")
public String bbb() {
// /user/bbb.jsp跳轉重定向,地址會改變,不傳值
//return "redirect:bbb.jsp";
// /bbb.jsp重定向
//return "redirect:/bbb.jsp";
return "redirect:t3:action"; //重定向到/user/t3.action
}
}
controller包中的內容結束。。。。。。。
src/main/java/com.zit.entity包下的內容:
Student.java
package com.zit.entity;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
private int score;
}
entity包下的內容結束。。。。
src/main/java/com.zit/interceptor包下的內容:
TestInterceptor.java
package com.zit.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("prehandle");
//return false; //攔住,通不過停止
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
}
interceptor包下的內容結束。。。。。。
src/main/java/com.zit/servlet包下的內容:
Upload.java
package com.zit.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
@WebServlet("/myupload.do")
@MultipartConfig
public class Upload extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(req.getParameter("name"));
Part part = req.getPart("file");
System.out.println(part.getSubmittedFileName());
System.out.println(part.getName());
System.out.println(part.getSize());
String path = getServletContext().getRealPath("/upload");
File f = new File(path);
if (!f.exists()) {
f.mkdirs();
part.write(path + "/" + part.getSubmittedFileName());
}
}
}
src/main/java包下的內容完全結束。。。。
src/main/resources包下的內容:
smvc.xml 這個之前已經寫過了。。。。。。,看前面。。。
src/main/resources包下的內容已經完全結束。。。。。。
src/main/webapp包下的內容:(按著順序來)
webapp/css/index.css
h3 {
color: red;
}
webapp/images/放置a.jpg b.jpg c.jpg d.jpg 四張圖片用來使用
webapp/css/js資料夾下:
上面的自己引入jquery-3.3.1.js jar包
my.js
alert("ok");
/upload/user是自動生成的,不用管
通過上圖可以改變輸出路徑,生成/upload/user路徑
webapp/WEB-INF目錄下classes和lib都是自動生成的,咱們不用管,只需要注意WEB-INF/template目錄下的內容就行
template/admin/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>後臺管理首頁...</h3>
</body>
</html>
template/login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>管理員登入頁面...</h3>
</body>
</html>
template/user/save.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>儲存成功</h3>
</body>
</html>
template/abc.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>歡迎:${name}</h3>
<c:forEach items="${students}" var="stu">
<h3>${stu.name}===${stu.score}</h3>
</c:forEach>
</body>
</html>
template/admin.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>歡迎:${user}</h3>
</body>
</html>
template/up.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>共上傳了${files.size()}檔案</h3>
<c:forEach items="${files}" var="f">
<h3>檔名稱:${f.name},大小:${f.size}位元組</h3>
</c:forEach>
</body>
</html>
WEB-INF/web.xml上面已經寫過了。。看上文
webapp/404.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>404</title>
</head>
<body>
<h3>404頁面找不到</h3>
</body>
</html>
webapp/add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.3.1.js"></script>
<script>
$(function () {
$('input[type=button]').click(function () {
$.ajax({
type:'post',
url:'/save',
data:{id:$('input[name=id]').val(),name:$('input[name=name]').val(),score:$('input[name=score]').val()},
dataType:'json',
success:function (d) {
alert(d)
}
})
});
/* $("input[type=button]").click(function () {
$.ajax({
type: "post",
url: "/save",
data: {
id: $("input[name=id]").val(),
name: $("input[name=name]").val(),
score: $("input[name=score]").valueOf()
},
dataType: "json",
success: function (d) {
alert(d)
}
})
})*/
})
</script>
</head>
<body>
學號:<input type="text" name="id"><br>
姓名"<input type="text" name="name"><br>
成績:<input type="text" name="score"><br>
<input type="button" value="儲存">
</body>
</html>
webapp/down.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>下載圖片</title>
</head>
<body>
<a href="/images/a.jpg" download>下載圖片</a> <br>
<a href="/images/images.rar" download>下載rar</a>
<h3>安全下載</h3>
<a href="/down" download >下載rar</a>
</body>
</html>
webapp/error.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<h3>錯誤頁面</h3>
</body>
</html>
webapp/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.3.1.js"></script>
<script>
$(function () {
setInterval(function () {
$("h3:first").load("/timer")
},1000)
})
</script>
</head>
<body>
<h3></h3>
</body>
</html>
webapp/mindex.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="css/index.css">
<script src="js/my.js"></script>
</head>
<body>
<h3>hello world</h3>
<img src="images/a.jpg" alt="">
</body>
</html>
webapp/mindex.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="abc">abc</a>
<br>
${3*2}
<a href="show.do">show檢視</a>
</body>
</html>
webapp/myup.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>servlet 3檔案上傳</h3>
<form action="/myupload.do" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name"><br>
檔案:<input type="file" name="file"><br>
<input type="submit" value="提交檔案">
</form>
<h3>springmvc檔案上傳</h3>
<form action="/upload" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name"><br>
檔案:<input type="file" name="file"><br>
<input type="submit" value="提交檔案">
</form>
<h3>多檔案上傳</h3>
<form action="/uploads" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name"><br>
檔案:<input type="file" name="file" multiple><br>
<input type="submit" value="提交檔案">
</form>
</body>
</html>