栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet相关简介及使用教程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet相关简介及使用教程

第九章 servlet 1. Eclipse相关配置 1. 设置为Java视图

点击上放的 Window --> show view --> other -->选中 Java下边的Package Explorer 点击Open

2. 配置Tomcat

同样在 show view中选中 other,搜索Server点击Open

在Server里边会有一个蓝色的连接,双击连接,选中 tomcat8.5

点击next选中自己的tomcat的目录和 JDK 的路径,点击finish

重新在server中双击tomcat 在 Server Locations选中第二个Use

接着把Deploy Path改成 webapps

配置工程,右键tomcat选中add and remove,吧想要的工程添加进去进行了

更改html、CSS、JS等可以不用关闭Tomcat。更改Servlet一定要关闭tomcat

2. 常见HTTP错误 1.404后边存在一个路径
    表单的action或者链接的href在提交之后没有被web.xml中的url-pattern拦截到从浏览器地址书写的路径错误,路径格式为http://localhost:8080/工程名/页面文件放置的位置出现问题,在eclipse下的页面资源应该放置在WebContent下没有成功部署
2. 404后边没有路径

tomcat开始失败,原因

    文件缺失,在安装tomcat之后对tomcat进行增删web.xml解析异常,其中节点值必须以 / 开头 节点值必须对应已经开启了一个tomcat,因为只有一个8080 端口,所以默认情况下只能开一个tomcat
3.405

Post提交覆盖doPost,GET提交覆盖doGet,或者method属性拼写错误,注意表单和链接提交默认都是GET,链接无法改动,请求转发跳转前后一致,重定向跳转之后一定是doGet

4.500

出现异常,例如空指针异常等,或者在web.xml中的servlet-class节点中无法找到Servlet实例地址。如果是异常则找第一个自己写的类。

5.常用接口 3.创建Servlet的两种方式 1.继承HttpServlet,并覆盖相应方法 1. 修改web.xml配置文件

首先要打开WEB-INF 中的 web.xml文件

此文件是整个文件中最为重要的一个文件,当打开tomcat时,tomcat会对工作空间中所有的 web.xml进行解析,如果出现解析错误,则tomcat开启失败,只要有一个工程解析错误,就无法工作


  	
  	suibianxie
  	
  	com.etoak.servlet.UserLogin
  
  
  	
  	suibianxie
  	
  	/userlog
  
2.书写实现类
package com.etoak.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.etoak.dao.UserDaoIf;
import com.etoak.dao.UserDaoImpl;
import com.etoak.po.User;


public class UserLogin extends HttpServlet{
	
	
	@Override
	protected void doPost(HttpServletRequest request
	, HttpServletResponse response) 
	throws ServletException, IOException {
		
		//设置响应的编码
		
		response.setContentType("text/html;charset=utf-8");
		//设置请求的编码
		request.setCharacterEncoding("utf-8");
		//拿取字符输出流,一般不使用字节流
		PrintWriter out = response.getWriter();
		
		//引入dao层
		UserDaoIf dao = new UserDaoImpl();
		
		//接受页面表单提交过来的用户名和密码
		
		String name = request.getParameter("myname");
		String pass = request.getParameter("mypass");
		System.out.println(name+"t"+pass);
		
		
		//使用JDBC技术调用dao层
		User u = dao.queryUser(name, pass);
		
		if(u!=null) {
			//普通用户登录
			if(u.getLevel().equals("0")) {
				out.println("欢迎您回来"+u.getName());
				out.print(u.getGender().equals("0")?"女士":"先生");
				out.println("
"); out.println("以下为普通用户页面结构样式..."); out.close(); return; } //管理员登录 if(u.getLevel().equals("1")) { out.println("欢迎您回来管理员"+u.getName()+"
"); out.println("查看所有普通用户资料"); out.close(); return; } //超级管理员登录 if(u.getLevel().equals("2")) { out.println("超级管理员"+u.getName()+"您好
"); out.println("查看所有管理员资料"); out.close(); return; } return; } //动态输出页面 // request.getContextPath():拿取/工程名 // 此处组合成了一个绝对路径 /工程名/XXXX.html out.println("数据库中查无此人,请您先+request.getContextPath()+"/reg.html'>注册
"); out.close(); } }
2.创建Servlet

在servlet包下右键新建,选择other搜索servlet,点击open,创建书写Class Name,点击Next,在下方的拦截地址中改为对应的拦截地址,next,专责需要覆盖的方法

4.Servlet注意点

    给Servlet添加中文支持

    Servlet默认不支持中文,所以我们需要添加中文支持

    MIME写法含义
    text/html根据html语法解析
    text/css根据css语法解析
    text/javascript根据js语法解析
    text/plain被浏览识别为字符串
    application/json根据json语法解析
    image/jpeg被浏览器识别为一张jpeg格式的图片
    //设置响应的编码 MIME存在数十种写法,上边写了几种常用的
    //response.setContentType("MIME;chaeset=编码");
    //此处书写错误,浏览器会提示下载文件注意
    response.setContentType("text/html;charset=utf-8");
    //设置请求编码
    request.setCharacterEncoding("utf-8");
    

    方法含义

    方法含义
    request.getParameter()从前端页面根据name获取value
    request.getContextPath()拿取 /工程名
    request,getParameterValues()拿取复选框的值,返回String[]

    重定向之后不能再次提交请求问题

    在下边这种情况下,重定向之后一定要加return

    if(u != null){
        response.sendRedirect(request.getContextPath() +  "/showadmin");
        //return;
    }
    
     response.sendRedirect(request.getContextPath() +  "/showlog");
    

    如果在重定向结束之后没有写return语句,会有500异常,Cannoot call sendRedirect() after the response has been committed

5. Servlet两种跳转方式 1.请求转发

浏览器发送请求到Servlet1,Servlet1执行请求转发之后,再讲请求转发到最终目的地Servlet2,由于不再是浏览器亲自发送到到最终目的地,所以浏览器的地址栏显示信息只是跳转前的路径,因为是同义词请求,request范围有效,跳转前是doXXX之后依旧是doXXX

其中一种
request.getRequestDispatcher(“showadmin”).forward(request, response);

第一个参数为要跳转的地址

2.重定向

浏览器发送请求到Servlet1,Servlet1返回相应到浏览器,浏览器重新发送请求到Servlet2,由于不再是一次请求,所以request范围失效。由于是浏览器轻自发出请求,所以浏览器的地址栏会变为最终跳转的路径。跳转之前是doXX之后肯定为doGet
路径书写格式可以固定为绝对路径写法
response.sendRedirect("/工程名/拦截路径");
response.sendRedirect("/工程名/xxx.html");
response.sendRedirect("/工程名/xxx.jsp");

response.sendRedirect(request.getContextPath() + “/showadmin”)

6. Servlet生命周期
package com.etoak.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/testlife")
public class TestLife extends HttpServlet {
	
	private String code;
	
	
	
	
	
	private static final long serialVersionUID = 1L;
       
    
    public TestLife() {
        System.out.println("我是Servlet的构造方法~~~~~~");
    }

	public void init() throws ServletException {
		System.out.println("我是Servlet的初始化方法init~~~~~~");
		
		
		//ServletConfig config = this.getServletConfig();
		
		//System.out.println("类名是~~~~》"+config.getServletName());
		//拿取ServletContext
		ServletContext application = this.getServletContext();
		System.out.println("工程名是~~~~~》"+application.getContextPath());
		System.out.println("拿取服务器中web服务器软件中被部署工程的绝对路径~~~~~》"+application.getRealPath("/"));
		//拿取web.xml中封装的参数
		System.out.println("封装的全局参数是~~~~~》"+application.getInitParameter("东京奥运会"));
		
		//读取配置好的编码类型
		code = application.getInitParameter("mycode");
	}

	public void destroy() {
		System.out.println("我是Servlet的销毁方法destroy~~~~~~");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset="+code);
		request.setCharacterEncoding(code);
		PrintWriter out = response.getWriter();
		//接受链接提交过来的值
		String value = request.getParameter("etoak");
		out.print("我是动态输出的页面,链接传递过来的值是====》"+value);
		out.close();
		System.out.println("我是负责业务逻辑的doGet()~~~~~~");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号