1 使用Servlet获取数据

使用Servlet获取前端的数据,在后端从控制台中打印出前端的数据,前端页面如下图

前端页面程序:需要注意的是form的提交,以及input的不同类型对应的显示不同

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="login" method="post">
<!--Servlet根据name的名字获取相应的值-->
账号:<input type="text" name="name"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>

后端程序:后端需要创建相应的Servlet类

package cn.uestc;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; /**
* 使用Servlet来获取请求的参数
*/ //@WebServlet(name = "LoginServlet", urlPatterns="/login")
//使用注解的方式来配置Servlet,name=类名,urlPatterns=前段访问的地址 public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); //为了解决输出中文乱码问题,java内部要设置为utf-8
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println("name: " + name);
System.out.println("password: " + password);
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}

在上面代码中有一个注解被我注释了,这是Servlet的注解有了这个在web.xml中就可以不用再写了,注解一般在小项目中使用,因为灵活方便,但在大项目中就显得不方便管理了。

因为注解被注释了,所以下面为web.xml中的配置:

<?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-name>LoginServlet</servlet-name>
<servlet-class>cn.uestc.LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping> </web-app>

上面即为基础的功能,可以在此基础上进行优化,下面是多种方式的提交:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<div align="center"> <!--控制整个表单居中-->
<!--
在这里有头像的上传即是文件的上传,所以有必要了解文件上传的特殊要求
文件上传的条件
* 表单必须是post提交方式
* 表单中必须有文件上传项,文件上传项必须有name属性和值
* 表单的enctype属性必须设置为multipart/form-data
-->
<form action="/login" method="post" enctype="multipart/form-data">
<table align="center">
<tr>
<td class="td1">用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td>昵称</td>
<td><input type="text" name="nickname"></td>
</tr>
<tr>
<td >性别</td>
<td> <!--单选按钮-->
<input type="radio" name="sex" value="male">男
<input type="radio" name="sex" value="female">女
</td>
</tr>
<tr>
<td >上传头像</td>
<td><input type="file" id="photo" name="upload"></td>
</tr>
<tr>
<td >兴趣爱好</td> <!--复选框-->
<td><label>
<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="排球">排球
<input type="checkbox" name="hobby" value="羽毛球">羽毛球
</label></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="注册">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

2 Servlet跳转

Servlet的跳转分两种:服务端跳转与客户端跳转,在客户端跳转时相当于从新提交了申请,浏览器地址会发生改变而服务端则不会,一般常用的也是客户端跳转

代码部分稍有不同只是跳转的界面不同,当失败时没有失败界面仍是登录界面

public class LoginServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); //为了解决输出中文乱码问题,java内部要设置为utf-8
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println( "1234");
System.out.println( name +" " +password);
if ("admin".equals(name) && "123".equals(password)){
//进行服务端跳转
request.getRequestDispatcher("success.jsp").forward(request,response);
}else {
//进行客户端跳转
response.sendRedirect("index.jsp");
}
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}

3 Filter拦截优化

上面实现了简单的登录功能,但有两点问题,(1)由于中文字符的问题,所以如果后续其他Servlet要用到用户名就需要在每个Servlet中进行编码设置,虽然只有一行代码但仍不想设置(2)有安全性问题,如果直接访问success.jsp那么就相当于没有登录就直接访问登录成功后的界面了。基于这两个问题的解决采用的是过滤器的方式。

UserFilter类:

public class UserFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//获取配置字符集信息
this.encoding = filterConfig.getInitParameter("encoding");
} @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//设置请求字符集
servletRequest.setCharacterEncoding(encoding); // 涉及到HTTP请求处理,转型处理
HttpServletRequest hrequest = (HttpServletRequest) servletRequest;
// 涉及到HTTP请求处理,转型处理
HttpServletResponse hresponse = (HttpServletResponse) servletResponse;
// 判断用户是否完成了登录操作,session中是否存储用户名
String loginUser = (String) hrequest.getSession().getAttribute("name");
//决定是否放行
if (loginUser == null) {
// 未登录,系统强制重定向至登录页面
hresponse.sendRedirect(hrequest.getContextPath() + "/index.jsp");
return;
} else {
filterChain.doFilter(hrequest, hresponse);
return;
}
} @Override
public void destroy() { }
}

对UserFilter类进行配置,在配置时要注意Filter要在最前面

<filter>
<filter-name>UserFilter</filter-name>
<filter-class>cn.uestc.UserFilter</filter-class>
<init-param>
<!-- 初始化中根据encoding名字寻找配置的字符集-->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter> <!-- 配置要拦截的页面 -->
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/success.jsp</url-pattern>
</filter-mapping> <servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>cn.uestc.LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>

0

3 Servlet、Filter使用的更多相关文章

  1. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

  2. java Servlet Filter 拦截Ajax请求

    /** * 版权:Copyright 2016-2016 AudaqueTech. Co. Ltd. All Rights Reserved. * 描述: * 创建人:赵巍 * 创建时间:2016年1 ...

  3. Java-maven异常-cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突

    使用maven开发web应用程序, 启动的时候报错: jar not loaded. See Servlet Spec . Offending class: javax/servlet/Servlet ...

  4. 理解Servlet过滤器 (javax.servlet.Filter)

    过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响应送给客户端之前,过滤器截获响 ...

  5. 使用Servlet Filter做Login checking

    1) 建一个Login Servlet: Login.java package com.my; import java.io.*; import javax.servlet.*; import jav ...

  6. Servlet Filter 2

    10.Filter常见应用 )统一全站字符编码的过滤器 通过配置参数encoding指明使用何种字符编码,以处理Html Form请求参数的中文问题 案例:编写jsp 输入用户名,在Servlet中获 ...

  7. Servlet Filter 1

    1.Filter简介 )Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图 ...

  8. Java Servlet Filter(转)

    做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...

  9. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  10. java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter

    java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast ...

随机推荐

  1. 【AtCoder】Mujin Programming Challenge 2017

    Mujin Programming Challenge 2017 A - Robot Racing 如果每个数都是一个一个间隔开的,那么答案是\(n!\) 考虑把一个数挪到1,第二个数挪到3,以此类推 ...

  2. jquery【点击】导航按钮的来回切换

    先获取元素的属性值,根据属性值进行判断,点击时对属性进行设置 <i class="layui-icon layui-icon-shrink-right" id="n ...

  3. 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务

    来自:JavaGuide Github 地址:https://github.com/Snailclimb/springboot-integration-examples 目录: 使用 SpringBo ...

  4. 复习最短路 spfa+dijstra堆优化

    题目很简单,, 但是wa了三次,, 用<vector>之前一定要记得clear()...简单说下 spfa的问题 和bell_forman有点类似 每次取出一个点 然后更新 并把更新了的节 ...

  5. 5-MySQL DBA笔记-开发技巧

    第5章 开发技巧 本章将介绍一些和数据库相关的开发技巧.由于开发领域很广,这里只选取部分比较常见的小技巧.5.1 存储树形数据 有时我们需要保存一些树形的数据结构,比如组织架构.话题讨论.知识管理.商 ...

  6. sql游标循环

    DECLARE @begindate DATETIME=CONVERT(DATETIME, '2019.05.06 09:40:50') ,@enddate DATETIME =GETDATE() , ...

  7. WindowsAPI操作串口

    #include <windows.h> #include <stdio.h> int main() { //1.打开串口 HANDLE hCom; hCom = Create ...

  8. Vue大概知识体系和学习参考

    Vue大概知识体系和学习参考文档 官方文档学习,参考,借鉴地址:https://cn.vuejs.org/v2/guide/installation.html 菜鸟教程:https://www.run ...

  9. DX使用随记--GroupControl

    1. 创建按钮: (1)添加引用:Imports DevExpress.XtraEditors.ButtonsPanelControl (2)添加按钮语句:GroupControl1.CustomHe ...

  10. SQL脚本优化

    1.创建索引一.要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引   (1)在经常需要进行检索的字段上创建索引,比如要按照表字段username进行检索,那么就应 ...