cgb2109-day16

Posted cgblpx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cgb2109-day16相关的知识,希望对你有一定的参考价值。

一,注解方式开发Servlet程序

–1,创建新的web工程,创建Servlet

package cn.tedu.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//1,这是新版本的Servlet提供的注解开发方式,更好更简单(否则自己写配置文件)
//参数是,规定了浏览器的地址栏到底怎么写才能访问到我这个Servlet类
//2,ServletDemo1是子类,可以使用父类的所有资源(除了私有的,构造方法)
//3,自定义Servlet的规则:
//方式1:extends HttpServlet--推荐!!!
//方式2:extends GenericServlet--了解
//方式3:implements Servlet--了解
@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet 
    //4,继承了父类,但是  想改父类原有的功能时 就重写!!
    //5,不论调用doPost()或者doGet(),都是由Servlet来调用的
//6,当用户用post方式提交请求时(form表单提交),Servlet来调用doPost()
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        System.out.println("您访问了doPost()");
    
//7,当用户用get方式提交请求时,Servlet来调用doGet()
    //(在地址栏?拼接数据 + form没改method的值)
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        System.out.println("您访问了doGet()");
    


–2,测试Servlet

启动服务器,访问浏览器
http://localhost:8080/cgb2109javaweb03_war_exploded/ServletDemo1
本机 Tomcat默认的端口号 项目名称 项目中的资源名称

二,配置方式开发Servlet程序

–1,创建Servlet类

package cn.tedu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//使用配置方式开发Servlet程序
public class ServletDemo2 extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        System.out.println("doPost()成功的被Servlet调用!");
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        System.out.println("doGet()成功的被Servlet调用!");
    


–2,配置Servlet类

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置Servlet类的访问信息-->
    <servlet>
        <!--给Servlet设置一个名字(一般是和类名相同)
            细则:名字可以自定义,但是必须唯一,
            不能和别的<servlet>的<servlet-name>相同
        -->
        <servlet-name>hello</servlet-name>
        <!--指定Servlet类的全路径(包名.类名)-->
        <servlet-class>cn.tedu.servlet.ServletDemo2</servlet-class>
    </servlet>
    <!--指定浏览器的访问规则-->
    <servlet-mapping>
        <!--即将根据指定的名字,去找到一个要被访问的Servlet类的全路径-->
        <servlet-name>hello</servlet-name>
        <!--指定了浏览器的访问方式,
        细则:值可以自定义,但是浏览器必须是一样的写法才能访问Servlet
        否则404:找不到你要访问的资源
        -->
         <!--url-pattern的值不能和其他的url-pattern的值相同-->
        <url-pattern>/a/b/c</url-pattern>
    </servlet-mapping>

</web-app>

–3,测试

http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo2

–4,总结

三,前后端整合

–1,创建前端html网页

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>前后端 安排起来</title>
	</head>
	<body>
		<!-- 点击超链接跳转到Servlet -->
		<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo3">点我,访问Servlet</a>
		
	</body>
</html>

–2,创建后端Servlet程序

package cn.tedu.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ServletDemo3 extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        System.out.println("doPost()");
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        System.out.println("doGet()");
    


–3,配置Servlet类

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置Servlet类的访问信息-->
    <servlet>
        <!--给Servlet设置一个名字(一般是和类名相同)
            细则:名字可以自定义,但是必须唯一,
            不能和别的<servlet>的<servlet-name>相同
        -->
        <servlet-name>hello</servlet-name>
        <!--指定Servlet类的全路径(包名.类名)-->
        <servlet-class>cn.tedu.servlet.ServletDemo2</servlet-class>
    </servlet>
    <!--指定浏览器的访问规则-->
    <servlet-mapping>
        <!--即将根据指定的名字,去找到一个要被访问的Servlet类的全路径-->
        <servlet-name>hello</servlet-name>
        <!--指定了浏览器的访问方式,
        细则:值可以自定义,但是浏览器必须是一样的写法才能访问Servlet
        否则404:找不到你要访问的资源
        -->
        <url-pattern>/a/b/c</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>hello2</servlet-name>
        <servlet-class>cn.tedu.servlet.ServletDemo3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello2</servlet-name>
        <!--url-pattern的值不能和其他的url-pattern的值相同-->
        <url-pattern>/ServletDemo3</url-pattern>
    </servlet-mapping>
    
</web-app>

–4,测试

四,Servlet的继承结构

五,Servlet的生命周期

–1,概述

分为三大阶段
初始化 – 由Servlet主动调用init()
提供服务 – 由Servlet主动调用service()/doGet()/doPost()
销毁 – 由Servlet主动调用destroy()

–2,测试

创建Servlet程序

package cn.tedu.lifecycle;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//1,Servlet程序的注解开发方式,代替了web.xml文件中的8行配置代码
@WebServlet("/ServletDemo4")//注解的参数是指浏览器的访问方式
public class ServletDemo4 extends HttpServlet 
    //2,Servlet的生命周期中会被调用的方法有:
    //init() service()/doGet/doPost destroy()
    //3,因为GenericServlet提供的以上方法中都是空实现,
    // 重写这些方法并添加方法体来感受初始化的不同阶段
    //4,重写的要求:有足够的权限 + 方法声明必须和父类一样
    @Override
    //当第一次访问Servlet程序时,Servlet自己调用init(),只会调用一次
    public void init() throws ServletException 
        System.out.println("init()被调用了,Servlet已被初始化!");
    
    @Override
    //每次访问Servlet程序时,Servlet自己调用service(),会调用多次
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        System.out.println("service()开始为您服务啦!");
    
    @Override
    //正常的关闭服务器时,Servlet自己调用destroy(),只会调用一次
    public void destroy() 
        System.out.println("destroy()被调用了,Servlet即将被销毁!");
    


创建前端网页

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>前后端 安排起来</title>
	</head>
	<body>
		<!-- 点击超链接跳转到Servlet -->
		<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo3">点我,访问ServletDemo3</a>
		<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo4">点我,访问ServletDemo4</a>
		
	</body>
</html>

测试

六,Request

–1,概述

是指 从前端浏览器 到 后端的Servlet程序 的访问过程,叫请求的过程
可以使用Servlet提供的Request对象,来解析请求中的请求参数

–2,常用方法

getParamter()--按照参数名获取参数值,但是只得到一个值
getParamterValues()--按照参数名获取参数值,但是得到多个值,存入数组
setCharacterEncoding()--如果请求参数中有中文,设置字符集为utf-8
setAttribute()--设置属性
getAttribute()--获取属性

–3,测试

创建HTML网页

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>前端提交数据,后端解析数据</title>
	</head>
	<body>
		<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo5?name=jerry&pwd=123">点我,提交get数据1</a>
		<a href="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo5?hobby=篮球&hobby=足球">点我,提交get数据2</a>
	</body>
</html>


创建Servlet程序,解析请求参数

package cn.tedu.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

@WebServlet("/ServletDemo5")
public class ServletDemo5 extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        doGet(request, response);
    
    //当用户以get方式提交数据时,Servlet会自动调用doGet()
    //get方式提交的数据,可以一个一个的解析getParameter()
    //也可以解析多个值getParameterValues()
    //如果使用的是Tomcat7.0以上的版本,get方式提交中文数据不会乱码
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException 
        //1,request解析请求参数 name=jerry&pwd=123
        //1.1,获取一个值
        String s = request.getParameter("name");
        System.out.println(s);//获取name参数的值
        String pwd = request.getParameter("pwd");
        System.out.println(pwd);//获取pwd参数的值
        //1.2,获取到多个值
        String[] hobbies = request.getParameterValues("hobby");
        System.out.println( Arrays.toString(hobbies) );
        
    



七,表单提交数据

–1,创建HTML网页文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<form action="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo6">
			<h3>测试 get提交数据</h3>
			姓名:<input type="text" placeholder="请输入姓名..." name="user"/> <br />
			密码:<input type="password" placeholder="请输入密码..." name="pwd"/> <br />
			<input type="submit" value="提交"/>
		</form>
		
		<form method="post" 
		action="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo6">
			<h3>测试 post提交数据</h3>
			姓名:<input type="text" placeholder="请输入姓名..." name="user"/> <br />
			密码:<input type="password" placeholder="请输入密码..." name="pwd"/> <br />
			<input type="submit" value="提交"/>
		</form>
	</body>
</html>

–2,创建Servlet程序

package cn.tedu.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet

以上是关于cgb2109-day16的主要内容,如果未能解决你的问题,请参考以下文章

cgb2109-day04

cgb2109-day06

cgb2109-day17

cgb2109-day03

cgb2109-day11

cgb2109-day02