目录
1,创建一个文件夹,根目录为test,子目录必须有WEB-INF,它是web项目中的核心目录,客户端浏览器是无法直接访问该目录下的资源
2,WEB-INF的子目录必须有classes,classes用来存放编译好的class文件
3,WEB-INF的子目录下还必须有web.xml,它是web项目中核心的配置文件,tomcat启动后会自动读取项目中web.xml文件
4,将test文件夹剪切粘贴到Tomcat中的webapps目录中
一、在Tomcat中,部署Web项目
1,创建一个文件夹,根目录为test,子目录必须有WEB-INF,它是web项目中的核心目录,客户端浏览器是无法直接访问该目录下的资源
在test文件夹下,新建一个txt文件,输入
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
然后将txt文件重命名为:index.html
2,WEB-INF的子目录必须有classes,classes用来存放编译好的class文件
创建一个JAVA文件,命名为HelloWorld.java:
package com.briup.test;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>index</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World! briup</h1>");
out.println("</body>");
out.println("</html>");
}
}
java文件无法直接引用,需要用javac命令编译成类文件,编译命令为:
javac -cp D:\apache\apache-tomcat-8.5.58\lib\servlet-api.jar -d . HelloWorld.java
#因为使用到了servlet规范,需要用到servlet-api.jar,此jar包在tomcat中lib里面中,所以在编译的
时候,需要指定jar所在的路径
这里有个细小的点,因为创建java地址是在桌面,所以在使用cmd命令时,先将地址转为桌面
cd Desktop
运行结果是桌面出现一个com文件夹 ,将com文件夹剪切到classes文件夹中。
3,WEB-INF的子目录下还必须有web.xml,它是web项目中核心的配置文件,tomcat启动后会自动读取项目中web.xml文件
在WEB-INF文件夹里创建一个txt文件,写入代码后重命名为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_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.briup.test.HelloWorld</servlet-class>
</servlet>
<!-- 当前浏览器访问web-test项目中的动态资源/hello-world的时候-->
<!-- tomcat会自动帮我们调用com.briup.test.HelloWorld中的方法来进行处理-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello-world</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4,将test文件夹剪切粘贴到Tomcat中的webapps目录中
5,访问Test文件
访问之前要启动Tomcat,启动方法是双击Tomcat文件夹下bin文件夹里的startup.bat
Tomcat的访问格式为:
http://localhost:8989/your_project/resource_in_project
或为:
http://127.0.0.1:8989/your_project/resource_in_project
先访问web-test项目中的静态资源: http://127.0.0.1:8989/web-test/index.html
再访问web-test项目中的动态资源:http://127.0.0.1:8989/web-test/hello-world
二、利用sts工具连接tomcat,部署web项目
1,连接tomcat
配置步骤:sts:windows/preferences/server/runtime environments,添加tomcat的文件地址就可以了
2,在sts上部署web项目
File新建项目,选其他,选择web文件下的,Dynamic Web Project,web项目就会创建成功。
创建结果如图:
有两个必须要有的文件:在Java Resources文件夹下的src包里,创建一个类(Class文件)用来编写动态资源的源码,在WebContent文件夹下创建Html文件,用来存放静态资源源码。编辑好源码后将这个Web项目添加到服务器后,就算是部署成功了,如图:
有一个小的知识点是,映射路径配置的两种方式,在web.xml中配置或者利用注解配置,两种方法不要同时用,否则服务器会不识别,这里记录一下利用注解配置的方法,在class文件中的类名上一行@WebServlet(“/路径名”),记不住单词用alt+/提示
三、文件源码的编写规范
1、实现接口
Servlet技术可以扩展服务器端的功能,让java代码在服务器端也能成为一种资源(动态资源),javax.servlet.Servlet它是Servlet技术的核心接口,所有的Servlet程序,都必须是该接口的实现类。如果要实现接口,用implements关键字,如果要使用抽象类来实现接口,就用extends关键字。这里只记录HttpServlet方法,它是个抽象类,应当用extends关键字,使用方法为:
public class Say extends HttpServlet {
}
//类名为Say,继承HttpServlet抽象类
2、请求方法Get与Post
Get:是浏览器从服务器获取数据
Post:是服务器从浏览器获取数据
//在继承HttpServlet的情况下:
//Get方式,输入doget,alt+/提示即可自动填补出以下
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
//Post方式,输入dopost,自动补充即可出现以下
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
3,html的编辑
<form action="Hello";method="post">
用户名:<input type="text" name="name"><br>
<input type="submit" value="提交">
</form>
拿上方代码举例,在body中添加form,索引名为:“Hello”,方法是“post”方法,所以其对应的类的方法也应该为post方法,在form中的功能语句为中间两行:
翻译一下:用户名:,输入类型为text,变量名是name,换行,输入类型是submit,值为“提交”
4,接收参数与解决参数乱码
接收请求中单一的参数值的时候,也就是一个参数名对应一个值,使用 getParameter 方法即可,如:/param?name=tom&age=20
接收一个参数名对应多个值,例如页面中的多选框,此时可以使用 getParameterValues 方法,如:/param?like=0&like=1
在一些特殊情况下,需要获取请求中携带的所有参数名,此时可以使用 getParameterNames 方法
如:/param?name=tom&age=20&like=0&like=1
servlet中将获取的参数写回给浏览器的时候,避免乱码的方法:
//设置响应中的编码为UTF-8
resp.setCharacterEncoding("UTF-8");
//告诉浏览器当前响应中的内容的类型,和内容的编码为UTF-8
resp.setContentType("text/plain;charset=UTF-8");
下面是一个在页面输出的例子:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
//利用req对象,获取到用户写到程序框里的内容,用“一个”字符串来表示参数name的值
String name = req.getParameter("name");
//设置响应内容的格式和字符编码
resp.setContentType("text/plain; charset=UTF-8");
//通过响应对象,获取输出流
PrintWriter out = resp.getWriter();
out.print("你好!"+name);
}
如果要将浏览器的参数输出到服务器,避免乱码,只需要加上一句(这里指的在post方法中)
req.setCharacterEncoding("UTF-8");
下面是个例子:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String name = req.getParameter("name");
System.out.print("我的名字是 "+name);
}
四、
1、跳转
也称之为,服务器内部跳转。
其本质是,在servlet接收到一个请求的时候,可以将此请求转发给服务器内部的另一个资源中,如果这
个资源是一个html页面,那么tomcat就会自动读取这个html页面并写回给浏览器。不仅可以从一个Servlet跳转到一个html页面中,也可以从一个Servlet跳转到另一个Servlet中
package com.briup.test;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("Forword")
public class Forword extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//下面三行是为了避免乱码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//path表示要返回的地址
String path = "/index.html";
//根据指定的地址,获取请求发展对象
RequestDispatcher dispatcher = req.getRequestDispatcher(path);
//使用请求转发对象,把请求对象和响应对象转发给服务器内部的另一个资源
dispatcher.forward(req, resp);
}
}
其实就是把请求request和响应response转发到下一个资源中,所以在整个过程中,使用的是同一个request和response
2、重定向
也称之为,客户端重定向。
其本质是,客户端浏览器发送第一次请求,访问servlet获取资源,但是服务器中,已经将资源转移到另一个位置了,所以需要通知客户端浏览器,重新发送第二次请求,访问一个新的资源位置。