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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

学习日志day52(2021-09-22)(1、SpringMVC文件上传 2、Spring发送邮件 3、拦截器 4、日志 )

發(fā)布時(shí)間:2023/12/20 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习日志day52(2021-09-22)(1、SpringMVC文件上传 2、Spring发送邮件 3、拦截器 4、日志 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)習(xí)內(nèi)容:學(xué)習(xí)Spring框架(Day52)

1、SpringMVC文件上傳
2、Spring發(fā)送郵件
3、攔截器
4、日志


1、SpringMVC文件上傳

(1)需要的jar包
commons-fileupload.jar

(2)在mvc-servlet.xml文件配置文件上傳解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 可選屬性,最大上傳字節(jié)--> <property name="maxUploadSize" value="100000"/> </bean>

(3)上傳多個(gè)文件
創(chuàng)建upload.js頁面

<form action="/file/upload" method="post" enctype="multipart/form-data">文件描述:<input type="text" name = "desc"><br>選擇文件:<input type="file" name="file" ><br>選擇文件:<input type="file" name="file"><br><input type="submit" value="上傳"> </form>

上傳多個(gè)文件

@PostMapping("/upload") public String fileUpload(String desc, MultipartFile[] file) {int count = 1;System.out.println("文件描述:" + desc);for (MultipartFile mf : file) {System.out.println(mf.getContentType()); //獲取文件類型System.out.println(mf.getName());//獲取file控件name屬性值System.out.println(mf.getOriginalFilename());//上傳的文件名稱System.out.println(mf.getSize());//獲取文件大小try {InputStream is = mf.getInputStream();OutputStream os = new FileOutputStream(new File("e:/img" + count + ".jpg"));int len = -1;while ((len = is.read()) != -1) {os.write(len);}os.flush();is.close();os.close();count++;} catch (IOException e) {e.printStackTrace();}return "upload"; }

SpringMVC文件上傳方法

@PostMapping("/upload") public String fileUpload(String desc, MultipartFile[] file) {int count = 1;System.out.println("文件描述:" + desc);for (MultipartFile mf : file) {System.out.println(mf.getContentType()); //獲取文件類型System.out.println(mf.getName());//獲取file控件name屬性值System.out.println(mf.getOriginalFilename());//上傳的文件名稱System.out.println(mf.getSize());//獲取文件大小try {String path = "e:/img/" + mf.getOriginalFilename();mf.transferTo(new File(path));} catch (IOException e) {e.printStackTrace();}}return "upload"; }

2、Spring發(fā)送郵件

(1)需要的jar包
mail.jar
spring-context-support.jar

(2)在applicationContext.xml文件配置發(fā)送郵件解析器

<!--配置郵件解析器--> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value="smtp.163.com"/><property name="username" value="yang7email@163.com"/><property name="password" value="ROBQTYBQTQVSQVNW"/><property name="defaultEncoding" value="UTF-8"/> </bean>

(3)新建線程發(fā)送郵件

@Controller public class EmailController {@Autowiredprivate JavaMailSender javaMailSender;@GetMapping("/email/send")public String sendEmail() {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {SimpleMailMessage message = new SimpleMailMessage();message.setFrom("yang7email@163.com");message.setSubject("Hi,this is spirng mail");message.setTo("1064289281@qq.com");message.setText("hi,xixing");javaMailSender.send(message);}});thread.start();return "";} }

3、攔截器

(1)攔截器和過濾器類似,但是只能攔截到controller請求。
創(chuàng)建攔截器Logininterceptor.java,用戶登錄后才能請求到使用頁面,否則跳轉(zhuǎn)到登錄信息頁面

//繼承自HandlerInterceptorAdapter類 public class LoginInterceptor extends HandlerInterceptorAdapter {//使用set注入獲取uris,不攔截這些路徑下的請求,即不用登錄也能訪問到的controller路徑private List<String> uris;public void setUris(List<String> uris) {this.uris = uris;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession();//獲取登錄后存入session中的用戶信息User currUser = (User) session.getAttribute("currUser");String uri = request.getRequestURI();//獲取請求的路徑if(uris.contains(uri)){return true;}else{if(currUser != null){return true;}else{//沒有登錄時(shí)跳轉(zhuǎn)到controller層的提示登錄頁面response.sendRedirect("/user/msg");return false;/*拋出自定義異常throw new LoginException();*/}}} }

(2)在mvc-servlet.xml配置攔截器

<!--配置攔截器--> <mvc:interceptors><mvc:interceptor><!--攔截器作用的路徑,/**代表所有--><mvc:mapping path="/**"/><!--通過set注入方法向攔截器注入uris,請求這些路徑下的頁面不用攔截--><bean class="com.hisoft.interceptor.LoginInterceptor"><property name="uris"><list><value>/user/login</value><value>/user/msg</value></list></property></bean></mvc:interceptor> </mvc:interceptors>

(3)配置異常解析器
可以拋出自定義異常,通過異常解析器來進(jìn)行重定向

<!--異常解析器--> <bean id="handlerExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><property name="exceptionMappings"><props><!--通過異常解析器重定向到/user/msg--><prop key="com.hisoft.exception.LoginException">redirect:/user/msg</prop></props></property> </bean>

4、日志

(1)日志組件有Apache Commons Logging、Log4j、SLF4J、Log4j2等等,這里使用Log4j組件
需要的jar包有 log4j.jar

日志級別從高到低為:fatal→error→warn→info→debug

(2)創(chuàng)建log4j.properties配置文件

#輸出器,也就是當(dāng)前日志輸出的位置,ConsoleAppender代表控制臺(tái) log4j.appender.A1=org.apache.log4j.ConsoleAppender #指定輸出日志的格式 log4j.appender.A1.layout=org.apache.log4j.PatternLayout #定義輸出日志的格式,\r\n表示回車換行 log4j.appender.A1.layout.ConversionPattern=[%p](%d)---%l--%m\r\n #定義輸出日志的優(yōu)先級,定義的級別和比定義優(yōu)先級更高的級別的輸出日志都可以輸出 log4j.rootLogger=debug,A1

(3)輸出格式中特殊符號(hào)代表的含義:

%m 輸出代碼中指定的消息
%p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產(chǎn)生該日志事件的線程名
%n 輸出一個(gè)回車換行符,Windows平臺(tái)為“/r/n”,Unix平臺(tái)為“/n”
%d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式, 比如:%d{yyy MMM dd HH:mm:ss , SSS}
%l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。

(4)Log4jTest.java文件中輸出日志信息

//將當(dāng)前類的映射傳入Logger.getLogger方法中 Logger logger = Logger.getLogger(Log4jTest.class); log.debug("debug message"); log.info("info message"); log.warn("warn message"); log.error("error message"); log.fatal("fatal message");

(5)將日志信息輸出到文件中

#日志信息輸出到文件 log4j.appender.fout=org.apache.log4j.FileAppender log4j.appender.fout.layout=org.apache.log4j.PatternLayout log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n #輸出的文件的路徑 log4j.appender.fout.file=D:/logs/log.log log4j.rootLogger=fout

(6)以天為單位生成日志文件

#日志信息以天為單位輸出到文件 log4j.appender.B=org.apache.log4j.DailyRollingFileAppender log4j.appender.B.layout=org.apache.log4j.PatternLayout log4j.appender.B.layout.ConversionPattern=[%p](%d)---%l--%m log4j.appender.B.DatePattern='.'yyyy-MM-dd log4j.appender.B.file=D:/logs/log.log log4j.rootLogger=fout

(7)根據(jù)日志級別存放的不同的位置

log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender log4j.appender.fout.layout=org.apache.log4j.PatternLayout log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n log4j.appender.fout.DatePattern='.'yyyy-MM-dd #指定輸出等級為INFO log4j.appender.fout.Threshold=INFO log4j.appender.fout.file=D:/logs/log.loglog4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%p](%d)---%l--%m\r\n log4j.rootLogger=DEBUG, A1,fout

(8)根據(jù)包輸出日志信息

log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender log4j.appender.fout.layout=org.apache.log4j.PatternLayout log4j.appender.fout.layout.ConversionPattern=[%p](%d)---%l--%m\r\n log4j.appender.fout.DatePattern='.'yyyy-MM-dd log4j.appender.fout.file=C:/logs/x.log log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%p](%d)---%l--%m\r\n #log4j.logger后面加上包名,表示只輸出這個(gè)包中日志信息 log4j.logger.com.google=ERROR,fout log4j.rootLogger=DEBUG, A1

總結(jié)

以上是生活随笔為你收集整理的学习日志day52(2021-09-22)(1、SpringMVC文件上传 2、Spring发送邮件 3、拦截器 4、日志 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。