servlet的功能
1)向浏览器响应内容
- (1)
response.setContentType("text/html;charset=utf-8");
响应到浏览器的内容支持标记,支持CSS属性,同时也能够设置中文乱码问题。 - (2)
PrintWriter pw=response.getWriter();
pw.println(“你好”);
pw.write(“<div>你好</div>”);
2)接收浏览器发送过来的请求
- (1)浏览器发送到服务器端的请求中获取参数值的方法(两种)如下:
-
方法一:
请求中参数值的传递格式:key1=value1&key2=value2&key3=value3…
http://localhost:8080/servlettest/registe?username=zs&pwd=aaa
key值和value值都不一样使用的方法:
request.getParameter(key) ---> value(String)
-
方法二:
请求中参数值的传递格式:key=value1&key=value2&key=value3&key=value4…
key值一样,value值不一样的使用方法:
request.getParameterValues(key); ---> value(String[])
-
- (2)浏览器发送到服务器端的请求中,参数值中文乱码问题
- ① get请求方式,中文乱码问题
String s11=new String(s1.getBytes("iso-8859-1"),"utf-8");
- ② post请求方式,中文乱码问题
request.setCharacterEncoding("utf-8");
- ① get请求方式,中文乱码问题
servlet的功能关系图
浏览器端向服务器端发送请求的方式
(1)get请求方式
浏览器发送get请求的情况:
- ①在浏览器地址栏输入一个地址回车的请求
- ②点击超链接
<a href=”http://www.baidu.com”>你好</a>
<a href=”url-pattern的地址”>hello</a>
当点击hello,发送的请求是url-pattern对应的servlet。
<a href=”url-pattern地址?key1=value1&key2=value2...”>hello</a>
- ③表单默认提交,或者设置属性
method=”get”
get请求方式,会将数据在浏览器地址栏上一起发送,提交的数据只能是少量的数据,因为数据会显示在浏览器地址栏上,数据相对来说不安全,但是效率高一些。
(2)post请求方式
浏览器发送post请求的情况:
- ①表单提交,需要设置表单属性
method=”post”
post请求方式,会将数据封装在一个包中,随着请求一起发送,浏览器地址栏是看不到这些数据的,这种方式可提交大量数据,相对比较安全,但是效率相对低一些。
代码部分:
HelloServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//该类表示在服务器端的一个servlet类
public class HelloServlet extends HttpServlet {
//调出service方法
//service Alt + / 快捷键自动提示
// 请求 响应
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//request参数:用于接受浏览器端发送过来的请求
//response参数:用于向浏览器端响应
//向控制台Console输出HelloServlet
System.out.println("HelloServlet");
//向页面(浏览器端)响应内容HelloServlet
PrintWriter o = response.getWriter();
o.println("HelloServlet1");
o.println("HelloWorld");
//在servlet中通过java代码创建Date日期
//Date d = new Date();
//将创建的日期d输出在页面上
//o.println(d);
//等价写法
o.println(new Date());
}
}
RegisteServlet.java
package com.bzxy.test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//表示服务器端的一个servlet,该servlet主要功能是接收浏览器端registe.html页面
//发送过来的请求和请求中包含的参数
//浏览器端(页面) <==> 服务器端(servlet) <==> 服务器端(数据库)
public class RegisteServlet extends HttpServlet{
//调用service方法
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//接收参数之前设置中文编码 -- 支持post请求方式
/*对应registe.html的<form action="registe" method="post">*/
request.setCharacterEncoding("utf-8");
//System.out.println("测试...");
//未添加以下代码时,访问网址http://localhost:8080/servlettest/registe.html
//点击提交之后,页面空白,网址变为:http://localhost:8080/servlettest/registe?username=...&pwd=...&smt=...
//##用户名用英文输入,否则乱码,需进一步处理
//request请求;response响应
//http://localhost:8080/servlettest/registe?username=zs&pwd=aaa
//通过request接收请求参数的值
String s1 = request.getParameter("username");
//如果是get请求方式提交的值是中文,s1是乱码,也就是??????
//浏览器如果采用的是get方法提交的数据,编码默认采用的是"iso-8859-1"编码
//通过String字符串类进行编码的转换,由"iso-8859-1"编码转换为"urf-8"编码
//你好 -用-> iso-8859-1 -解码-> 011100111111... -用-> utf-8 -重新生成-> 你好
//getBytes 获得
String s11 = new String(s1.getBytes("iso-8859-1"), "utf-8");
String s2 = request.getParameter("pwd");
//http://localhost:8080/servlettest/registe
//?username=zs&pwd=aa&
///love=readbook&love=write&love=playbook&smt=%E6%8F%90%E4%BA%A4
//String[]表示字符串类型的数组,该数组中应该存储4个value值
String[] s3 = request.getParameterValues("love");
/*对应registe.html的<a href="registe?username=ls&pwd=123&love=ds&love=xz&id=1001">点我可访问RgisteServlet</a>*/
//接收超链接请求中参数值 id = 1001
//String s4 = request.getParameter("id");
//用户名输入:你好
System.out.println("原始:" + s1); //原始:??????
System.out.println("转码后:" + s11); //转码后:你好
//在获取PrintWriter之前写上中文编码设置
response.setContentType("text/html;charset=utf-8");
//设置之后,println不起效果,只能用标记换行 两种方式:可自己加换行,也可自己直接输出换行
//通过response向页面返回结果
PrintWriter pw = response.getWriter();
pw.println("<div style='color:red;'>以下为通过response向页面的返回结果:</div>");
pw.println("<br/>");
//pw.println(s1 + "<br/>");
pw.println(s11 + "<br/>");
pw.println(s2 + "<br/>");
//s3 --> readbook write playball online
//下标 0 1 2 3
//若多选项选择包含readbook,则显示readbook
pw.println(s3[0] + "<br/>"); //根据下标对应的内容输出
//若四个多选项都选择,则显示[readbook, write, playbook, online]
pw.println(Arrays.toString(s3)); //借助于toString方法,可直接将数组中所有的内容输出
//pw.println(s4);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 对com.bzxy.test包下的HelloServlet进行配置 -->
<servlet>
<servlet-name>hello</servlet-name> <!-- 对要配置的Servlet起别名 -->
<servlet-class>com.bzxy.test.HelloServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
<url-pattern>/ho</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
</servlet-mapping>
<!-- 对com.bzxy.test包下的RegisteServlet进行配置 -->
<servlet>
<servlet-name>RegisteServlet</servlet-name> <!-- 对要配置的Servlet起别名 -->
<servlet-class>com.bzxy.test.RegisteServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
</servlet>
<servlet-mapping>
<servlet-name>RegisteServlet</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
<url-pattern>/registe</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
</servlet-mapping>
</web-app>
registe.html
<!-- 版本信息 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- action="" 表示点击提交按钮此表单会向哪个servlet发送请求,双引号中写哪一个url-pattern地址,
此表单就会向哪一个servlet发送请求。【访问页面,点击提交,成功访问到RegisteServlet】-->
<!-- 默认浏览器地址栏中会显示数据,method="get";而不显示则修改为,method="post" -->
<form action="registe" method="get">
用户名:<input type="text" name="username"/>
<br/>
密码:<input type="password" name="pwd"/>
<br/>
兴趣爱好:读书<input type="checkbox" name="love" value="readbook"/>
写字<input type="checkbox" name="love" value="write"/>
打球<input type="checkbox" name="love" value="playball"/>
上网<input type="checkbox" name="love" value="online"/>
<br/>
<input type="submit" name="smt" value="提交"/>
</form>
<!-- 测试超链接的请求方式 -->
<a href="http://www.baidu.com">你好</a>
<br/>
<!-- 没有传递参数,username接收为空,异常为NullPointerException -->
<!-- <a href="registe">hello</a> -->
<a href="ho">hello</a>
<br/>
<a href="registe?username=ls&pwd=123&love=ds&love=xz&id=1001">点我可访问RegisteServlet</a>
</body>
</html>
效果图
若在浏览器中输入http://localhost:8080/servlettest/registe.html
,则如图下显示:
点击超链接 你好
,则如图下显示:
点击超链接 hello
,则如下图显示:
点击超链接 点我可访问RgisteServlet
,则如下图显示:
点击表单中信息,如:输入用户名,密码及选择兴趣爱好,点击 提交
,则如下图显示:
数据库 --> MySQL数据库 – 免安装版本的
打开命令行窗口进行操作:
window+R–>cmd或者左下角搜索->cmd
效果图:
命令行窗口中简单的操作命令:
1)切换某个盘 d:回车 e:回车 f:回车
2)dir命令:等价于linux系统中的ls命令,查看当前路径下的所有内容。
3)cd命令:进入目录,或者返回上一级目录
cd … 返回上一级目录
cd xx 进入xx目录
免安装版本的MySQL数据库的启动方式
(1)启动MySQL服务
通过命令行窗口的方式,进入MySQL文件夹中的bin目录中,
输入命令:mysqld --console
,该命令启动MySQL服务,服务启动后
该命令行窗口不要关闭。
效果图:
(2)登陆MySQL数据库
重新打开一个新的命令行窗口,同样进入MySQL文件夹中的bin目录
输入命令:mysql -h localhost -u root -p
,没有密码,直接回车登陆即可。
mysql -h主机地址 localhost本机 -u用户名 root默认的最高权限用户名 -p用户密码
效果图:
登陆MySQL成功:
显示 mysql>
步骤总结:
MySQL数据库的简单操作
(1)先操作库
- ① 查看所有的库
show databases;
例:
- ② 删除一个库
drop database 库名;
注意:(information_schema、mysql和test不要删除)
例:
检查:
- ③ 创建一个库
create database 库名;
例:
检查:
- ④ 使用一个库
use 库名;
例:
- ⑤ 查看使用的是哪个库
select database();
- ⑥ 查看当前使用的库下所有的表
show tables;
注意:对表及表中数据操作前必须先使用某一个库
(2)在库下操作表以及表中的数据
- ① 创建一个表
create table 表名;
例:
可查看库下表:
代码部分如下:
create table emp(
id int primary key,
name varchar(10),
pwd char(10),
salary double,
birthday date
);
- ② 查看表结构
desc 表名;
例:
- ③ 关于表中数据的增删改查操作
插入数据:
例:
另外一种插入日期的形式:
查询数据:
查看表中所有信息:
查看表中id,name中信息:
修改数据:
查看是否修改:
删除数据:
查看是否修改:
代码部分:
insert into emp values(1, ’zs’, ‘abc123’, 30002.3, ‘2020-04-03’);
insert into emp values(2,'ls','123456',6430.32,20200404);
select * from emp;
update emp set salary=643.32 where id=2;
delete from emp where id=1;