Servlet
如果要用Java程序生成动态Web页面 那么该Java程序必须遵循Servlet规范
所以要实现Servlet接口(小服务)
Serv --- Service
let --- 小东西
例子:
@WebServlet(name="Hello", urlPatterns={"/hi", "*.do"}, loadOnStartup=1)
public class Hello implements Servlet {
private List<String> list = new ArrayList<>();
@Override
public void destroy() {
// 当服务器准备销毁Hello类对象时会自动调用该方法 - 善后
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// 该方法是服务器创建了Hello类对象后自动调用的方法 - 初始化
// System.out.println("Hello对象被创建了!!!");
list.add("苹果");
list.add("香蕉");
list.add("橘子");
list.add("西瓜");
list.add("柚子");
list.add("草莓");
}
// 第一个参数代表了客户端发送给服务器的请求
// 第二个参数代表了服务器发送给客户端的响应
@Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.write("<html>");
writer.write("<head>");
writer.write("<meta charset='utf-8'>");
writer.write("</head>");
writer.write("<body>");
writer.write("<h1>今日推荐水果:<h1>");
writer.write(list.get((int) (Math.random() * list.size())));
writer.write("</body>");
writer.write("</html>");
writer.close();
}
}
Hello类实现了Servlet接口因此是一个可以部署在服务器上运行的小服务
这也就意味着服务器会创建Hello类的对象
小服务的工作模式通常是单实例多线程
部署Servlet:
WEB-INF/
- web.xml
<servlet>
<servlet-mapping>
- lib
- classes
@WebServlet
- urlPatterns
- loadOnStartup
servlet是单实例 多线程
Servlet正确用法:
作为控制器(Controller)
- 1.处理用户请求并调用相应的业务逻辑
- getParameter(String)
- 2.将数据绑定到适当的作用域中
- setAttribute(String, Object)
- 3.跳转或重定向到某个页面
- getRequestDispatcher(String)
- forward(req, resp)
- sendRedirect(String)
- getRequestDispatcher(String)
方法
destroy()
当服务器准备销毁Hello类对象时会自动调用该方法 - 善后
init()
该方法是服务器创建了Hello类对象后自动调用的方法 - 初始化
service(ServletRequest req, ServletResponse resp)
第一个参数代表了客户端发送给服务器的请求
第二个参数代表了服务器发送给客户端的响应
service方法
service方法里面只做三件事情
1.处理用户的请求
2.绑定数据(通常跟请求绑定)
3.跳转到JSP页面(用数据替换模板中的站位符)
getRequestDispatcher 拿到请求派发器
servlet上下文
ServletContext代表了当前正在运行Web项目
JSP
当小服务完成了对用户请求的处理之后应该跳转到一个模板页面
同时将获得的数据或者处理的结果传给这个模板页面
这里的模板页面就是JSP(Java Server Page)
将数据和请求绑定到一起 然后跳转到模板页面(result.jsp)
JSP正确用法:
作为视图(View)
- 不处理任何的业务逻辑只负责显示数据
应用服务器(Servlet容器)
- Apache Tomcat
- Redhat JBoss / WildFly
- Oracle Weblogic
- IBM Websphere