前台和后台的区别
前台:呈现给用户的视觉和基本的操作。
后台:用户浏览网页时,我们看不见的后台数据跑动。后台包括前端,后端。
前端:对应我们写的html 、javascript 等网页语言作用在前端网页。
后端:对应servlet、jsp等技术
servlet技术
Servlet是Java语言中编写Web服务器扩展功能的重要技术,同时它也是JSP技术的底层运行基础。
Servlet是一个基于java技术的Web-APi,运行在服务器端,由servlet容器管理,用于生成动态内容。
Tomcat 介绍
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,
由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet
和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java
爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat目录
- bin:该目录下存放的是二进制可执行文件。
- startup.bat/sh 用来启动Tomcat但需要先配置JAVA_HOME环境变量才能启动
- shutdown.bat/sh 用来停止Tomcat;
- catalina.bat/sh Tomcat启动脚本,可以在里面设置jvm参数。
- conf:该目录下存放的是Tomcat的配置文件。
- server.xml 配置整个服务器信息。例如修改端口号,添加虚拟主机等;
- context.xml 对所有应用的统一配置,通常我们不会去配置它。
- lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下;
- logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
- temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
- webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。
- work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
- LICENSE:许可证。
- NOTICE:说明文件。
web工程以及普通工程
用于编写servlet的工程叫web工程。
普通工程
java项目通过main作为主函数入口启动,直接依赖JVM就能被编译执行。
普通java工程的话,是AWT,SWING,工具类这类的编码。
普通工程打包后是jar包。
Web工程
java web项目启动依赖web容器,脱离了web服务器就无法启动。web服务器:tomcat
Web工程是网页的编码,像jsp,servlet,struts这类的,也可以理解为j2ee的。
web工程打包后是war包。
web工程目录
Porject/
├── src 存放Java源代码的目录。
├── build 自动编译.java文件的目录
└── WebContent 存放的是需要部署到服务器的文件
├──META-INF 是存放工程自身相关的一些信息,元文件信息,通常由开发工具和环境自动生成。
│ └──MANIFEST.MF 配置清单文件
└──WEB-INF 这个目录下的文件,是不能被客户端直接访问的。
├──lib 用于存放该工程用到的库。
└──web.xml web工程的配置文件,完成用户请求的逻辑名称到真正的servlet类的映射。
URL
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示
格式
protocol://hostname:port/path?parameters
协议 ????/主机名(ip) :端口/路径?参数key=value&key=value
https://www.baidu.com/s?ie=UTF-8&wd=%E6%9F%90%E5%AE%9D
https://www.taobao.com/?spm=a231o.7712113%2Fg.1581860521.1.2b734608TTXe0n&prepvid=200_11.9.58.175_25659_1573713271728&extra=&pid=mm_10011550_0_0&clk1=&unid=&source_id=&app_pvid=200_11.9.58.175_25659_1573713271728
http://127.0.0.1:8080/project/servlet?name=jason&pwd=123456 get请求
创建第一个servlet
1
2
3
4
5
6
7
8
9
10
11
12
13a.继承GenericServlet重写service方法 b.在web.xml配置servlet <!--servlet信息--> <servlet> <servlet-name>servlet名称</servlet-name> <servlet-class>servlet处理类</servlet-class> </servlet> <!--servlet映射--> <servlet-mapping> <servlet-name>servlet名称</servlet-name> <url-pattern>表达式</url-pattern> </servlet-mapping>
Http协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
参考 关于HTTP协议,一篇就够了 - ranyonsue - 博客园.png
HTTP之状态码—在浏览器看
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1
2
3
4
5
61xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受(请求已经处理完成了) 3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或请求无法实现:404:找不到路径,400:坏请求(请求参数错误)405:请求的方式不对 5xx:服务器端错误--服务器未能实现合法的请求:出现了5开头的错误,想都不用想直接打开sts查看异常
HttpServletRequest以及HttpServletResponse
Request:请求、Response:响应
-
ServletRequest封装了请求信息,可以从中获取请求的任何信息
HttpServletRequest是ServletRequest子类,相比ServletRequest更适用Http协议
复制代码1
2
3
4
5
6
7
8获得基本信息 String localAddr = request.getLocalAddr();// 获取WEB服务器的IP地址 String localName = request.getLocalName();// 获取WEB服务器的主机名 Integer localPort = request.getLocalPort();// 获取WEB服务器的端口 String remoteAddr = request.getRemoteAddr();// 获取来访者的IP地址 String remoteHost = request.getRemoteHost();// 获取来访者的主机名 Integer remotePort = request.getRemotePort();// 获取来访者的端口
复制代码1
2
3
4
5
6获取请求表单 request.getParameter(arg0)//获取表单 request.getParameterNames()//获取所有表单名字 request.getParameterValues(arg0)//获取表单多个值 request.getParameterMap()//以map形式获取表单
复制代码1
2
3
4获取地址 request.getRequestURL() request.getRequestURI()
复制代码1
2
3获取请求类型 request.getMethod()
复制代码1
2
3
4
5获取请求头 request.getHeader(arg0)获取请求头 request.getHeaders(arg0);/获取多个请求头的值 getHeaderNames()//获取所有请求头
ServletResponse对象 响应客户端
HttpServletResponse则是对服务器的响应对象。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
1
2
3
4
5
6常用的方法 addCookie(Cookie cookie) 向客户端写入Cookie addHeader(Java.lang.String name, java.lang.String value) 写入给定的响应头 encodeURL(java.lang.Stringurl) 默认cookie中包含Session ID,如果客户端不支持 Cookie,就在参数 url 中加入 Session ID 信息,可以解决用户禁用cookie的问题。 setStatus(intsc) 设置响应的状态码
MyFirstServlet.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52package com.test.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 怎么运行web项目,需要在sts中配置service(web服务)Tomcat * * Servlet implementation class MyFirstServlet */ @WebServlet("/MyFirstServlet") public class MyFirstServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public MyFirstServlet() { super(); // TODO Auto-generated constructor stub } /** * * 当用户发起请求的时候就会执行doGet和doPosot方法,根据用户的请求方式,使用get请求就调用doget方法,使用post请求就调用dopost方法。 * * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //浏览器地址栏访问的都是get请求。 System.out.println("hello,我的第一个servlet,doget方法"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("hello,我的第一个servlet,dopost方法"); } }
MySecondServlet.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38package com.test.servlet; import java.io.IOException; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; /** * * 在servlet3.0之前是没有注解方式的,只能通过web.xml来进行配置 * * 在servlet3.0之后就是可以通过使用注解方式@WebServlet("/MyFirstServlet") MyFirstServlet就是访问地址 * * 在同一个servlet中配置方式和注解方式不要一起使用 * * @author admin * */ public class MySecondServlet extends GenericServlet { @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub //抽象类,需要重写service方法。 //service就是doGet和doPost方法的上一级 //简单一点:所有访问MySecondServlet的请求都会执行service方法 System.out.println("我的第二个servlet!!"); System.out.println(1/0); } }
MyServlet3.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105package com.test.servlet; import java.io.IOException; import java.util.Enumeration; import java.util.Map; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; public class MyServlet3 extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // request请求 // response相应 // 获得基本信息 String localAddr = request.getLocalAddr();// 获取WEB服务器的IP地址 String localName = request.getLocalName();// 获取WEB服务器的主机名 Integer localPort = request.getLocalPort();// 获取WEB服务器的端口 String remoteAddr = request.getRemoteAddr();// 获取来访者的IP地址 String remoteHost = request.getRemoteHost();// 获取来访者的主机名 Integer remotePort = request.getRemotePort();// 获取来访者的端口 // 快捷键就是多行编辑:进入刀快捷键状态alt + shift + a,退出也是alt + shift + a System.out.println(localAddr); System.out.println(localName); System.out.println(localPort); System.out.println(remoteAddr); System.out.println(remoteHost); System.out.println(remotePort); // 表单信息就是在请求的时候携带的参数 // get请求就是在url?后面的参数,表单就是key=value形式,多个表单参数隔开使用 // http://localhost:8080/day43/MyServlet3?aaa=123&bbb=456 // post请求表单是隐藏的 // 获取请求表单 // request.getParameter(arg0)//获取表单 // request.getParameterNames()//获取所有表单名字 // request.getParameterValues(arg0)//获取表单多个值 // request.getParameterMap()//以map形式获取表单 String aaa = request.getParameter("aaa"); String bbb = request.getParameter("bbb"); System.out.println(aaa); System.out.println(bbb); Enumeration<String> enumeration = request.getParameterNames(); while (enumeration.hasMoreElements()) { String string = (String) enumeration.nextElement(); System.out.println(string); } System.out.println("---------------------getParameterValues----"); // http://localhost:8080/day43/MyServlet3?aaa=a1&bbb=b2&aaa=c3&aaa=d4 String[] strings = request.getParameterValues("aaa"); for (String string : strings) { System.out.println(string); } System.out.println("---------------------getParameterMap----"); Map<String, String[]> map = request.getParameterMap(); for (String string : map.keySet()) { System.out.println(string); String[] strings2 = map.get(string); for (String string3 : strings2) { System.out.println(string3); } } // 获取地址 获取url HttpServletRequest httpServletRequest = (HttpServletRequest) request; StringBuffer url = httpServletRequest.getRequestURL(); // 标识符 String url2 = httpServletRequest.getRequestURI(); System.out.println(url.toString()); System.out.println(url2); // 获取请求类型 // request.getMethod() System.out.println(httpServletRequest.getMethod()); System.out.println("---------------------getHeaderNames----"); // 获取请求头 // request.getHeader(arg0)获取请求头 // request.getHeaders(arg0);/获取多个请求头的值 // getHeaderNames()//获取所有请求头 Enumeration<String> enumeration2 = httpServletRequest.getHeaderNames(); while (enumeration2.hasMoreElements()) { String string = (String) enumeration2.nextElement(); System.out.print(string + ":"); // 根据key获取值 System.out.println(httpServletRequest.getHeader(string)); } } }
web.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <display-name>day43</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 配置servlet、firter、listener等等 --> <!--servlet信息 --> <servlet> <servlet-name>MySecondServlet</servlet-name> <servlet-class>com.test.servlet.MySecondServlet</servlet-class> </servlet> <!--servlet映射 --> <servlet-mapping> <servlet-name>MySecondServlet</servlet-name> <url-pattern>/aaa</url-pattern><!-- 访问地址,访问aaa,就要访问com.test.servlet.MySecondServlet中service方法 --> </servlet-mapping> <!-- 在web项目中只有一个web.xml。文件,servlet有多个就配置多个 --> <!-- 配置servlet、firter、listener等等 --> <!--servlet信息 --> <servlet> <servlet-name>MyServlet3</servlet-name> <servlet-class>com.test.servlet.MyServlet3</servlet-class> </servlet> <!--servlet映射 --> <servlet-mapping> <servlet-name>MyServlet3</servlet-name> <url-pattern>/MyServlet3</url-pattern><!-- 访问地址,访问aaa,就要访问com.test.servlet.MySecondServlet中service方法 --> </servlet-mapping> <servlet> <servlet-name>ServletHw</servlet-name> <servlet-class>com.test.servlet.ServletHw</servlet-class> </servlet> <!--servlet映射 --> <servlet-mapping> <servlet-name>ServletHw</servlet-name> <url-pattern>/ServletHw</url-pattern><!-- 访问地址,访问aaa,就要访问com.test.servlet.MySecondServlet中service方法 --> </servlet-mapping> </web-app>
最后
以上就是含糊月光最近收集整理的关于J2EE1 servlet Tomcat 创建第一个servlet HttpServletRequest以及HttpServletResponse的全部内容,更多相关J2EE1内容请搜索靠谱客的其他文章。
发表评论 取消回复