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);
}