一:设计项目的思想?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();
}
}
}
}