java-Web(Tomcat)

注意,使用tomcat必须配置JAVA_HOME和CATALINA_HOME,JAVA_HOME指向java根目录,CATALINA_HOME指向tomcat根目录。

查看是否设置成功直接打开tomcat的bin下面的stratup.bat,关闭的话点shutdown.bat。linux用sh结尾的。
关于strartup.bat启动后乱码


启动成功
修改端口号的方法
进入tomcat的conf文件打开server.xml,里面找改connector port

启动服务器之后,浏览器输入http://localhost:5038或者http://127.0.0.1:5038进入页面
默认访问的是webapp的root
状态码
404出错:资源不存在
200:一切正常
403:权限不足
300/301:页面重定向
500:服务器内部错误(代码有错)
自己在webapp里面做的自己的网站里必须要有的文件夹,
classes用于存放所有的java运行完毕生成的文件,lib放自己想给自己网站用的jar包,webinf里面的web.xml指定了各种初始信息


可以指定多个寻找网页文件
在web.xml中加入网页文件的搜索路径,第一个没找到就找第二个,第二个没找到就找第三个

平常默认路径是webapp,如果想在其他外面的文件夹也识别需要配置相对路径。
首先去conf的web.xml把listings下面的param-value的false改成true

找到server.xml


加上<Context docBase="绝对路径的文件夹" path="相对路径文件夹" /> 以后网站中如果在ip端口号后面输入相对路径文件夹,实际执行的是绝对路径的文件夹
<Context path="/test" docBase="D:\zqhweb" reloadable="true" debug="0" />
只需要输入localhost:端口/test 即可跳到d:zqhweb的项目文件夹
域名解析
www.jd.com当输入这个域名的时候,首先会查看本机有没有解析,如果本机没有解析,他才会去访问互联网,从互联网解析出主机地址。
自己创建虚拟主机,创建解析地址
同样是在conf的server.xml中,它可以帮我们在输入网址的时候,不需要再输入后面的项目名,比如说localhost:8080/zqhweb可以直接输入localhost:8080/

<Host appBase="真实项目路径" name="zqhfun.top"><Context docBase="真实项目路径" path="/" /> </Host>
另一种启动方式
cd到tomcat目录下面的bin目录然后输入 catalina run
关闭记得用shutdown.bat
在idea中的装载




------------恢复内容开始------------

注意,使用tomcat必须配置JAVA_HOME和CATALINA_HOME,JAVA_HOME指向java根目录,CATALINA_HOME指向tomcat根目录。

查看是否设置成功直接打开tomcat的bin下面的stratup.bat,关闭的话点shutdown.bat。linux用sh结尾的。
关于strartup.bat启动后乱码


启动成功
修改端口号的方法
进入tomcat的conf文件打开server.xml,里面找改connector port

启动服务器之后,浏览器输入http://localhost:5038或者http://127.0.0.1:5038进入页面
默认访问的是webapp的root
状态码
404出错:资源不存在
200:一切正常
403:权限不足
300/301:页面重定向
500:服务器内部错误(代码有错)
自己在webapp里面做的自己的网站里必须要有的文件夹,
classes用于存放所有的java运行完毕生成的文件,lib放自己想给自己网站用的jar包,webinf里面的web.xml指定了各种初始信息


可以指定多个寻找网页文件
在web.xml中加入网页文件的搜索路径,第一个没找到就找第二个,第二个没找到就找第三个

平常默认路径是webapp,如果想在其他外面的文件夹也识别需要配置相对路径。
首先去conf的web.xml把listings下面的param-value的false改成true

找到server.xml


加上<Context docBase="绝对路径的文件夹" path="相对路径文件夹" /> 以后网站中如果在ip端口号后面输入相对路径文件夹,实际执行的是绝对路径的文件夹
<Context path="/test" docBase="D:\zqhweb" reloadable="true" debug="0" />
只需要输入localhost:端口/test 即可跳到d:zqhweb的项目文件夹
域名解析
www.jd.com当输入这个域名的时候,首先会查看本机有没有解析,如果本机没有解析,他才会去访问互联网,从互联网解析出主机地址。
自己创建虚拟主机,创建解析地址
同样是在conf的server.xml中,它可以帮我们在输入网址的时候,不需要再输入后面的项目名,比如说localhost:8080/zqhweb可以直接输入localhost:8080/

<Host appBase="真实项目路径" name="zqhfun.top"><Context docBase="真实项目路径" path="/" /> </Host>
另一种启动方式
cd到tomcat目录下面的bin目录然后输入 catalina run
关闭记得用shutdown.bat
在idea中的装载




可在下面修改工程路径

热部署,修改代码不用重启tomcat直接改动

第一个servlet程序
按住alt+inserct可以快速添加全部的overide方法
import javax.servlet.*;
import java.io.IOException;
public class ZqhServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("ZqhServlet被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}

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-name是给servlet程序一个名字-->
<servlet-name>zqh1</servlet-name>
<!-- servlet-class是配置类的全类名-->
<servlet-class>ZqhServlet</servlet-class>
</servlet>
<servlet-mapping> <!-- servlet-mapping设定访问地址-->
<servlet-name>zqh1</servlet-name>
<!-- url-pattern设定访问ip:port/工程路径/hello时将会访问ZqhServlet程序-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
启动tomcat后访问 ip:port/工程路径/hello (http://localhost:5038/zqh/hello) 时将会访问ZqhServlet程序
Servlet的生命周期
import javax.servlet.*;
import java.io.IOException;
public class ZqhServlet implements Servlet {
public ZqhServlet(){
System.out.println("这里是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("ZqhServlet被访问了,刷新也会执行,不止执行一次");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("这里是servlet销毁方法,tomcat停止的时候会执行");
}
}
使用<form>表单标签和get请求或者post请求去访问执行java的类程序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>m870</title>
</head>
<body>
<form action="http://localhost:5038/zqh/hello" method="get">
<input type="submit">
</form>
</body>
</html>
更常用的是继承HttpServlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Zqhhttpservlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get请求");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post请求");
}
}
web.xml里加入
<servlet>
<servlet-name>Zqhhttpservlet</servlet-name>
<servlet-class>Zqhhttpservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Zqhhttpservlet</servlet-name>
<url-pattern>/Zqhhttpservlet</url-pattern>
</servlet-mapping>
servletconfig可以获取当前servlet程序的名字,init的参数值servletcontext
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class ZqhServlet implements Servlet {
public ZqhServlet(){
System.out.println("这里是servlet的构造器方法,只在开始执行一次");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Config可以获取servlet程序名字"+servletConfig.getServletName());
System.out.println("Config可以获取初始化参数值"+servletConfig.getInitParameter("username"));
System.out.println("Config可以获取初始化参数值"+servletConfig.getInitParameter("password"));
System.out.println("Config可以获取servlet_context"+servletConfig.getServletContext());
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("ZqhServlet被访问了,刷新也会执行,不止执行一次");
//对servletRequest进行强制转换,换换成HttpServletRequest就可以用方法查看当前的请求是post还是get
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
// --------
String method1=httpServletRequest.getMethod();
if (method1.equals("GET")){
System.out.println("是get请求");
}
else if (method1.equals("POST")){
System.out.println("是post请求");
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("这里是servlet销毁方法,tomcat停止的时候会执行");
}
}
web.xml
<servlet>
<!-- servlet-name是给servlet程序一个名字-->
<servlet-name>zqh1</servlet-name>
<!-- servlet-class是配置类的全类名-->
<servlet-class>ZqhServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>zqh</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
</servlet>
<servlet-mapping> <!-- servlet-mapping设定访问地址-->
<servlet-name>zqh1</servlet-name>
<!-- url-pattern设定访问ip:port/工程路径/hello时将会访问ZqhServlet程序-->
<url-pattern>/ZqhServlet</url-pattern>
</servlet-mapping>
在HttpServlet中的使用方法
import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration; public class Zqhhttpservlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("get请求"); ServletConfig servletConfig=getServletConfig(); System.out.println("获取config的servlet程序名"+servletConfig.getServletName()); System.out.println("获取config的属性值"+servletConfig.getInitParameter("username")); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("post请求"); } } web.xml内容 <servlet> <!-- servlet-name是给servlet程序一个名字--> <servlet-name>Zqhhttpservlet</servlet-name> <!-- servlet-class是配置类的全类名--> <servlet-class>Zqhhttpservlet</servlet-class> <init-param> <param-name>username</param-name> <param-value>zqh</param-value> </init-param> </servlet> <servlet-mapping> <!-- servlet-mapping设定访问地址--> <servlet-name>Zqhhttpservlet</servlet-name> <!-- url-pattern设定访问ip:port/工程路径/hello时将会访问ZqhServlet程序--> <url-pattern>/Zqhhttpservlet</url-pattern> </servlet-mapping>
servletContext域对象
import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class TestContextSlt extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取web.xml里面的全局上下文参数 ServletContext servletContext=getServletConfig().getServletContext(); String 全局参数=servletContext.getInitParameter("全局参数"); System.out.println(全局参数); //获取当前的工程路径 System.out.println("当前的工程路径(浏览器里面显示的虚拟路径)为"+servletContext.getContextPath()); //映射到代码的webapp目录 System.out.println("当前工程部署的路径是(服务器里web工程的webapp真实路径)"+servletContext.getRealPath("/")); } } web.xml的内容里加 <context-param> <param-name>全局参数</param-name> <param-value>属于整个web工程</param-value> </context-param> <servlet> <servlet-name>TestContextSlt</servlet-name> <servlet-class>TestContextSlt</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestContextSlt</servlet-name> <url-pattern>/TestContextSlt</url-pattern> </servlet-mapping>

浙公网安备 33010602011771号