1.软件系统体系结构
B/S架构:即浏览器/服务器体系结果,优点是只需要编写服务器程序,缺点是安全性较差,例如有很多钓鱼网站可以窃取用户的信息
C/S架构:即客户端/服务器,优点是安全性比较好,缺点是同时更新客户端和服务端,比较麻烦。例如更新一个版本,客户端需要下载新的文件。
2.Http协议
HTTP是一种不保存用户状态,即无状态(stateless)的协议。
通过三次握手来建立链接,四次握手来释放连接
3.Tomcat服务器
Tomcat服务器由Apache提供,开源免费
注意:
1.tomcat7中get请求的默认字符编码不是“UTF-8”,tomcat8中get请求默认是“UTF-8”
2.只有 bin 和 lib 目录是被多个Tomcat实例公用,其它目录conf、logs、temp、webapps和work每个Tomcat实例必须拥有其自己独立的备份。
3.1注意事项
(个人总结:如果将jia包放到src目录下,只能被JVM来加载,tomcat访问不到,tomcat只能访问web-inf下的lib目录。因为最终是将src下的项目打包成war包放到web下面由tomcat来执行)
4.Servlet
Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:接收请求数据;处理请求;完成响应。
实现的三种方式:
-
实现javax.servlet.Servlet接口;
-
继承javax.servlet.GenericServlet类;
-
继承javax.servlet.http.HttpServlet类;
1.通常我们会使用第三种方法来创建,我们只需要重写doget或者dopost方法即可。注意不能重写service方法,否则父类中service方法做的处理全都会失效。
2.Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!
Servlet在被访问时创建,只创建一个,每个用户访问的AServlet都是同一个AServlet。
5.Servlet的生命周期
通过实现javax.servlet.Servlet接口,我们可以清晰的看到他的生命周期。
代码举例:
@WebServlet("/ceshi")
public class ceshi implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Servlet出生,只执行一次......");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet工作,请求多少此,就执行多少次.......");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("servlet关闭,服务器关闭前再执行此方法,一般用来释放资源.......");
}
}
6.Servlet的核心API:
ServletConfig由tomcat来创建,子类可以直接拿来使用。
ServletRequest和ServletResponse是Servlet#service() 方法的两个参数,一个是请求对象,一个是响应对象。
重定向资源路径问题(重定向到html页面)
如果设置访问的项目名:则必须在前面加上项目名,例如:/项目名/资源路径
建议对重定向的URL的写法:
req.getContextPath()+“/资源路径”
7.注解&配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置Servlet, 一个Servlet类绑定一个url(客户端访问入口)-->
<servlet>
<!-- 名称 随意取, 一般取名类名-->
<servlet-name>index</servlet-name>
<!--对应的Servlet类, 全限定名(包.类名) -->
<servlet-class>com.feisi.demo.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--名称, 与对应servlet的servlet-name一样 -->
<servlet-name>index</servlet-name>
<!--绑定url: /路径 一般取名: /类名 -->
<url-pattern>/index</url-pattern>
</servlet-mapping>
<web-app>
我们可以直接通过注解将url路径写在servlet类上面,这样就可以将url路径和servlet类想对应,就可以不用写xml文件了。
用注解的方式:
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("DServlet....");
System.out.println("");
}
}