jsp笔记二

一:设计项目的思想?13066784230
表示逻辑用jsp处理————sun公司设计jsp的本意就是动态页面
业务逻辑用servlet处理
二:转发
1.概念:一个web组件(servlet/jsp)将为处理完的业务交给另一个web组件继续处理。
2.转发的步骤:

    1)request.setAttribute(String name,Object obj)---------------绑定数据到 requset

    2)RequestDispatcher rd = request.getRequestDispatcher(String url)---获得一个转发器

    3)rd.forward(request,response)------------------转发

    4)Object request.getAttribute(String name)---------获取绑定值
3.底层原理:
    转发所设计的web组件会共享同一个request和response,因为本事还是容器调用service方法

    servlet---->容器(转发器)---->jsp

三:特点
1.浏览器的地址栏不变
2.转发的目的地
3.共用一个request和response

四:容器如何处理请求资源路径?
eg:http://ip:port/servlet06/abc.html
1.容器默认访问的是servlet。会查找web.xml中的servlet。

1)精确匹配:/adc.html
2)通配符匹配:/*
3)后缀匹配:*.do
2.如果容器没有找到srevlet就会去找对应的文件,实在找不到返回状态码404.、

五:如何让容器处理多个请求?用什么手段,步骤如何?
1.使用后缀匹配方式来配置servlet
2.在service()中分析资源路径,作出判断
1)获取资源路径—–String uri = request.getRequestURI()-ip:port/appname/url-pattern
2)截取字串——–String action = uri.substring(uri.lastIndexOf(“/”), uri.lastIndexOf(“.”));
3)分支处理
package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import entity.employee;
import util.DBUtil;

public class ActionServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;

    public void service(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{

// 复用代码
request.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);
PrintWriter out = response.getWriter();
// 写逻辑代码,处理多个请求
String uri = request.getRequestURI();
String action = uri.substring(uri.lastIndexOf(“/”), uri.lastIndexOf(“.”));

        if ("/list".equals(action)) {
            List<employee> list = DBUtil.getEmps();
            try {
                //servlet不擅长处理动态页面,所以转发给jsp处理

// (1)将处理结果绑定到request
request.setAttribute(“employees”,list);
// (2)获得转发器
RequestDispatcher rd = request.getRequestDispatcher(“listEmp.jsp”);
// (3)转发
rd.forward(request, response);
} catch (Exception e1) {
e1.printStackTrace();
out.println(“

系统繁忙,稍后重试

“);
} finally {
out.close();
}
}
else if (“/add”.equals(action)) {
String name = request.getParameter(“name”);
String age = request.getParameter(“age”);
String job = request.getParameter(“job”);
employee e = new employee();
e.setName(name);
e.setAge(Integer.parseInt(age));
e.setJob(job);
try {
DBUtil.addEmp(e);
response.sendRedirect(“list.do”);
} catch (Exception e2) {
e2.printStackTrace();
} finally {
out.close();
}
}
else if (“/del”.equals(action)) {
try {
String id_string = request.getParameter(“id”);
int id = Integer.parseInt(id_string);
DBUtil.delete(id);
response.sendRedirect(“list.do”);
} catch (Exception e1) {
e1.printStackTrace();
out.println(“

系统繁忙,稍后重试

“);
} finally {
out.close();
}
}
else if (“/load”.equals(action)) {
String id = request.getParameter(“id”);
try {
employee e = DBUtil.findById(Integer.parseInt(id));
//然后转发到jsp来创建动态页面
request.setAttribute(“e”, e);//绑定,获取转发器,转发
RequestDispatcher rd = request.getRequestDispatcher(“updateEmp.jsp”);
rd.forward(request, response);
} catch (Exception e1) {
e1.printStackTrace();
out.println(“

转发失败

“);
} finally {
out.close();
}
}else if(“/modify”.equals(action)){
String id =
request.getParameter(“id”);
String name =
request.getParameter(“name”);
String job =
request.getParameter(“job”);
String age =
request.getParameter(“age”);
//访问数据库,完成员工信息的修改
employee e = new employee();
e.setId(Integer.parseInt(id));
e.setName(name);
e.setAge(Integer.parseInt(age));
e.setJob(job);
System.out.println(e);
try{
DBUtil.modify(e);
//重定向到员工列表
response.sendRedirect(“list.do”);
}catch(Exception e1){
e1.printStackTrace();
out.println(“系统繁忙,稍后重试”);
}
}
}
}

                rd.forward(request, response);
            } catch (Exception e1) {
                e1.printStackTrace();
                out.println("<h1>转发失败</h1>");
            } finally {
                out.close();
            }
        }
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值