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
看后台的输出信息:

不关闭服务器再去访问:

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

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

解决中文乱码问题

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中,

演示结果:

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

后台显示:

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

时间: 2024-10-28 18:01:50

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

Servlet和JSP生命周期概述

Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码: 1     <loadon-startup>1</loadon-sta

Jsp,Servlet向数据库添加数据出现中文乱码问题

问题描述 Jsp,Servlet向数据库添加数据出现中文乱码问题 Myeclipse向数据库添加数据时出现乱码,可是直接在数据库中添加数据并不会乱码,要怎么解决啊? 数据库是Access 解决方案 检查下编码是否一致...

解决中文乱码的几种解决方法(推荐)_JSP编程

首先说明我的特殊情况: 1. 前台jsp中,我使用的是 form post 请求,设置了 enctype="multipart/form-data" ,页面编码格式都是utf-8 2. 后台中,我使用的是commons-fileUpload组件,ServletFileUpload 解析form表单和文件, 3. 设置 request.setCharacterEncoding("UTF-8"); 4. 设置了ServletFileUpload .setHeaderEn

怎么解决中文乱码

问题描述 怎么解决中文乱码 解决方案 解决方案二:LZ说的问题有点笼统,一般情况下就是把你的界面的编码格式设置成UTF-8,所有界面要统一,还有要把你的项目的编码格式,设置的和界面一致,另外就是些过滤器了解决方案三:比如我举一个实例:现在开发JEE的配置环境为Tomcat6.0,MyEclipse,Mysql安装Mysql数据库之前,要将字符集设置为gb2312(为中文简体);在使用MyEclipse新建网页时,头部声明字符集为setCharactorEncoding="gb2312"

servlet-jsp中使用过滤器解决中文乱码问题出现下面的情况

问题描述 jsp中使用过滤器解决中文乱码问题出现下面的情况 有一个html页面,里面有一个form,一个text,一个submit.当点击submit时,就调用一个servlet,并在里面将中的内容输出来.servlet中输入的代码为:out.println("输入的内容为:"+text) 现在遇到的问题是: 如果中输入的是纯中文,则不会乱码.但如果输入的是英文开头或纯英文的话,则"输入的内容为:"会变成乱码,还有text中的中文也会乱码. 解决方案 servlet

 JSP解决中文乱码问题

一.程序说明 1.数据库教程:mysql教程 2.开发环境:tomcat7.0+windows7+myeclips教程e9.0 3.解决问题:解决jsp教程中文乱码问题 二.基本流程 三.运行界面 1.用户注册界面 2.JQuery表单验证 3.提交post信息 4.数据库信息 四.程序的主要代码 1.字符过滤器(CharacterFilter.java) 1 public class CharacterFilter implements Filter { 2 String encoding =

安装vsftpd解决中文乱码的问题

vsftpd-2.1.0 以上的版本已经解决了这个问题.最新版已经无须修改任何设置就可以很好支持各种字符集了.但如果你还在使用较低版本的vsftpd的话,哪么以下方法可以帮助你解决中文乱码的问题. 方法一: 补丁软件下载: http://www.cublohttp://www.aliyun.com/zixun/aggregation/9457.html">g.cn/u/2340/showart_428936.html 过程: 下载vsftpd-2.0.3.tar.gz,http://dow

CentOS 安装搜狗输入法以及解决中文乱码

一.安装搜狗输入法 首先要确保系统中已经安装了中文输入法. 如果你在安装系统时选择了中文,则中文输入法默认就会安装:如果你安装时选择了英文,则必须在安装时选择安装中文输入法,否则不会安装,即使你忘了选择,还是可以在装好系统之后安装.安装方法也非常简单,只需要联网后执行如下命令即可安装 #sudo yum install "@Chinese Support" 二.解决中文乱码 查看系统支持字符集: #locale -a 安装英文版默认的字符集配置为: # cat /etc/sysconf

通俗易懂地解决中文乱码问题(1) --- 跨平台乱码

原文:[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 本来是只打算写一篇关于中文乱码的blog的,但是发现要讲的东西跨度有点大,不好写到同一篇里面,所以分开了. 另一篇是  <[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0...> . 这一篇重点在编码的理论,另一篇重点在解决问题及思路.   一.问题的开始 中文乱码问题经常出现在实际工程中,尤其容易发生在经验不足的团队对问题预