| |
|
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/15 14:21:50- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |