javaweb小结2
Tomcat服务器端口
Tomcat所有配置都在conf文件夹下,server.xml是核心文件
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
可以直接在此修改端口号, 但必须重启后才能生效.
Tomcat服务器虚拟目录映射
-
方法一: 在server.xml文件的host元素配置(不推荐,须重启)
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/JavaWebApp" docBase="F:\JavaWebProjectTest" />
</Host>
path:用来配置虚似目录,必须以"/"开头
docBase:配置此虚似目录对应着硬盘上的Web应用所在目录
目的: 将在F盘下的JavaWebDemoProject这个JavaWeb应用映射到JavaWebApp这个虚拟目录上.访问地址 localhost:8080/JavaWebApp/hello.xml
-
方法二: tomcat自动映射
tomcat会自动把webapps下所有web应用映射成虚拟目录,供外界访问.
-
方法三: 在\conf\Catalina\localhost目录下添加一个以xml作为扩展名的文件
比如建一个apple.xml,内容为<Context docBase="F:\JavaWebProjectTest" />,那么访问地址为 localhost:8080/apple/hello.xml
和方法一类似, context元素的path属性源自于是这个xml文件的名字,docBase是硬盘上的目录.
该方法无须重启Tomcat服务器
Tomcat配置虚拟主机
<Host name="www.myTest.cn" appBase="F:\JavaWebApps">
</Host>
浏览量输入一个域名后访问, 它会映射成IP地址访问, 先本地找域名的映射(windows是在C:\Windows\System32\drivers\etc\hosts),如果本地没找到,再从DNS(域名系统)找,只有找到了才能访问,否则无法访问.
将JavaWeb应用打包成war包,将这个war包放到Tomcat服务器的webapps目录下,当Tomcat服务器启动时,就会自动将webapps目录下的war包解压
HTTP协议
hypertext transfer protocol(超文本传输协议)
它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源.
在HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源.
一个完整HTTP请求: 一个请求行,若干消息头,实体内容
-
请求行: 请求方式最常用的get,post
get: 高效,不安全,参数有限制
post:
-
消息头:
Maven坐标
-
groupId : 包名(当前maven项目隶属的实际项目)
-
artifactId :项目名称( 当前实际项目中的Maven模块)
-
version : 使用构件的版本
-
packaging : 项目的打包方式(常见jar和war)
-
scope : 用来控制依赖和编译
①compile,缺省值,适用于所有阶段,会随着项目一起打包发布.
②provided,类似compile,期望JDK,容器或使用者会提供这个依赖,不会被打包.
③runtime,只在运行时使用
④test,只在测试时使用,只在测试编译和测试运行阶段可用,不会随项目发布
⑤system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它.(不推荐使用)
Servlet接口 源码解析
public interface Servlet {
// 当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,但是这个方法在后续请求中不会在被Servlet容器调用
public void init(ServletConfig config) throws ServletException;
//返回ServletConfig对象, 包含Servlet初始化参数信息
public ServletConfig getServletConfig();
//每当请求Servlet时,Servlet容器就会调用这个方法
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
//返回字符串, 包含servlet创建者,版本,版权等信息
public String getServletInfo();
//销毁Servlet时调用,释放Servlet对象占用的资源
public void destroy();
}
GenericServlet抽象类 ,为Servlet接口中的所有方法提供了默认的实现
HttpServlet抽象类是继承于GenericServlet抽象类
HttpServlet源码解析
//将ServletRequest类型对象转换为HttpServletRequest类型对象
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
} catch (ClassCastException var6) {
throw new ServletException("non-HTTP request or response");
}
this.service(request, response);
}
//解析HttpServletRequest的方法参数,分别调用7中不同方法doGet,doPost,doHead等等
//如果继承HttpServlet并实现具体逻辑时,则不需要覆盖service方法了,只需要覆盖7种doXX方法(实际使用中常用的只有doGet和doPost)
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
long lastModified;
if (method.equals("GET")) {
lastModified = this.getLastModified(req);
if (lastModified == -1L) {
this.doGet(req, resp);
}else{
//省略
}
}
//省略
}
HttpServletRequest接口
public interface HttpServletRequest extends ServletRequest {
public String getAuthType();
//返回一个cookie对象数组
public Cookie[] getCookies();
//返回与这个请求相关的会话对象
public HttpSession getSession();
//返回指定HTTP标题的值
public String getHeader(String name);
//返回生成这个请求HTTP的方法名称
public String getMethod();
//返回请求上下文的请求URI部分
public String getContextPath();
//......
}
Cookie 是客户端技术,程序吧每个用户的数据以cookie的形式写给用户各自的浏览器
JavaBean
JavaBean是一个遵循特定写法的java类:
必须具有一个无参构造函数.
属性必须私有化.
私有化属性必须通过public类型的方法暴露给其他程序,并且方法的命名遵循约定规范
JavaBean的属性可以使任意类型,并且一个JavaBean可以有多个属性.
每个属性一般都需要具有相应的setter方法(属性修改器),getter方法(属性访问器)
JDBC(Java Data Base Connectivity)
java数据库连接: 用于执行SQL语句的Java API.
-
Driver接口
Class.forName("com.mysql.jdbc.Driver");
Class.forName("oracle.jdbc.driver.OracleDriver")
-
Connection接口
Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");
Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");
-
createStatement() 创建向数据库发送预编译sql的statement对象.
-
prepareStatement(sql) 创建向数据库发送预编译sql的PrepareStatement对象.