Web---演示servlet技术(servlet生命周期),解决中文乱码问题

简介: Web---演示servlet技术(servlet生命周期),解决中文乱码问题

本节讲解决中文乱码问题的4种方法。

还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼♪(^∇^*)~过段时间才会学。


servlet生命周期演示:


index.jsp:


<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>
            演示servlet技术
        </title>
    </head>
    <body>
        <h2>演示servlet技术</h2>
        <a href="/myServletDemo/first">访问FirstServlet</a>
        <hr/>
    </body>
</html>


FirstServlet.java:

package cn.hncu.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FirstServlet implements Servlet{
    //只有第一次访问才会被执行一次,最先执行一次!
    public FirstServlet() {
        System.out.println("1 构造方法被执行..."+this);
    }
    //关闭Tomcat服务器时会执行一次。如果是通过myeclipse关闭的,是不会执行的,因为是直接关闭了java虚拟机。
    //最后执行一次
    @Override
    public void destroy() {
        System.out.println("4 destroy..."+this);
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    //第一次被访问才执行,在构造方法之后执行一次!
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("2 init..."+this);
        String name = config.getInitParameter("name");
        System.out.println("name:"+name);
    }
    //每次访问都执行,(第一次)init()后执行
    @Override
    public void service(ServletRequest req, ServletResponse resp)
            throws ServletException, IOException {
        System.out.println("333 servlet"+this);
    }
}


web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name> 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>firstServlet</servlet-name>
    <servlet-class>cn.hncu.servlet.FirstServlet</servlet-class>
    <init-param>
        <param-name>name</param-name>
        <param-value>Jack</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>firstServlet</servlet-name>
    <url-pattern>/first</url-pattern>
  </servlet-mapping>
</web-app>


配置需要初始化的参数:


<init-param>
    <param-name>name</param-name>
    <param-value>Jack</param-value>
</init-param>


在servlet中:

用config.getInitParameter(“name”);去得到name参数的值。


演示结果:


我们点击访问:访问FirstServlet

看后台的输出信息:

image.png



不关闭服务器再去访问:

image.png



用myeclipse关闭服务器-因为是直接关闭了java虚拟机,所以不会再运行destroy()方法。也就没有再输出。


image.png


用Tomcat的shutdown.bat关闭服务器:

image.png



解决中文乱码问题


index.jsp中增加:

<h2>以下演示用户登录</h2>
        <!-- 要向服务器传中文,前提是用post方式,get方式是肯定不行的 -->
        <form action="/myServlet/login" method="post">
            姓名:<input type="text" name="name"><br/>
            密码:<input type="password" name="pwd"><br/>
            <input type="submit" value="登录">        
        </form>

web.xml增加的代码:


<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>cn.hncu.servlet.LoginServlet</servlet-class>     
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>   
  </servlet-mapping>


LoginServlet.java:

package cn.hncu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class LoginServlet implements Servlet{
    @Override
    public void destroy() {
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    private String charset = null;
    @Override
    public void init(ServletConfig config) throws ServletException {
        //法四:
        charset = config.getInitParameter("character");
    }
    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        //解决中文乱码问题
        //前提:前台页面必须以post方式提交中文---因为post会设置http协议头"Content-Type = application/x-www-form-urlencoded",
        //这样Tomcat才知道这是编码的字符数据
        //法一:在Tomcat的server.xml中的<Connect>中添加一个属性:URLEncoding="utf-8"
        //!!!法一是不可取的,因为Tomcat是公共平台,这个项目只是其中的一个项目,
        //不能把平台看成私有的即最好不要去修改,否则其他项目可能会出现问题
        //法二:把Tomcat解错的码还原回来
        //这个方法还行,但如果前台传输的很多参数都是中文,那么我们要对每个参数都要进行这样还原,显然比较麻烦。
        //还有,如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样
        //String name = req.getParameter("name");
        //byte bs[] = name.getBytes("iso8859-1");
        //name = new String(bs,"utf-8");
        //System.out.println(name);
        //法三:这种解决方式是比较好的,但有一个缺点:如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样
        //req.setCharacterEncoding("utf-8");
        //String name = req.getParameter("name");
        //法四:其实是在web.xml中把编码设置成参数,然后在这里读取出来,利用“法2”进行设置。以后如果要更改编码,只要更改web.xml中的相应参数设置就OK了
        req.setCharacterEncoding(charset);
        String name = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        //用name和pwd到后台去访问数据库,以验证该用户信息是否正确(登录是否成功)
        //本例不是讲解这个,所以省略。
        res.setContentType("text/html;charset=utf-8");//告诉浏览器,我下面发的内容是什么格式的东西,什么编码的
        String html = "<html><body><font color='red'>name:</font>"+name+
                "<br/><font color='red'>pwd:</font>"+pwd+
                "</body></html>";
        PrintWriter out = res.getWriter();
        out.write(html);
        //*******另外一个小知识点:
        //Tomcat项目运行时,加载jar包或类文件的顺序:TOMCAT_HOME\lib  --> webapps\项目名\WEB-INF\lib  --> webapps\项目名\WEB-INF\classes目录下面的类
        //后加载的会覆盖前面的---即后加载有效-和java相反(父类加载机制)
    }
}

有2个小知识点:


1:

Tomcat项目运行时,加载jar包或类文件的顺序:TOMCAT_HOME\lib –> webapps\项目名\WEB-INF\lib –> webapps\项目名\WEB-INF\classes目录下面的类

后加载的会覆盖前面的—即后加载有效-和java相反(父类加载机制)


2:


<!-- 下面这句是用来在服务器启动的时候就new好servlet,也就是说,不用在等第一个客户访问的时候再new了。增加了访问速度。但同时增加了服务器的负荷 -->
    <!--15 这个数字是自己随便给的,如果有多个servlet 数字小的先new,也就是那个数字是决定newservlet的相对顺序的 -->
     <!-- <load-on-startup>15</load-on-startup> -->

加这个的位置是web.xml中,


image.png

演示结果:


一开始未写解决中文乱码时的演示结果:


image.png



后台显示:


image.png


用中文乱码解决时(不把每一种方法的结果都演示出来了)


image.png

image.png

image.png





目录
相关文章
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
46 6
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
60 3
|
2月前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
81 1
|
2月前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
113 2
|
2月前
|
缓存 安全 前端开发
构建高效Web应用的五大关键技术
【10月更文挑战第42天】在数字化浪潮中,Web应用已成为企业与用户互动的重要桥梁。本文将深入探讨提升Web应用性能和用户体验的五项核心技术,包括前端优化、后端架构设计、数据库管理、安全性增强以及API开发的最佳实践。通过这些技术的应用,开发者可以构建出更快、更稳定且更安全的Web应用,满足现代网络环境的需求。
|
2月前
|
人工智能 安全 物联网
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
|
3月前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
|
3月前
|
存储 安全 数据库
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
61 2
|
3月前
|
机器学习/深度学习 移动开发 JavaScript
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
685 0
|
2月前
|
监控 前端开发 JavaScript
前端技术探索:构建高效、可维护的Web应用
【10月更文挑战第23天】前端技术探索:构建高效、可维护的Web应用
58 0