C/S架构是客户端服务器架构,将需要处理的业务合理的分配到客户端和服务器,客户端负责与用户的交互任务,服务器负责数据管理。
优点:
缺点
B/S架构是浏览器服务器架构,将系统功能的主要业务逻辑集中到服务器端,极少的业务逻辑在浏览器实现。浏览器负责与用户的交互任务,服务器负责数据管理。
优点
缺点
web是在互联网上提供外界访问的资源,分为静态资源(浏览器内容始终不变,如HTML语言,文本语言)和动态资源(浏览数据由程序产生,不同时间访问看到的页面不同,如Servlet JSP等)
JavaWeb指使用java语言进行动态web资源开发技术,是解决相关web互联网领域的技术总和。
HTTP协议是超文本传输协议,由W3C万维网联盟组织制定的应用层协议,用来规范浏览器和web服务器之间通讯的数据格式,主要涉及浏览器的请求格式和服务器的响应格式
HTTP协议承载于TCP 协议之上,HTTPS协议是承载于TLS或SSL协议层之上的协
HTTP与HTTPS区别:
HTTP请求格式
客户端发送一个HTTP请求到服务器的消息包括:请求行,请求头,空白行,请求体
HTTP响应格式
服务器接受并处理客户端的发过来的请求并返回HTTP响应信息,包括:响应行, 响应头,空白行,响应体
Tomcat最初由Sun公司软件架构师詹姆斯·邓肯·戴维开发的,后贡献给Apache软件基金会
Tomcat服务器是一个开源的轻量级web应用服务器,在中小型系统和开发量小的场合下被普遍使用,是开发和调试servlet、JSP 程序的首选
Tomcat目录结构:
Tomcat启动和关闭
<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<role rolename="manager-gui"/> <user username="admin" password="123456" roles="manager-gui"/>
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是Java语言编写的服务器端程序,换句话说,Servlet就是运行在服务器上的Java类。
Servlet用来完成B/S架构下客户端请求的响应处理,也就是交互式地浏览和生成数据,生成动态Web内容。
Servlet的编程步骤
<!--配置文件--> <servlet> <!--起别名,最好与类名相同--> <servlet-name>HelloServlet</servlet-name> <!--对应哪个类--> <servlet-class>com.HelloServlet</servlet-class> </servlet> <!--servlet的映射配置--> <servlet-mapping> <!--对应的别名--> <servlet-name>HelloServlet</servlet-name> <!--访问路径--> <url-pattern>/hello</url-pattern> </servlet-mapping>
javax.servlet.Servlet接口用于定义所有servlet必须实现的方法
方法声明 | 功能介绍 |
void init(ServletConfig config) | 由servlet容器调用,以向servlet指示servlet正在被放入服务中 |
void service(ServletRequest req,ServletResponse res) | 由servlet容器调用,以允许servlet响应请求 |
ServletConfig getServletConfig() | 返回ServletConfig对象,该对象包含此servlet的初始化和启动参数 |
String getServletInfo() | 返回有关servlet的信息,如作者、版本和版权 |
void destroy() | 由servlet容器调用,以向servlet指示该servlet正在退出服务 |
方法声明 | 功能介绍 |
abstract void service(ServletRequest req,ServletResponse res) | 由servlet容器调用允许servlet响应请求 |
方法声明 | 功能介绍 |
void doGet(HttpServletRequest req,HttpServletResponse resp) | 处理客户端的GET请求 |
void doPost(HttpServletRequest req,HttpServletResponse resp) | 处理客户端的POST请求 |
void init() | 进行初始化操作 |
void service(HttpServletRequest req,HttpServletResponse resp) | 根据请求决定调用doGet还是doPost方法 |
void destroy() | 删除实例时释放资源 |
使用注解方式生成Servlet类的简化
package com; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "HelloServlet4",urlPatterns = "/hello4") public class HelloServlet4 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("dopost请求"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doget请求"); } /* @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("简化Servlet方式"); String method = req.getMethod(); System.out.println("请求方式为"+method); if ("GET".equals(method)){ doGet(req,resp); } if ("post".equalsIgnoreCase(method)){ doPost(req,resp); } }*/ }
方法声明 | 功能介绍 |
String getParameter(String name) | 以字符串形式返回请求参数的值,如果该参数不存在,则返回空值 |
String[] getParameterValues(String name) | 返回一个字符串对象数组,其中包含给定请求参数所具有的所有值,如果该参数不存在,则返回空值 |
Enumeration getParameterNames() | 返回包含此请求中包含的参数名称的字符串对象的枚举。如果请求没有参数,则方法返回空枚举 |
Map<String, String[]> getParameterMap() | 返回请求参数的键值对,一个键可以对应多个值 |
String getRemoteAddr() | 返回发送请求的客户端或最后一个代理的IP地址 |
int getRemotePort() | 返回发送请求的客户端或最后一个代理的端口号 |
方法声明 | 功能介绍 |
String getRequestURI() | 返回此请求的资源路径信息 |
StringBuffer getRequestURL() | 返回此请求的完整路径信息 |
String getMethod() | 返回发出此请求的HTTP方法的名称,例如GET、POST |
String getQueryString() | 返回路径后面请求中附带的参数 |
String getServletPath() | 返回此请求中调用servlet的路径部分 |
方法声明 | 功能介绍 |
PrintWriter getWriter() | 返回可向客户端发送字符文本的PrintWriter对象 |
String getCharacterEncoding() | 获取响应内容的编码方式 |
void setContentType(String type) | 如果尚未提交响应,则设置发送到客户端响应的内容类型。内容类型可以包括字符编码规范,例如text/html;charset=UTF-8 |
// 接收到get请求的中文字符串 String name = request.getParameter("name"); // 将中文字符重新编码,默认编码为ISO-8859-1 String userName = new String(name.getBytes(“ISO-8859-1”),“utf-8");
web.xml
<servlet> <servlet-name>paraServlet</servlet-name> <servlet-class>com.ParaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>paraServlet</servlet-name> <url-pattern>/paraServlet</url-pattern> </servlet-mapping>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>parameter</title> </head> <body> <form action="paraServlet" method="post"> 姓名:<input type="text" name="name"> <br> 年龄:<input type="text" name="age"> <br> 爱好:<input type="checkbox" name="hobby" value="唱歌">唱歌 <input type="checkbox" name="hobby" value="舞蹈">舞蹈 <input type="checkbox" name="hobby" value="美术">美术<br> <button >提交</button> </form> </body> </html>
package com; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Map; import java.util.Random; import java.util.Set; @WebServlet(name = "ParaServlet") public class ParaServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //ServletRequest接口 //设置字符编码 request.setCharacterEncoding("utf-8"); // 获取参数值 String name = request.getParameter("name"); System.out.println("姓名为"+name); // 获取参数值集合 String[] hobbies = request.getParameterValues("hobby"); System.out.print("爱好是"); for (String s:hobbies) { System.out.print(s+" "); } System.out.println(); // 获取所有参数名 Enumeration<String> parameterNames = request.getParameterNames(); System.out.print("所有参数名为:"); while (parameterNames.hasMoreElements()){ System.out.print(parameterNames.nextElement()+" "); } System.out.println(); // 获取键值对 Map<String, String[]> map = request.getParameterMap(); System.out.print("键值对:"); Set<Map.Entry<String, String[]>> entries = map.entrySet(); for (Map.Entry<String, String[]> entry : entries) { System.out.print(entry.getKey()+"="); for (String s:entry.getValue()) { System.out.println(s+" "); } System.out.println(); } System.out.println("------------------------------------"); //HttpServletRequest接口 // 获取发送请求的客户端或最后一个代理的IP地址 System.out.println("代理的IP地址"+request.getRemoteAddr()); // 获取发送请求的客户端或最后一个代理的端口号 System.out.println("代理的端口号"+request.getRemotePort()); //返回此请求的资源路径信息 System.out.println("请求的资源路径信息"+request.getRequestURI()); // 返回此请求的完整路径信息 System.out.println("请求的完整路径信息"+request.getRequestURL()); // 返回发出此请求的HTTP方法的名称,例如GET、POST System.out.println("求的HTTP方法"+request.getMethod()); //返回路径后面请求中附带的参数 System.out.println("请求中附带的参数"+request.getQueryString()); //返回此请求中调用servlet的路径部分 System.out.println("调用servlet的路径部分"+request.getServletPath()); //ServletResponse接口响应客户端 // 查看字符编码 String characterEncoding = response.getCharacterEncoding(); System.out.println(characterEncoding); //更改字符编码 response.setContentType("text/html;charset=utf-8"); //发送响应 PrintWriter writer = response.getWriter(); writer.write("我接受到了"); //获取随机数值 int num = (int) (Math.random() * 100 + 1); writer.write(num); writer.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
方法声明 | 功能介绍 |
String getServletName() | 返回Servlet的别名 |
String getInitParameter(String name) | 返回包含初始化参数值的字符串,如果该参数不存在,则返回null |
Enumeration getInitParameterNames() | 将servlet的初始化参数的名称作为字符串对象的枚举返回,如果servlet没有初始化参数,则返回空枚举 |
ServletContext getServletContext() | 返回对调用方正在其中执行的ServletContext的引用 |
<!-- 在web.xml中配置ServletConfig初始化参数 --> <servlet> <servlet-name>actionservlet</servlet-name> <servlet-class>com.lagou.demo01.ActionServlet</servlet-class> <!-- 配置 Serlvet 的初始化参数 --> <init-param> <!-- 参数名 --> <param-name>config</param-name> <!-- 参数值 --> <param-value>struts.xml</param-value> </init-param> </servlet>
package com; import javax.servlet.*; import java.io.IOException; import java.util.Enumeration; public class ConfigServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { //参数信息 String para1 = servletConfig.getInitParameter("userName"); System.out.println(para1); System.out.println("-------------"); Enumeration<String> initParameterNames = servletConfig.getInitParameterNames(); while (initParameterNames.hasMoreElements()) System.out.println(initParameterNames.nextElement()); System.out.println("-------------"); //ConfigServlet的别名 System.out.println("ConfigServlet的别名"+servletConfig.getServletName()); //正在其中执行的ServletContext的引用 System.out.println("正在其中执行的ServletContext的引用"+servletConfig.getServletContext()); String servletName = servletConfig.getServletName(); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
方法声明 | 功能介绍 |
String getInitParameter(String name) | 返回包含初始化参数值的字符串,如果该参数不存在,则返回null |
Enumeration getInitParameterNames() | 将servlet的初始化参数的名称作为字符串对象的枚举返回,如果servlet没有初始化参数,则返回空枚举 |
String getRealPath(String path) |
返回包含给定虚拟路径的实际路径的字符串 |
String getContextPath() | 返回与此上下文关联的主路径 |
InputStream getResourceAsStream(String path) | 将位于指定路径的资源作为InputStream对象返回 |
void setAttribute(String name, Object object) | 将指定的属性名和属性值绑定到当前对象 |
Object getAttribute(String name) | 根据执行的属性名获取属性值 |
void removeAttribute(String name) | 删除指定的属性名信息 |
<!--在web.xml中配置ServletContext初始化参数 --> <context-param> <param-name>username</param-name> <param-value>scott</param-value> <context-param> <context-param> <param-name>password</param-name> <param-value>tiger</param-value> <context-param>
package com; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration; @WebServlet(name = "ContextServlet") public class ContextServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = getServletContext(); //获取初始化内容参数 String userName = servletContext.getInitParameter("userName"); System.out.println(userName);//Scott //获取所有参数 Enumeration<String> initParameterNames = servletContext.getInitParameterNames(); while (initParameterNames.hasMoreElements()){ String s = initParameterNames.nextElement(); System.out.println(s+servletContext.getInitParameter(s)); } //路径 String realPath = servletContext.getRealPath("/"); System.out.println("实际路径的字符串"+realPath);//实际路径的字符串C:\Users\Administrator\Desktop\java小白学习资料\java跟课学\第四阶段\模块一:JavaWeb核心(上)\out\artifacts\task02_war_exploded\ String contextPath = servletContext.getContextPath(); System.out.println("此上下文关联的主路径"+contextPath);//此上下文关联的主路径/task02 //设置参数信息 servletContext.setAttribute("para1","value1"); //获取设置的参数 System.out.println(servletContext.getAttribute("para1"));//value1 //删除参数 servletContext.removeAttribute("para1"); System.out.println(servletContext.getAttribute("para1"));//null } }
原文:https://www.cnblogs.com/forever-fate/p/14293782.html