步骤:
1、创建web应用
2、导入jar
spring 4.2
core,beans,context,expression,aop,aspects,web,webmvc
spring 3.0.2
logging, aop联盟,织入
jsp:
jstl,standard
增加: commons-io.jar, commons-fileupload.jar
3、jsp页面的要求:
4、编写applicationContext.xml
5、控制器类
package org.java.web;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.File;
@Controller
public class FileController {
@RequestMapping(value = "/up",method = RequestMethod.POST)
public String upload(String name,@RequestParam("myfile") CommonsMultipartFile myfile) throws Exception{
System.out.println("姓名是:"+name);
//获得要上传的文件名称
String fname = myfile.getOriginalFilename();
//判断是否有文件
if(!StringUtils.isEmpty(fname)){
//获得文件要保存的路径
File newFile = new File("d91",fname);//新文件(空文件,没有数据)
//判断,当前文件所有在目录是否存在
if(!newFile.getParentFile().exists()){
//目录不存在
newFile.getParentFile().mkdirs();
}
//将上传文件中的数据,写入到新文件中
myfile.getFileItem().write(newFile);
}
return "/ok";
}
}
在处理邮件发送时,会涉及到两种类型的协议:
发送邮件之前,要要设定你自己的邮件服务器,要开通smpt,pop3协议
我生成的密码:zsjcnmhztefecaii
在程序中,编写代码发送邮件时,主要分为两种类型的邮件:
1、创建一个springmvc的应用
2、导入springmvc涉及到的相关的jar
然后再加上: fileupload,io,mail,spring-context-support
3、编写mail.properties文件,配置邮件发送的相关信息
#邮件服务器的地址
mail.host=smtp.qq.com
#发件人
[email protected]
#密码
mail.pwd=zsjcnmhztefecaii
#发送邮件的协议
mail.protocol=smtp
#是否认证用户信息
mail.auth=true
#延迟时间
mail.timeout=3000
#编码
mail.encoding=utf-8
4、编写spring的主配置文件 applicationContext.xml
${mail.auth}
${mail.timeout}
5、编写页面,准备发送邮件
6、在控制器类中,编写代码发送邮件
@Autowired
private JavaMailSenderImpl sender;
//发件人
@Value("${mail.user}")
private String from;
@RequestMapping(value = "/simple",method = RequestMethod.POST)
public String simpleMail(String to,String title,String msg){
//创建一个简单邮件
SimpleMailMessage mail = new SimpleMailMessage();
//指定收件人
mail.setTo(to);
//指定邮件主题
mail.setSubject(title);
//设置邮件正文
mail.setText(msg);
//设置发件人
mail.setFrom(from);
//发送邮件
sender.send(mail);
return "/ok";
}
在applicationContext.xml文件,增加文件上传的配置
控制器类
package org.java.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.mail.internet.MimeMessage;
@Controller
public class MailController {
//邮件发送对象
@Autowired
private JavaMailSenderImpl sender;
//发件人
@Value("${mail.user}")
private String from;
/**
* 简单邮件,不带附件
* 在发送一封邮件时,至少要包含四个属性
* 1、收件人
* 2、发件人
* 3、主题 (标题)
* 4、正文(内容)
* @param to
* @param title
* @param msg
* @return
*/
@RequestMapping(value = "/simple",method = RequestMethod.POST)
public String simpleMail(String to,String title,String msg){
//创建一个简单邮件
SimpleMailMessage mail = new SimpleMailMessage();
//指定收件人
mail.setTo(to);
//指定邮件主题
mail.setSubject(title);
//设置邮件正文
mail.setText(msg);
//设置发件人
mail.setFrom(from);
//发送邮件
sender.send(mail);
return "/ok";
}
/**
* 带附件的邮件
* @param to
* @param title
* @param msg
* @param myfile
* @return
*/
@RequestMapping(value = "/complex",method = RequestMethod.POST)
public String complex(String to, String title, String msg,@RequestParam CommonsMultipartFile myfile) throws Exception{
//创建一个可以携带附件的邮件
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper =new MimeMessageHelper(message,true);//true:表示允许携带附件
//如果有多个收件人,可以按指定符号分割
String[] toUsers = to.split(",");
helper.setTo(toUsers);//收件人
helper.setFrom(from);//发件人
helper.setSubject(title);//主题
helper.setText(""+msg+"",true);//内容
//要得到文件的名称
String fname = myfile.getOriginalFilename();
//给邮件加载附件
helper.addAttachment(fname,myfile);
sender.send(message);
return "/ok";
}
}
一般在访问请求时,对请求进行拦截,拦截后可以附加功能,功能附加完成以后,再去调用请求
1、不论用户登录不登录,都可以看见主界面
2、如果用户要操作页面上的功能,将判断,用户是否登录,如果已登录直接运行对应的功能,如果没有登录,
则进入登录界面
编写拦截器的步骤:
1、编写拦截类LoginInterceptor继承于 HandlerInterceptorAdpater (拦截处理适配器)
package org.java.util;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor extends HandlerInterceptorAdapter {
//前置拦截的方法---------------------------------------该方法会在进入控制器之前运行
/**
*
* @param request 请求
* @param response 响应
* @param handler 控制器类(进入哪一个控制器类时,被拦截的。handler:表示拦截器的控制器类)
* @return 返回true:当前代码,会继续进入控制器类,返回false:程序不再进入控制器
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获得session
HttpSession ses = request.getSession();
//从sesssion获得用户信息
Object user = ses.getAttribute("user");
//判断user是否为空
if(user==null){
//重定向到登录界面
response.sendRedirect("/login.jsp");
return false;//不进入控制器类
}
return super.preHandle(request, response, handler);
}
// //后置拦截的方法---------------------------------------该方法会在控制器的代码运行完成以后执行
// @Override
// public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//
// System.out.println("3、进入postHandle");
// super.postHandle(request, response, handler, modelAndView);
// }
//
//
// //该方法将会本次请求即将结束之前执行
// @Override
// public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// System.out.println("4、执行afterCompletion");
// super.afterCompletion(request, response, handler, ex);
// }
}
2、重写类中的方法,
3、在applicationContext.xml文件中,进行配置
答:在指定的时间,按指定的规则,去执行指定的任务,这样的任务我们 就称为:“定时任务”
在java中,要实现定时任务,有如下方式:
1、创建java工程
2、导入相关jar
3、编写一个类实现Job接口
package org.java.service;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 定时任务,要完成的任务类
*/
public class RemindJobService implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("------------------定时任务开始执行----------------");
}
}
4、编写测试类,进行测试(这个测试类实际使用时,并不存在)
//创建一个工作详情类,用于指定,要完成具体任务的是哪一个类
JobDetail jobDetail = new JobDetail("myJob", RemindJobService.class);
//创建一个触发器(用于指定任务在什么时间,按照什么规则运行)
//Trigger tr = new SimpleTrigger("mytr",-1,1000);
//指定任务开始执行的时间
String v1 ="2020-07-18 09:17:30";
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date begin = sf.parse(v1);
String v2 ="2020-07-18 09:17:50";
Date end = sf.parse(v2);
Trigger tr = new SimpleTrigger("mytr",begin,end,-1,1000);
//创建一个调度工厂(用于产生调度)
SchedulerFactory factory = new StdSchedulerFactory();
//产生一个调度(相当于一个指挥官)
Scheduler sc = factory.getScheduler();
//给调度绑定任务
sc.scheduleJob(jobDetail,tr);
//启动调度
sc.start();
Trigger tr = new CronTrigger("mytr", "mygroup", "* * * * * ?");
秒 分 小时 天 月 星期
* * * * * ?
此处,以秒为例:
* ----------------代表每1秒
3 ----------------代表第3秒
特殊的地方:如果修饰的是星期:
星期天----------1
星期一----------2
星期六----------7
1,3,5-----------代表:第1,3,5秒
1-5---------------代表第1-5秒
1-5,13,15---------代表第1-5秒,以及13,15秒
1/3 --------------代表每间隔3秒钟运行1次
?:只能出现在第4位(天)或者是第6位(星期),它仅仅代表一个占位符,没有任何实际意义
在定时任务的表达式中,星期与天不允许同时赋值,一个赋了值,另一个,一定要用?占位
L(last): 只能出现在第4位(天)或者是第6位(星期)
如果修饰天,只能写成 L
--------------------代表这个月的最后一天
如果修饰星期,可以写成
1L--------------本月的最后一个星期天
2L--------------本月的最后一个星期一
.....
7L
#:只能修饰星期
6#3:表示本月的第3个星期五
1、创建java工程
2、导入下列包:
spring aop的包+ context-support + tx
然后加上 quartz的包(4.2)
3、编写任务类 (普通类即可)
package org.java.service;
import org.springframework.stereotype.Service;
@Service("remindJobService")
public class RemindJobService {
public void abc(){
System.out.println("-----------定时任务正在执行--------------");
}
public void show(){
System.out.println("~~~~~~~~~~~~~show~~~~~~~~");
}
}
4、编写applicatioinContext.xml
1、创建springmvc的应用
2、导入jar
springmvc用的所有 jar + context-support + tx
然后加上 quartz的包(4.2)
3、编写applicationContext
4、编写web.xml
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
mvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:applicationContext.xml
mvc
*.do
1、创建web工程
2、导入下列包:
spring aop的包+ context-support + tx
3、编写任务类 (普通类即可)
package org.java.service;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@EnableScheduling//启用调度
@Service
public class JobService {
@Scheduled(cron ="* * * * * ?" )
public void show(){
System.out.println("~~~~~~~任务类正在运行~~~~~~~~~~~~~");
}
}
4、编写applicatioinContext.xml