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

时间:2022-07-05 22:58:24

本节讲解决中文乱码问题的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

看后台的输出信息:

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

不关闭服务器再去访问:

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

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

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

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

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

解决中文乱码问题

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

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

演示结果:

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

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

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

后台显示:

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

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

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

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

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

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

  1. java Web servlet简介及其生命周期

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...

  2. Java Web学习总结(9)——servlet和Jsp生命周期解读

    一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的 ...

  3. 面试之jsp、Servlet相关知识——生命周期, 区别等

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  4. Java Servlet&lpar;二&rpar;:servlet配置及生命周期相关&lpar;jdk7&plus;tomcat7&plus;eclipse&rpar;

    该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...

  5. Servlet和JSP生命周期概述

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt374 Servlet生命周期分为三个阶段: 1,初始化阶段  调用init( ...

  6. servlet简介及生命周期

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  7. Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码

    先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.h ...

  8. servlet反射、生命周期、接口

    什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l  ...

  9. Servlet配置及生命周期

    1.设置Ecilipse快捷  file new 2.创建Servlet程序 1). 创建一个 Servlet 接口的实现类.              public class HelloServl ...

随机推荐

  1. Android操作HTTP实现与服务器通信(转)

    Android操作HTTP实现与服务器通信   本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方 ...

  2. poj1001&lowbar;Exponentiation

    这题真是超级大模拟.好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助C++里面的string来写的,这把只用了C,浇一次就ac了,挺开心的,不过写了2个小时啊.注意零的处理.大 ...

  3. C&plus;&plus; primer(八)--内联函数 引用变量 引用传递函数参数 函数重载&sol;模板&sol;模板具体化

    一.内联函数     常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...

  4. hdu3410-Passing the Message&lpar;RMQ&comma;感觉我写的有点多此一举。。。其实可以用单调栈&rpar;

    What a sunny day! Let’s go picnic and have barbecue! Today, all kids in “Sun Flower” kindergarten ar ...

  5. tornado的非异步阻塞模式

    [优化tornado阻塞任务的三个选择] 1.优化阻塞的任务,使其执行时间更快.经常由于是一个DB的慢查询,或者复杂的上层模板导致的,这个时候首要的是加速这些任务,而不是优化复杂的webserver. ...

  6. C语言-最后一次作业

    1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 我当初选择计算机专业是因为我是真的很向往计算机这方 ...

  7. C&num;获取路径

    System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -获取模块的完整路径. System.Environment.Cu ...

  8. Shell脚本编程实战一:创建按天备份的脚本工具

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8241256.html 一:准备工作:创建归档目录 与  归档配置文件 归档目录:创建一个仓库目录,专门用于存放 ...

  9. hdoj1003 DP

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  10. &lbrack;GO&rsqb;redis的连接

    package main import ( "github.com/garyburd/redigo/redis" "fmt" ) var pool *redis ...