| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Servlet详解,从无到有 -> 正文阅读 |
|
[网络协议]Servlet详解,从无到有 |
Servlet详解,从无到有什么是ServletServlet是SUN公司提供的一门用于开发动态的web资源的技术,可以实现和客户端的交互,接收客户端的请求和客户端返回响应 Servlet是一个接口,用户如果想开发一个动态web资源需要: 1、编写一个java类,实现Servlet接口 2、把开发好的java类部署到web服务器中 Servlet的实现类Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。 HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。 HttpServlet在实现Servlet接口时,重写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要重写doGet或doPost方法,而不要去重写service方法。 主要学习HttpServlet! Servlet的注册两种注册方法: 1、使用web.xml配置文件通过映射注册 2、使用@WebServlet()注解通过映射注册 使用web.xml配置文件通过映射注册 <servlet> ? ?//通过路径查找Servlet类 ? ? ? ?<servlet-name>Servlet01</servlet-name>//填写Servlet类名 ? ? ? ?<servlet-class>com.wangnian.servlet.Servlet01</servlet-class>//填写Servlet类在src目录下的路径 ? ?</servlet> ? ?//通过映射查找Servlet的类名,找到类名后查询上面<servlet>中对应的类的路径进行使用Servlet ? ?<servlet-mapping> ? ? ? ?<servlet-name>Servlet01</servlet-name>//Servlet类名 ? ? ? ?<url-pattern>/Servlet01</url-pattern>//前端连接地址的代号(自定义) ? ?</servlet-mapping> 使用@WebServlet()注解通过映射注册 @WebServlet("/Servlet01") //标记Servlet类 ? 里面的value值自定义跟前端相同(servlet上别忘记了/) 其原理跟web.xml相同,更加简洁方便 注册时常用的参数init方法为HttpServlet的方法,其功能就是对servlet对象进行初始化,提供config配置中的参数可以取出来方便使用 public void init(ServletConfig config) throws ServletException { ? ?System.out.println(config.getInitParameter("妄念")+config.getInitParameter("小明")); ? } init中的参数为name的值跟value的值还有default(可忽略),也就是键值对 key=value init在使用web.xml配置文件进行注册时的使用 <servlet> ? ? ? ?<servlet-name>Servlet01</servlet-name> ? ? ? ?<servlet-class>com.wangnian.servlet.Servlet01</servlet-class> ? ? ? ? ? ?//配置init的config的参数 ? ? ? ?<init-param> ? ? ? ? ? ?//这里只有一个也可以写多个键值对.... ? ? ? ? ? ?<param-name>name</param-name>//key ? ? ? ? ? ?<param-value>妄念</param-value>//value ? ? ? ?</init-param> ? ?</servlet> init在@WebServlet注解中的使用 @WebServlet(value = "/Servlet02", ? ? ? ? ? ?//initParams是给出的一个数组可以进行一个或多个键值对的放置 name=value ? ? ? ? ? ?initParams = {@WebInitParam(name = "妄念",value = "123456"),@WebInitParam(name = "小明",value = "123456")} ) 转发与重定向转发:由服务器端进行的页面跳转(一次请求) 效果:http://localhost:8080/day11_war_exploded/Servlet03 重定向:由浏览器端进行的页面跳转(多次请求) 效果:http://localhost:8080/day11_war_exploded/login.html 转发语法: // protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//由请求调用方法进行转发 ? ? ? ?request.getRequestDispatcher("login.html").forward(request,response); ? } 重定向语法: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//由响应调用方法 ? ? ? ?response.sendRedirect("login.html"); ? } 转发与重定向的区别:
Servlet中文乱码问题出现原因
Request乱码
Request乱码 - POST请求 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } ? protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //给请求中的参数设置编码格式 request.setCharacterEncoding("UTF-8"); String parameter1 = request.getParameter("parameter1"); String parameter2 = request.getParameter("parameter2"); System.out.println(parameter1); System.out.println(parameter2); }
Request乱码 - GET请求(Tomcat7.X版本) 解决方案1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } ? protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ? String parameter1 = request.getParameter("parameter1"); parameter1 = new String(parameter1.getBytes("ISO-8859-1"),"UTF-8"); String parameter2 = request.getParameter("parameter2"); parameter2 = new String(parameter2.getBytes("ISO-8859-1"),"UTF-8"); System.out.println(parameter1); System.out.println(parameter2); } 解决方案2
<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1" ? ? ? ? ? connectionTimeout="20000" redirectPort="8443" />
protected String URIEncoding = null; public void setURIEncoding(String URIEncoding) { ? ? ? ? this.URIEncoding = URIEncoding; ? ? ? ? setProperty("URIEncoding", URIEncoding); } Request乱码 - GET请求(Tomcat8.X版本)
public class Connector extends LifecycleMBeanBase { ? ? ? ?private Charset uriCharset = StandardCharsets.UTF_8; ? ? ?//查询Tomcat根目录/conf/catalina.properties配置文件中的属性 public static final boolean RECYCLE_FACADES = Boolean.parseBoolean(System.getProperty("org.apache.catalina.connector.RECYCLE_FACADES", "false")); ? ? ? ? ?public Connector() { ? ? ? ?this(null); ? } ? ? ? ?public Connector(String protocol) { ? ? ? ?setProtocol(protocol); ? ? ? ?ProtocolHandler p = null; ? ? ? ?try { ? ? ? ? ? ?Class<?> clazz = Class.forName(protocolHandlerClassName); ? ? ? ? ? ?p = (ProtocolHandler) clazz.getConstructor().newInstance(); ? ? ? } catch (Exception e) { ? ? ? ? ? ?log.error(sm.getString( ? ? ? ? ? ? ? ? ? ?"coyoteConnector.protocolHandlerInstantiationFailed"), e); ? ? ? } finally { ? ? ? ? ? ?this.protocolHandler = p; ? ? ? } ? ? ? ? ?if (Globals.STRICT_SERVLET_COMPLIANCE) { ? ? ? ? ? ?uriCharset = StandardCharsets.ISO_8859_1; ? ? ? } else { ? ? ? ? ? ?uriCharset = StandardCharsets.UTF_8; ? ? ? } ? } } Response乱码protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } ? protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应内容的编码格式 response.setContentType("text/html;charset=UTF-8"); response.getWriter().println("妄念"); } 跳转到中文页面路径乱码protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } ? protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect(URLEncoder.encode("详情页面.html", "UTF-8")); } |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 10:25:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |