黑马程序员javaweb 之 JSP

1.JSP简介&快速入门

导坐标

在webapp里面创建jsp文件

编写html标签和java代码

本质:tomcat将jsp转换为java再转换为class字节码文件,再响应回去

 

2.JSP脚本

 

<%....%>里面的变量,在外面也可以调用

<%   % >里面只能写java代码,不能写html

但是可以用{}分段写

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="新增"><br>
<hr>
<table border="1" cellspacing="0" width="800">
    <tr>
        <th>序号</th>
        <th>品牌名称</th>
        <th>企业名称</th>
        <th>排序</th>
        <th>品牌介绍</th>
        <th>状态</th>
        <th>操作</th>

    </tr>



    <%
        for (int i = 0; i < brands.size(); i++) {
            Brand brand = brands.get(i);
    %>

    <tr align="center">
        <td><%=brand.getId()%></td>
        <td><%=brand.getBrandName()%></td>
        <td><%=brand.getCompanyName()%></td>
        <td><%=brand.getOrdered()%></td>
        <td><%=brand.getDescription()%></td>

        <%
            if(brand.getStatus() == 1){
                //显示启用
        %>
            <td><%="启用"%></td>
        <%
            }else {
                // 显示禁用
        %>
            <td><%="禁用"%></td>
        <%
            }
        %>

        <td><a href="#">修改</a> <a href="#">删除</a></td>
    </tr>

    <%
        }
    %>



</table>

</body>
</html>

3.JSP缺点 

servlet->jsp->jsp+servlet->servlet+ajax+html

就是把java代码放在servlet里面写,在jsp里面不直接写了

4.EL表达式

 

先放在域里面,然后再转发到jsp,在jsp里面就能调用${brands} 

        //2. 存储到request域中
        request.setAttribute("brands",brands);
        request.setAttribute("status",1);

        //3. 转发到 el-demo.jsp
        request.getRequestDispatcher("/el-demo.jsp").forward(request,response);

 jsp里面:

  ${brands}

 5.JSTL标签

用jsp标签取代html里面的代码

<c:if>

<c:if test=true></c>   test为true的时候,会执行标签里面的内容

   //2. 存储到request域中
        request.setAttribute("brands",brands);
        request.setAttribute("status",1);

        //3. 转发到 el-demo.jsp
        request.getRequestDispatcher("/jstl-if.jsp").forward(request,response);

<c:forEach> 

index从0开始;count从1开始

6.MVC模式和三层架构 

MVC模式

 三层架构

案例: 

查询所有

 就是web调用service封装好的方法,service调用mapper的方法

这样一来service封装的方法可以重复使用

service里面放一些工厂什么的,用来写mybatis相关代码的 

1.获取工厂

2.获取sqlsession

3.获取mapper

4.用mapper调用方法

5.关闭sqlsession,返回list

    SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
public List<Brand> selectAll(){
        //调用BrandMapper.selectAll()
        //2. 获取SqlSession
        SqlSession sqlSession = factory.openSession();
        //3. 获取BrandMapper
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);

        //4. 调用方法
        List<Brand> brands = mapper.selectAll();

        sqlSession.close();

        return brands;
    }

web包下放置一个servlet

还要另外开一个html,这样点击html的时候。要跳转到servlet

1.先new好一个BrandService

2.用service调用selectAll方法

3.往request里面setAttribute放置selectAll获得的brands对象

4.调用request.getRequestDispatcher传到brand.jsp中

        //1. 调用BrandService完成查询
        List<Brand> brands = service.selectAll();

        //2. 存入request域中
        request.setAttribute("brands",brands);

        //3. 转发到brand.jsp
        request.getRequestDispatcher("/brand.jsp").forward(request,response);

改到mysql  的5.1.46

注意mysql的数据库连接密码要对

mybatis.xml里面写一个resultmap

    <resultMap id="brandResultMap" type="brand">
        <result column="brand_name" property="brandName"></result>
        <result column="company_name" property="companyName"></result>
    </resultMap>
    

 再在BrandMapper里面加上

    @Select("select * from tb_brand")
    @ResultMap("brandResultMap")
    List<Brand> selectAll();

添加数据

1.先把mapper接口的语句写好

   @Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
    void add(Brand brand);

2.再写Brandservice 

        1.获得factory

        2.获得sqlsession

        3.获得mapper

        4.用mapper调用对应的方法

都是固定化的流程啦

         SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
 //2. 获取SqlSession
        SqlSession sqlSession = factory.openSession();
        //3. 获取BrandMapper
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        //4. 调用方法
        mapper.add(brand);

        //提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();

3.html的书写

添加新增按钮,当点击这个按钮的时候,跳转到一个新的添加表单。用javascript绑定单击事件即可

4.jsp表单提交的数据可以传输到servlet进行封装(用request获取就好了)

 //处理POST请求的乱码问题
        request.setCharacterEncoding("utf-8");

        //1. 接收表单提交的数据,封装为一个Brand对象
        String brandName = request.getParameter("brandName");
        String companyName = request.getParameter("companyName");
        String ordered = request.getParameter("ordered");
        String description = request.getParameter("description");
        String status = request.getParameter("status");

        //封装为一个Brand对象
        Brand brand = new Brand();
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setOrdered(Integer.parseInt(ordered));
        brand.setDescription(description);
        brand.setStatus(Integer.parseInt(status));


        //2. 调用service 完成添加
        service.add(brand);


        //3. 转发到查询所有Servlet
        request.getRequestDispatcher("/selectAllServlet").forward(request,response);

修改-回显数据

1.在mapper里面加上selectByid

2.写BrandByIdService,本质就是重写mapper里面的接口,然后用工厂啥的写个mybatis

3.在web里面创建一个selectByIdServlet (主要是web页面比较难写)

4.jsp传输的是servlet,要记住了

用<c:if>要引入对应的标签库。jsp就是读取用户数据,显示页面的。servlet,service都是用来后台对数据库等代码进行修改

修改-修改数据

一样的步骤

1.mapper

2.service里面加上update

3.update.jsp里面写的action转移到 

action="/brand-demo/updateServlet"

4.写对应的Servlet

处理jsp转移过来的数据,封装到brand对象里面  ;调用service的方法,完成更新;转发到另外一个servlet,那个servlet又有转发到jsp的。(转发就是可以跳转到任意页面)

 @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理POST请求的乱码问题
        request.setCharacterEncoding("utf-8");
        //1. 接收表单提交的数据,封装为一个Brand对象
        String id = request.getParameter("id");
        String brandName = request.getParameter("brandName");
        String companyName = request.getParameter("companyName");
        String ordered = request.getParameter("ordered");
        String description = request.getParameter("description");
        String status = request.getParameter("status");

        //封装为一个Brand对象
        Brand brand = new Brand();
        brand.setId(Integer.parseInt(id));
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setOrdered(Integer.parseInt(ordered));
        brand.setDescription(description);
        brand.setStatus(Integer.parseInt(status));


        //2. 调用service 完成修改
        service.update(brand);


        //3. 转发到查询所有Servlet
        request.getRequestDispatcher("/selectAllServlet").forward(request,response);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值