JavaEE精选-MVC

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: JavaEE精选-MVC

MVC

JSON

json是js中的对象,主要作为数据交换的格式,运用在客户端与服务器通信的过程中

json就是对于key=value类型数据格式的补充

使用

{}表示的是一个对象

[]表示的是一个数组、集合

var country = {name:"中国", province:[{name:"黑龙江", cities:["哈尔滨","大庆"]},{name:"广东", cities:["广州","深圳"]},{name:"台湾", cities:["台北","高雄"]}]}
var country ={
            "name":"中国",
             "province":[{"name":"黑龙江",”cities”:["哈尔滨","大庆"]},
              {"name":"广东","cities":["广州","深圳","珠海"]},
              {"name":"台湾","cities":["台北","高雄"]},
              {"name":"新疆","cities":["乌鲁木齐"]}]}

成员变量不加引号,说明表示的是json对象,加上了引号表示的就是字符串

两者之间的关系类似于对象和tostring

一般在数据交换的时候使用的是json字符串,传输在请求体中

JAVA对象和JSON字符串之间的转换

借助第三方API来完成,Gson:api简单

实质上就是java对象的tostring变成了json的形式

如果对象中的属性为null,那么gson会自动判断,不会转换为null的数据

单个对象转JSON
public void testJavaToJson(){
    User zs = new User();
    zs.setAge(24);
    zs.setUsername("zhangsan" );
    Gson gson = new Gson();
    String s = gson.toJson(zs);
    System.out.println(s);
}
List中存放的对象转Json
List<User> list = new ArrayList<>();
        list.add(zs);
        list.add(ls);
        list.add(wu);
        Gson gson = new Gson();
        String s = gson.toJson(list);
        System.out.println(s);

本质上都是一样的,toJson里面可以传Object,传List进去也是可以的

Json转成单个对象

调用fromJson方法,第一个参数是要转换的字符串,第二个参数是转换对象的字节码文件

String jsonStr = "{\"username\":\"zhangsan\",\"age\":24}";
        Gson gson = new Gson();
        User user = gson.fromJson(jsonStr, User.class);
        System.out.println(user);
Json转为多个对象数组
String jsonStr = "[{\"username\":\"zhangsan\",\"age\":24},{\"username\":\"lisi\",\"age\":25}]";
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
JsonElement parse = jsonParser.parse(jsonStr);
JsonArray asJsonArray = parse.getAsJsonArray();
for (JsonElement jsonElement : asJsonArray) {
    User user = gson.fromJson(jsonElement, User.class);
    System.out.println(user);
}

步骤:1.首先创建一个Gson解析器对象

2.创建自定义的一个解析格式,JsonParser

3.使用JsonParser对字符串进行解析,调用的是parse方法,里面传入要解析的字符串

4.解析完毕后调用指定的方法得到想要的格式, parse.getAsJsonArray()

5.得到的是一个Json数组,最后还需要对具体的每个元素进行解析得到我们想要的对象

5.最后输出即可

整合Maven与EE

1.src\main目录下新建webapp目录

2.设置webapp为应该根目录的映射


3.pom.xml文件设置

<packaging>war</packaging>

4.导包

servlet包—provided,因为只需要编译通过即可,tomcat内部有自带的

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

servlet-provided

junit-test

mysql-connector-java-runtime

注册登录案例

接口

如果需要代码变更较少,那么就需要采取接口编程的方式

接口的优势:制定方法的规范

方法的名称相同、方法的参数相同、方法的返回值类型相同

那么具体的逻辑可以根据不同的需求,生成不同的子实现,这样在更换需求的时候就只需要改变子实现的名称,更换的代价非常小

三层架构

展示层—Controller

业务层—Service

数据层—Dao

在Controller和Dao之间引入service层,使用接口来制定规范,并在具体的实现类中调用方法,以实现不同的功能

这样在使用的时候就只需要使用service即可,具体的操作方法都放在service里面,降低耦合率

在本案例中的具体思路:

展示层—>Controller—>Servlet

用于处理分发方法,只实现展示的业务逻辑,耦合service,通过service来调用方法得到返回的状态码,以此展示不同的页面

UserService userService = new UserServiceImpl(); 
• 1
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String requestURI = request.getRequestURI(); //首先分发请求
    String op = requestURI.replace(request.getContextPath() + "/user/", "");//替换,取出分发的部分
    if ("register".equals(op)){
        register(request,response); //处理注册的逻辑
    }else if ("login".equals(op)){
        login(request,response);
    }
}
private void register(HttpServletRequest request, HttpServletResponse response) throws IOException {
    User registerUser = new User(); //存放新注册的用户
    //从表单中获取数据,然后使用BeanUtils来封装
    try {
        BeanUtils.populate(registerUser,request.getParameterMap());//对数据进行封装
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
    //参数校验
    if (StringUtils.isEmpty(registerUser.getUsername())||StringUtils.isEmpty(registerUser.getPassword())||StringUtils.isEmpty(registerUser.getGender())){
        response.getWriter().println("参数为空!请检查数据是否正常");
        return;
    }
    int result = userService.register(registerUser); //得到返回的状态码
    if (result==404){
        response.getWriter().println("当前用户名已经被注册!");
        return;
    }else if (result==500){
        response.getWriter().println("服务器繁忙");
    }
    response.getWriter().println("注册成功!");
}

业务层—Service—

通过接口来制定具体执行的方法的规范,在实现类中与Dao耦合,执行具体的业务逻辑

public interface UserService {
    int register(User reg);
    int login(User login);
}
public class UserServiceImpl implements UserService {
    private UserDao userDao = new UserSqlDao(); //维护一个userDao,在这里面调用方法
    @Override
    public int register(User reg) {
        return userDao.register(reg);
    }
    @Override
    public int login(User login) {
        return userDao.login(login);
    }
}

数据层—Dao

同样的以接口为标准,这样在更换Service中方法的时候代价最小

public interface UserDao {
      int register(User user);
      int login(User login);
}
public class UserSqlDao implements UserDao {
    static SqlSession sqlSession;
    static UserMapper mapper;
    static {
        sqlSession = MyBatisUtil.getSqlSession();
        mapper = sqlSession.getMapper(UserMapper.class);
    }
    @Override
    public int register(User user) {
        try {
            mapper.insertInUser(user);
            sqlSession.commit(); //插入成功需要提交事务
            return 200; //正常插入说明成功,返回200
        }catch (Exception e){
            return 404; //如果用户名存在,那就说明插入失败,会报错,返回404
        }
    }
    @Override
    public int login(User login) {
        return 0;
    }
}
sqlSession.commit(); //插入成功需要提交事务
        return 200; //正常插入说明成功,返回200
    }catch (Exception e){
        return 404; //如果用户名存在,那就说明插入失败,会报错,返回404
    }
}
@Override
public int login(User login) {
    return 0;
}

}

目录
相关文章
|
3月前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring MVC 响应
【JavaEE进阶】 关于Spring MVC 响应
47 3
|
4月前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring mvc 响应
【JavaEE进阶】 关于Spring mvc 响应
|
4月前
|
前端开发 Java 应用服务中间件
【JavaEE进阶】 初识Spring Web MVC
【JavaEE进阶】 初识Spring Web MVC
|
1月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
33 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
155 0
|
4月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
67 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
153 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
92 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
157 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
195 0