request请求总结

 

请求行:

请求方式,请求的地址和参数  

public class LineServlet extends HttpServlet {



protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {



//1、获得请求方式

String method = request.getMethod();

System.out.println("method:"+method);

//2、获得请求的资源相关的内容

String requestURI = request.getRequestURI();//客户端地址

StringBuffer requestURL = request.getRequestURL();//有http的地址

System.out.println("uri:"+requestURI);

System.out.println("url:"+requestURL);

//获得web应用的名称

String contextPath = request.getContextPath();//获得项目名

System.out.println("web应用:"+contextPath);

//地址后的参数的字符串

String queryString = request.getQueryString();

System.out.println(queryString);

//3、获得客户机的信息---获得访问者IP地址

String remoteAddr = request.getRemoteAddr();//客户端的地址

System.out.println("IP:"+remoteAddr);//为什么获得是





}



protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

总结:

url与URI的区别:

Stringbuffer与string的区别:有点像数组和集合的关系

String的特点是一旦赋值,便不能更改其指向的字符对象,如果更改,则会指向一个新的字符对象

StringBuffer对象可以调用其方法动态的进行增加、插入、修改和删除操作(.append())

转化:一旦通过StringBuffer生成最终想要的字符串,就可调用它的toString方法将其转换为一个String对象

     

 

请求头:

键值对的形式:存储了客户端和请求的一些基本信息

package com.ithiema.header;



import java.io.IOException;

import java.util.Enumeration;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class HeaderServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//1、获得指定的头

String header = request.getHeader("User-Agent");//获得某个键对应的值。(用户使用的浏览器的类型)

System.out.println(header);

//2、获得所有的头的名称

Enumeration<String> headerNames = request.getHeaderNames();//获得 n个键名,放回一个Enumeration<String>类型的数据

while(headerNames.hasMoreElements()){//.hasMoreElements()返回的是布尔类型的数据

String headerName = headerNames.nextElement();//获得键

String headerValue = request.getHeader(headerName);//获得值

System.out.println(headerName+":"+headerValue);

}

}


protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

总结:

Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。(是一个迭代器)Interotar

有点像集合用于存储对象的。只是获取对象的方式有点不一样(集合是通过遍历)常用的方法,hasMoreElements(),.nextElement()

 


 


package com.ithiema.header;



import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class RefererServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


//对该新闻的来源的进行判断

String header = request.getHeader("referer");



if(header!=null&&header.startsWith("http://localhost")){

//是从我自己的网站跳转过来的 可以看新闻

response.setContentType("text/html;charset=UTF-8");

response.getWriter().write("中国确实已经拿到100块金牌....");

}else{

response.setContentType("text/html;charset=UTF-8");

response.getWriter().write("你是盗链者,可耻!!");

}


}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

String对象常用的方法:equals("字符串"):是否与某个字符串一样startwith(字符串)以某个字符串开头

response.setContentType("text/html;charset=utf-8");

response.setHeader("refresh", "5;http://www.baidu.com");当一个字符串的位置要传入多个有用的参数的的时候就用; 分开来

if()括号后面没有;加了会报错

 

 

 

域对象:

转发:

public class Servlet1 extends HttpServlet {


protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


request.setAttribute("name", "tom");

RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");

dispatcher.forward(request, response);



}



protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}









public class Servlet2 extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//从request域中取出数据

Object attribute = request.getAttribute("name");//getAttribute是获取域中的内容

response.getWriter().write("hello haohao..."+attribute);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

请求体:

public class ContentServlet extends HttpServlet {



protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//1、获得单个表单值

String username = request.getParameter("username");//getParameter是获取体中的内容

System.out.println(username);

String password = request.getParameter("password");

System.out.println(password);

//2、获得多个表单的值

String[] hobbys = request.getParameterValues("hobby");

for(String hobby:hobbys){

System.out.println(hobby);

}

//3、获得所有的请求参数的名称

Enumeration<String> parameterNames = request.getParameterNames();

while(parameterNames.hasMoreElements()){

System.out.println(parameterNames.nextElement());

}

System.out.println("------------------");

//4、获得所有的参数 参数封装到一个Map<String,String[]>

Map<String, String[]> parameterMap = request.getParameterMap();

for(Map.Entry<String, String[]> entry:parameterMap.entrySet()){//map集合的遍历方式就是这样的

System.out.println(entry.getKey());

for(String str:entry.getValue()){

System.out.println(str);

}

System.out.println("---------------------------");

}

}


protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

总结:

Map.Entry<String, String[]> entry:

map.entrySet()是将map里的每一个键值对取出来封装成一个Entry对象在存到一个Set里面。

Map.Entry<String, String[]>的意思是一个泛型,

表示Entry里装的是两个string的字符串,分别是allrecordmap的key和value

打断点调试:F8是调到下一个断点(没有的话,直接运行到结束

F5是单步调试进入函数内部。

F6是单步调试不进入函数内部。

F7是由函数内部返回到调用处。

 

 

案例demo:

登录:

package com.ithiema.login;



import java.io.IOException;

import java.sql.SQLException;



import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanHandler;



import com.ithiema.register.User;

import com.ithiema.utils.DataSourceUtils;



public class LoginServlet extends HttpServlet {



protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {



request.setCharacterEncoding("UTF-8");



//1、获得用户名和密码

String username = request.getParameter("username");

String password = request.getParameter("password");

//2、调用一个业务方法进行该用户查询

User login = null;

try {

login = login(username,password);

} catch (SQLException e) {

e.printStackTrace();

}

//3、通过user是否为null判断用户名和密码是否正确

if(login!=null){

//用户名和密码正确

//登录成功 跳转到网站的首页

response.sendRedirect(request.getContextPath());

}else{

//用户名或密码错误

//跳回当前login.jsp

//使用转发 转发到login.jsp  向request域中存储错误信息

request.setAttribute("loginInfo", "用户名或密码错误");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}



}



public User login(String username,String password) throws SQLException{

QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());

String sql = "select * from user04 where uname=? and upassword=?";

User user = runner.query(sql, new BeanHandler<User>(User.class), username,password);

return user;

}



protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

总结:一般出现404  可能的原因:代码的问题,  配置文件的原因。跳转的服务器地址 或客户端地址写错

 

 

注册:

package com.ithiema.register;


import java.io.IOException;

import java.lang.reflect.InvocationTargetException;

import java.sql.SQLException;

import java.util.Map;

import java.util.UUID;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.dbutils.QueryRunner;

import com.ithiema.utils.DataSourceUtils;

public class RegisterServlet extends HttpServlet {


protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//设置request的编码---只适合post方式

request.setCharacterEncoding("UTF-8");

//get方式乱码解决

//String username = request.getParameter("username");//乱码    如果参数比较多怎么办??

//先用iso8859-1编码 在使用utf-8解码

//username = new String(username.getBytes("iso8859-1"),"UTF-8");


//1、获取数据

//String username = request.getParameter("username");//当请求体中的元素很少时。用这种

//System.out.println(username);

//String password = request.getParameter("password");

//.....



//2、将散装的封装到javaBean

//User user = new User();

//user.setUsername(username);

//user.setPassword(password);



//使用BeanUtils进行自动映射封装

//BeanUtils工作原理:将map中的数据 根据key与实体的属性的对应关系封装

//只要key的名字与实体的属性 的名字一样 就自动封装到实体中(名字要确定一样才会被自动赋值)

Map<String, String[]> properties = request.getParameterMap();//凡是用了这个的方法都要进行封装。请求体比较多时用这种

User user = new User();//对象中的字段和User要一样才可以进行封装,封装不了的手动封装

try {

BeanUtils.populate(user, properties);

} catch (IllegalAccessException | InvocationTargetException e) {

e.printStackTrace();

}



//现在这个位置 user对象已经封装好了

//手动封装uid----uuid---随机不重复的字符串32位--java代码生成后是36位

user.setUid(UUID.randomUUID().toString());



//3、将参数传递给一个业务操作方法

try {

regist(user);

} catch (SQLException e) {

e.printStackTrace();

}


//4、认为注册成功跳转到登录页面

response.sendRedirect(request.getContextPath()+"/login.jsp");



}



//注册的方法

public void regist(User user) throws SQLException{

//操作数据库

QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());

String sql = "insert into user values(?,?,?,?,?,?,?)"; //以数据库中的表为标准



    int row=r

/*System.out.println(user.getUsername());

System.out.println(user.getPassword());

System.out.println(user.getBirthday());

System.out.println(user.getSex());*/

    if(row>0)

    {

     System.out.println("注册成功");

    }

    else{

     System.out.println("注册失败");

    }

}



protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}




}

  

总结:一般问题汇总:404 跳转的问题(服务器地址客户端地址有没有写错,还有配置文件) 500(【配置文件),代码问题,,sql语句有问题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值