24-Vue和Element高级

Vue高级使用-Vue的生命周期(了解)

1 生命周期

在这里插入图片描述

2 生命周期的八个阶段

在这里插入图片描述

Vue高级使用-异步操作(重点)

在Vue中发送异步请求,本质上还是ajax,我们可以使用axios这个插件来简化操作

  • 使用步骤
    • 引入axios核心js文件
    • 调用axios对象的方法来发起异步请求
    • 调用axios对象的方法来处理响应的数据

1 常用的方法

在这里插入图片描述

2 get请求

axios.get("testServlet?name="+this.name).then(resp=>{
   alert(resp.data); 
}).catch(error=>{
    alert(error);
})


3 post请求

axios.post("testServlet","name="+this.name).then(resp=>{
	alert(resp.data);
}).catch(error=>{
	 alert(error);
})

学生管理系统(重点)

在这里插入图片描述

1 案例效果

  • 效果1:登录

在这里插入图片描述

  • 效果2:对学生进行增删改查

在这里插入图片描述

2 登录功能

2.1 环境搭建
1 使用提供的SQL创建数据库和表以及表中的数据
2 将给的src和web中的内容直接复制到我们的module对应位置
2.2 后台代码实现
  • UserController代码
   @WebServlet("/userController")
public class UserController extends HttpServlet {
    //创建业务层对象
    private UserService userService = new UserServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取登录参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //封装对象
        User user = new User(username, password);
        //调用业务层方法
        List<User> userList = userService.login(user);
        //对查询出来的结果进行判断
        if (userList.size()!=0){
            //登录成功
            req.getSession().setAttribute("username",username);
            //给客户端一个响应true
            resp.getWriter().write("true");
        }else {
            //登录失败
            //给客户端一个响应false
            resp.getWriter().write("false");
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • UserServiceImpl代码
/**
     * 登录
     * @param user
     * @return
     */
    @Override
    public List<User> login(User user) {
        InputStream is =null;
        SqlSession sqlSession=null;
        List<User> userList =null;
        try {
            //加载核心配置文件
            is = Resources.getResourceAsStream("MyBatisConfig.xml");
            //创建session工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //创建session对象
            sqlSession = sqlSessionFactory.openSession(true);
            //创建mapper对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            userList = mapper.login(user);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession!=null){
                sqlSession.close();
            }
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return userList;
    }
  • UserMapper代码
public interface UserMapper {
    /*
        登录
    */
    @Select("select * from user where username = #{username} and password = #{password}")
    public abstract List<User> login(User user);
}
2.3 前台代码实现
<script>
    new Vue({
        el:"#app",
        data: {
            form: {
                username: '',
                password: '',
            },
            rules: { //校验规则
                username: [
                    {required: true, message: '请输入用户名', trigger: 'blur'}
                ],
                password: [
                    {required: true, message: '请输入密码', trigger: 'blur'}
                ]
            }
        },
        methods: {
            onSubmit(formName) {//formName就是传递过来的'loginForm'值,通过loginForm就可以找到form表单对象
                // 为表单绑定验证功能 ,validate()表示的是校验的方法,valid表示校验结果
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        //请求服务器完成登录功能
                        axios.get("userController",{params:this.form})
                            .then(resp =>{
                                if (resp.data == true){
                                    //登录成功,跳转到首页
                                    location.href="index.html";
                                } else {
                                    //登录失败
                                    alert("登录失败,请检查用户或者密码");
                                    location.href="login.html";
                                }
                            })
                    } else {
                        return false;
                    }
                });
            }
        }
    });
</script>
2.4 过滤器代码实现
@WebFilter(value = {"/index.html"})
public class LoginFilter implements Filter{
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
        try{
            //1.将请求和响应对象转换为和HTTP协议相关
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;

            //2.获取会话域对象中数据
            Object username = request.getSession().getAttribute("username");

            //3.判断用户名
            if(username == null || "".equals(username)) {
                //重定向到登录页面
                response.sendRedirect(request.getContextPath() + "/login.html");
                return;
            }

            //4.放行
            filterChain.doFilter(request,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3 分页查询功能

1 后台代码
  • StudentController代码
@WebServlet("/studentController")
public class StudentController extends HttpServlet {
    //调用业务层
    private StudentService studentService = new StudentServiceImpl();
    //创建json核心对象
    private ObjectMapper mapper = new ObjectMapper();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置字符编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取请求参数
        String method = req.getParameter("method");
        System.out.println(method);
        if (method.equals("selectByPage")){
            //分页功能
            selectByPage(req,resp);
        }else if (method.equals("insertStu")){
            //添加学生功能
            insertStu(req,resp);
        }else if (method.equals("updateStu")){
            //修改学生功能
            updateStu(req,resp);
            System.out.println("执行了更新操作");
        }else if (method.equals("deleteStu")){
            //删除学生功能
            deleteStu(req,resp);
        }
    }
    /**
     * 分页功能
     * @param req
     * @param resp
     */
    private void selectByPage(HttpServletRequest req, HttpServletResponse resp) {
        //获取请求的参数
        String currentPage = req.getParameter("currentPage");
        String pageSize = req.getParameter("pageSize");
        //调用业务层的方法
        Page page = studentService.selectByPage(Integer.parseInt(currentPage), Integer.parseInt(pageSize));
        //封装PageInfo
        PageInfo pageInfo = new PageInfo(page);
        //将pageInfo转为json对象
        try {
            String json = mapper.writeValueAsString(pageInfo);
            System.out.println(json);
            System.out.println("==================");
            //响应给浏览器
            resp.getWriter().write(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 日期转换
     */
    private void dateConvert() {
        ConvertUtils.register(new Converter() {
            public Object convert(Class type, Object value) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    return simpleDateFormat.parse(value.toString());
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }, Date.class);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
  • StudentServiceImpl代码
  /**
     * 分页功能
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public Page selectByPage(Integer currentPage, Integer pageSize) {
        InputStream is =null;
        SqlSession sqlSession=null;
        Page page =null;
        try {
            //加载核心配置文件
            is = Resources.getResourceAsStream("MyBatisConfig.xml");
            //创建session工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //创建session对象
            sqlSession = sqlSessionFactory.openSession(true);
            //创建mapper对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
            //设置分页参数
            page = PageHelper.startPage(currentPage,pageSize);
            //调用实现类对象查询全部方法
            mapper.selectAll();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession!=null){
                sqlSession.close();
            }
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //把结果返回给控制层
        return page;
    }
  • StudentMapper代码
    /*
        查询全部方法
     */
    @Select("SELECT * FROM student")
    public abstract List<Student> selectAll();
2 前台代码
//先将查询的标记添加到pagination对象中
this.pagination.method="selectByPage";
//再发送分页的异步请求
axios.get("studentServlet",{params:this.pagination}).then((resp)=>{
	//将查询出的数据赋值tableData
	this.tableData=resp.data.list;
	//设置当前页
	this.pagination.pageSize=resp.data.pageNum;
	//设置总条数
    this.pagination.total=resp.data.total;
	
});
//在methods外面写立即加载的方法(页面一加载就执行这个方法)
 mounted(){
            //调用分页查询功能
            this.selectByPage();
        }

4 添加功能

在这里插入图片描述

4.1 后台代码实现
  • StudentController代码
    /**
     * 添加学生信息
     * @param req
     * @param resp
     */
    private void insertStu(HttpServletRequest req, HttpServletResponse resp) {
        //获取参数
        Map<String, String[]> map = req.getParameterMap();
        //封装对象
        Student student = new Student();
        //日期转换
        dateConvert();
        try {
            BeanUtils.populate(student,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //调用业务层方法
        int num = studentService.insertStu(student);
        //响应浏览器
        try {
            resp.getWriter().write(num+"");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • StudentServiceImpl代码
  /**
     * 添加学生
     * @param student
     */
    @Override
    public int insertStu(Student student) {
        InputStream is =null;
        SqlSession sqlSession=null;
        int num = 0;
        try {
            //加载核心配置文件
            is = Resources.getResourceAsStream("MyBatisConfig.xml");
            //创建session工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //创建session对象
            sqlSession = sqlSessionFactory.openSession(true);
            //创建mapper对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
            num = mapper.insertStu(student);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession!=null){
                sqlSession.close();
            }
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return num;
    }
  • StudentMapper
 /**
     * 添加学生
     * @param student
     */
    @Insert("insert into student values(#{number},#{name},#{birthday},#{address})")
    public abstract int insertStu(Student student);
4.2 前台代码实现
		 //添加学生信息
            insertStu(){
                this.formData.method="insertStu";
                axios.get("studentController",{params:this.formData})
                    .then(resp =>{
                        if (resp.data){
                            this.selectByPage();
                        }
                    });
                //关闭窗口
                this.dialogTableVisible4add = false;
            },

5 修改功能

在这里插入图片描述

5.1 后台代码实现
  • StudentController代码
   /**
     * 修改学生信息
     * @param req
     * @param resp
     */
    private void updateStu(HttpServletRequest req, HttpServletResponse resp) {
        //获取参数
        Map<String, String[]> map = req.getParameterMap();
        System.out.println(map);
        //封装对象
        Student student = new Student();
        //日期转换
        dateConvert();
        try {
            BeanUtils.populate(student,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //调用业务层方法
        int num = studentService.updateStu(student);
        //响应浏览器
        try {
            resp.getWriter().write(num+"");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • StudentServiceImpl代码
 /**
     * 修改学生
     * @param student
     */
    @Override
    public int updateStu(Student student) {
        InputStream is =null;
        SqlSession sqlSession=null;
        int num =0;
        try {
            //加载核心配置文件
            is = Resources.getResourceAsStream("MyBatisConfig.xml");
            //创建session工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //创建session对象
            sqlSession = sqlSessionFactory.openSession(true);
            //创建mapper对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
            num = mapper.updateStu(student);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession!=null){
                sqlSession.close();
            }
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return num;
    }
  • StudentMapper
/**
     * 修改学生
     * @param student
     */
    @Update("update student set name=#{name},birthday=#{birthday},address=#{address} where number=#{number}")
    public abstract int updateStu(Student student);
5.2 前台代码实现
			//修改学生信息
            updateStu(){
                this.editFormData.method="updateStu";
                axios.get("studentController",{params:this.editFormData})
                    .then(resp =>{
                        if (resp.data){
                            this.selectByPage();
                        }
                    });
                //关闭窗口
                this.dialogTableVisible4edit = false;
            },

6 删除功能

6.1 后台代码实现
  • StudentController代码
 /**
     * 删除学生信息
     * @param req
     * @param resp
     */
    private void deleteStu(HttpServletRequest req, HttpServletResponse resp) {
        //获取参数
        String number = req.getParameter("number");
        //调用业务层的删除方法
        studentService.deleteStu(number);
        //响应浏览器
        try {
            resp.getWriter().write("true");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • StudentServiceImpl代码
   /**
     * 删除学生
     * @param number
     */
    @Override
    public void deleteStu(String number) {
        InputStream is =null;
        SqlSession sqlSession=null;
        try {
            //加载核心配置文件
            is = Resources.getResourceAsStream("MyBatisConfig.xml");
            //创建session工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //创建session对象
            sqlSession = sqlSessionFactory.openSession(true);
            //创建mapper对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
            mapper.deleteStu(number);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession!=null){
                sqlSession.close();
            }
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • StudentMapper
   /**
     * 删除学生
     * @param number
     */
    @Delete("delete from student where number=#{number}")
    public abstract void deleteStu(String number);
6.2 前台代码实现
 		//删除学生
            deleteStu(row){
                if (confirm("确定要删除"+row.number+"数据?")){
                    //先将查询的标记添加到pagination对象中
                    this.pagination.method="deleteStu";
                    this.pagination.number=row.number;
                    axios.get("studentController",{params:this.pagination})
                        .then(resp =>{
                            if (resp.data){
                                this.selectByPage();
                            }
                        })
                }
            }

总结

html+css(2)-->javascript(2)--->jquery+ajax(2)--->Vue+ElementUI(2)
DOM操作:
	操作内容:
		javascript:
			元素对象.innerHTML;
			元素对象.value;
		jquery:
			jquery元素对象.html();
			jquery元素对象.val();
		Vue:
			插值表达式:{{表达式}}、v-html指令
			v-model表单数据双向绑定
			
	操作属性:
		javascript:
			元素对象.setAttribute(name,value);
			元素对象.getAttribute(name);
		jquery:
			jquery元素对象.attr();
				设置值:jquery元素对象.attr(name,value);
				获取值:jquery元素对象.attr(name);
			jquery元素对象.prop(); //一般用于操作checked、selected属性
			
		Vue:
			v-bind:属性名  将vue中变量的值绑定到标签的属性中,也可以简写(:属性名)
			
	操作样式:
		javascript:
			元素对象.style.样式名=样式值;
			元素对象.className="class属性值";
		jquery:
			jquery元素对象.css();
				设置值:jquery元素对象.css(name,value);
				设置值:jquery元素对象.css({name:value,name:value,...});
			
		Vue:
			先使用类选择器写好样式,然后给class属性绑定值
			v-bind:属性名  将vue中变量的值绑定到标签的属性中,也可以简写(:属性名)
			
	标签增删改查:
		javascript:
			推荐使用innerHTML属性
		jquery:
			推荐使用html()方法
			append()
			remove()
      
		Vue:
			v-for遍历展示数据
事件:
	单击事件:
		javascript:
			方式1:<input type="button" value="新按钮" onclick="fun()"/>
			方式2:标签对象.onclick=function(){}
		jquery:
			标签对象.click(function(){
					
			})		
		Vue:
			第一步:
			<input type="button" value="新按钮" @click="fun()"/>
			第二步:
			methods:{
				fun(){
				
				}		
			}
	失去焦点事件:
	页面加载完成事件
		javascript:
			window.onload=function(){}
		jquery:
			$(function{
			
			})		
		Vue:利用生命周期方法
			new Vue({
			
				created(){
				  //Vue对象被创建完成了
				}
			});
	内容改变事件:
	表单提交事件:必须有一个true或者false的返回值表示允许提交或者阻止提交
ajax异步请求:重点
	jquery中的ajax操作:
		$.ajax({
				url:"", //请求路径
				data:"", //请求参数,两种写法
				type:"", //请求方式
				dataType:"json"//响应回来的数据类型
				success:function(resp){ //响应成功要调用的函数,resp表示响应结果
					 //在成功的函数中需要进行DOM操作:获取标签对象,拼接html代码,添加到标签的内容体中
				}
		})
		$.get(url,data,function(resp){},dataType);
		$.post(url,data,function(resp){},dataType);
		
		说明:传递给服务器的参数格式最终都是name=value&name=value...,在后台Servlet中可以使用BeanUtils封装请求参数
		
	Vue和axios异步操作:
		axios.get(url?参数).then((resp)=>{
				//响应成功要调用的函数,resp封装了响应结果,如果需要获取响应数据,那么就需要resp.data;
		})
		axios.get(url,{params:参数对象).then((resp)=>{  //params是固定写法
				//响应成功要调用的函数,resp封装了响应结果,如果需要获取响应数据,那么就需要resp.data;
		})
		axios.post(url,拼接参数字符串).then((resp)=>{
				//响应成功要调用的函数,resp封装了响应结果,如果需要获取响应数据,那么就需要resp.data;
		})
		说明:以上三种方式,传递给服务器的参数格式最终都是name=value&name=value...,在后台Servlet中可以使用BeanUtils封装请求参数
		
		axios.post(url,参数对象).then((resp)=>{  //params是固定写法
				//响应成功要调用的函数,resp封装了响应结果,如果需要获取响应数据,那么就需要resp.data;
		})
		注意/特殊点:axios底层会先使用JSON将参数对象转换成json字符串,然后发送给服务器。在服务器端无法使用request.getParameter()等方法获取,也无法使用BeanUtils封装。需要使用jackson中的ObjectMapper中的readValue(request.getReader(),bean类.class)将json转换成Java对象
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue Element Admin是一个基于Vue.js和Element UI的后台管理系统框架。它提供了一个现代化的UI界面,支持灵活的布局和组件,可以快速定制和集成不同的插件和功能模块,适用于各种类型的企业级应用程序。Vue Element Admin还提供了许多有用的功能,如动态路由,权限管理,多语言支持等,可以大大提高开发效率和用户体验。如果你需要一个功能强大,易于使用的后台管理框架,Vue Element Admin是一个不错的选择。 ### 回答2: vue-element-admin是一个基于Vue.js和Element UI的开源框架,用于构建企业级的管理后台系统。它提供了丰富的功能组件和强大的扩展性,可以快速搭建起一个功能完善、美观大气的管理系统。 首先,vue-element-admin框架采用了Vue.js作为前端开发的基础框架,Vue.js具有简单、灵活和高效的特点,能够让开发者快速上手并进行快速开发。而Element UI则是一个基于Vue.js的UI组件库,提供了丰富的组件和样式,使得界面设计简单而美观。 其次,vue-element-admin框架内置了许多常用的功能组件,如表格、表单、图表等,这些组件完善了管理系统的基本功能,开发者可以直接调用这些组件,省去了自己编写这些组件的麻烦。同时,vue-element-admin还支持动态路由和权限控制,可以根据用户的权限动态生成路由和菜单,实现灵活的权限管理。 另外,vue-element-admin框架具有很好的扩展性,开发者可以根据自己的需求对框架进行定制和扩展,包括添加自定义的组件、修改现有组件等。而且,该框架支持国际化,能够适应不同语言和文化的需求,使得项目能够面向全球用户。 总之,vue-element-admin框架是一个功能强大、易于使用的开源框架,能够帮助开发者快速构建出高效、美观的企业级管理后台系统。无论是小型项目还是大型项目,都能够得到较好的支持和满足。 ### 回答3: vue-element-admin是一个基于Vue.js和Element UI的开源后台管理系统框架。它提供了一套完整的解决方案,用于快速构建现代化的后台管理系统。该框架具有丰富的功能和灵活的扩展性。 首先,vue-element-admin框架基于Vue.js和Element UI,这意味着我们可以充分利用Vue.js的响应式特性、组件化开发和虚拟DOM等优势,快速构建可维护、高性能的前端应用程序。同时,Element UI提供了丰富的UI组件和样式,使我们能够轻松地构建用户友好的界面。 其次,vue-element-admin框架提供了一套完整的后台管理系统解决方案。它包括登录、权限控制、菜单导航、数据展示和编辑等常见功能,以及用户管理、角色管理、系统设置等高级功能。我们只需要按照规范进行配置和开发,就能够快速搭建出一个功能完善的后台管理系统。 此外,vue-element-admin框架还具有灵活的扩展性。我们可以根据项目需求进行定制化开发,添加新的功能模块或修改已有模块。同时,该框架支持国际化和多主题切换,方便适应不同地区和用户的需求。 总的来说,vue-element-admin框架是一个强大而易用的后台管理系统框架,它能够帮助开发者快速构建出现代化的用户界面和功能丰富的后台管理系统。无论是小型项目还是大型企业级应用,都能够从该框架中受益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值