java servlet return_javaWEB中的ServletRequest,ServletResponse的使用,及简化Servlet方法

首先说一下ServletRequest,ServletResponse类的使用方法:

public void service(ServletRequest request, ServletResponse response)

throws ServletException, IOException {

/*

* 如何在Servlet中获取请求信息:

* (1):Servlet的servlet()方法用于应答请求:因为每次请求都会调用servlet()方法;

* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

* ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.

* 这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.

*

* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

* */

System.out.println("请求来了");

System.out.println(request);

System.out.println(response);

// 获取请求参数: String getParameter(String name): 根据请求参数的名字, 返回参数值.

//若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

//获取login.html中的user和password

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

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

System.out.println(user+"---"+password);

//String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.

//获取login.html中复选框的多个值,其中复选框中的name值是相等

String inte=request.getParameter("interesting");

System.out.println(inte);

String[] interestings=request.getParameterValues("interesting");

for(String inter:interestings){

System.out.println("--->"+inter);

}

//Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,

//类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.

Enumeration names=request.getParameterNames();

while(names.hasMoreElements()){

String name=names.nextElement();

String value=request.getParameter(name);

System.out.println("name:"+name+"---"+"value:"+value);

}

//Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.

//此方法可以把key值相同的所有value值放在一起输出

Map map=request.getParameterMap();

for(Map.Entry entry:map.entrySet()){

System.out.println(entry.getKey()+"《---》"+Arrays.asList(entry.getValue()));

}

//HttpServletRequest是ServletRequest的子接口,

//针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.

HttpServletRequest http=(HttpServletRequest) request;

//获取请求的URL,

String requestUrl=http.getRequestURI();

System.out.println(requestUrl);

//获取请求方式:即两种请求方式post和get

String method=http.getMethod();

System.out.println(method);

//获取请求的 Serlvet 的映射路径

String servletPath = http.getServletPath();

System.out.println(servletPath); // /loginServlet

//获取请求的查询字符串get请求?后面的字符串

String queryString=http.getQueryString();

System.out.println(queryString);

//ServletResponse封装了响应信息,如果想给用户什么响应, 具体可以使用该接口的方法实现

//不用看控制台,直接在页面上让用户就可以看到

//设置相应类型,例如word文档

response.setContentType("application/msword");//application/msword是word文档

//getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.

PrintWriter out=response.getWriter();

String user1=getServletContext().getInitParameter("user");

String password1=getServletContext().getInitParameter("password");

System.out.println("user1:"+user1+"---"+"password1"+password1);

if(user.equals(user1) && password.equals(password1)){

out.println("helloworld...");

}

//void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

}

----------------------------------------------------------------------------------------------------

将继承Servlet接口的类简化:将这个类改造成一个抽象方法,然后让其他子类来继承这个抽象的父类

改在的抽象类:MyGenericServlet

/*

* 自定一个servlet接口的实现类:让开发任何Servlet都继承该类,以简化开发

* 将其定义为一个抽象类,里面有一个抽象方法

* */

public abstract class MyGenericServlet implements Servlet,ServletConfig{

//这些是Servlet接口的方法

@Override

public void destroy() {}

@Override

public ServletConfig getServletConfig() {

return servletConfig;

}

public void init() throws ServletException {

// TODO Auto-generated method stub

}

@Override

public String getServletInfo() {

return null;

}

private ServletConfig servletConfig;

@Override

public void init(ServletConfig servletConfig) throws ServletException {

this.servletConfig=servletConfig;

}

//这个方法必须实现,所以弄成抽象的方法

@Override

public abstract void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException;

//一下是,ServletConfig接口的方法:

@Override

public String getInitParameter(String arg0) {

return servletConfig.getInitParameter(arg0);

}

@Override

public Enumeration getInitParameterNames() {

return servletConfig.getInitParameterNames();

}

@Override

public ServletContext getServletContext() {

return servletConfig.getServletContext();

}

@Override

public String getServletName() {

return servletConfig.getServletName();

}

}

-----------------------

子类继承抽象的父类:

public class LoginServlet extends MyGenericServlet{

//对当前的Servlet初始化:覆盖init方法

@Override

public void init() throws ServletException{

System.out.println("初始化>>>>");

}

@Override

public void service(ServletRequest request, ServletResponse response)

throws ServletException, IOException {

/*

* 如何在Servlet中获取请求信息:

* (1):Servlet的servlet()方法用于应答请求:因为每次请求都会调用servlet()方法;

* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

* ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.

* 这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.

*

* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

* */

System.out.println("请求来了");

System.out.println(request);

System.out.println(response);

// 获取请求参数: String getParameter(String name): 根据请求参数的名字, 返回参数值.

//若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

//获取login.html中的user和password

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

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

System.out.println(user+"---"+password);

//String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.

//获取login.html中复选框的多个值,其中复选框中的name值是相等

String inte=request.getParameter("interesting");

System.out.println(inte);

String[] interestings=request.getParameterValues("interesting");

for(String inter:interestings){

System.out.println("--->"+inter);

}

//Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,

//类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.

Enumeration names=request.getParameterNames();

while(names.hasMoreElements()){

String name=names.nextElement();

String value=request.getParameter(name);

System.out.println("name:"+name+"---"+"value:"+value);

}

//Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.

//此方法可以把key值相同的所有value值放在一起输出

Map map=request.getParameterMap();

for(Map.Entry entry:map.entrySet()){

System.out.println(entry.getKey()+"《---》"+Arrays.asList(entry.getValue()));

}

//HttpServletRequest是ServletRequest的子接口,

//针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.

HttpServletRequest http=(HttpServletRequest) request;

//获取请求的URL,

String requestUrl=http.getRequestURI();

System.out.println(requestUrl);

//获取请求方式:即两种请求方式post和get

String method=http.getMethod();

System.out.println(method);

//获取请求的 Serlvet 的映射路径

String servletPath = http.getServletPath();

System.out.println(servletPath); // /loginServlet

//获取请求的查询字符串get请求?后面的字符串

String queryString=http.getQueryString();

System.out.println(queryString);

//ServletResponse封装了响应信息,如果想给用户什么响应, 具体可以使用该接口的方法实现

//不用看控制台,直接在页面上让用户就可以看到

//设置相应类型,例如word文档

response.setContentType("application/msword");//application/msword是word文档

//getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.

PrintWriter out=response.getWriter();

String user1=getServletContext().getInitParameter("user");

String password1=getServletContext().getInitParameter("password");

System.out.println("user1:"+user1+"---"+"password1"+password1);

if(user.equals(user1) && password.equals(password1)){

out.println("helloworld...");

}

//void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

}

}

-----------------------------------------------------------------------------------------------

上面的抽象类正好是GenericServlet抽象类,及子类直接继承GenericServletc抽象类即可;

其中GenericServlet,是一个Servlet。是Servlet接口和ServletConfig接口的实现类,但是一个抽象类。其中Servlet方法为抽象方法。

如果新建的Servlet类直接继承GenericServlet抽象类,是开发更加简便;

具体实现:

①. 在 GenericServlet 中声明了一个 SerlvetConfig 类型的成员变量, 在 init(ServletConfig) 方法中对其进行了初始化

②. 利用 servletConfig 成员变量的方法实现了 ServletConfig 接口的方法

③. 还定义了一个 init() 方法, 在 init(SerlvetConfig) 方法中对其进行调用, 子类可以直接覆盖 init() 在其中实现对 Servlet 的初始化.

④. 不建议直接覆盖 init(ServletConfig), 因为如果忘记编写 super.init(config); 而还是用了 SerlvetConfig 接口的方法,

则会出现空指针异常.

⑤. 新建的 init(){} 并非 Serlvet 的生命周期方法. 而 init(ServletConfig) 是生命周期相关的方法.

public class LoginServlet extends GenericServlet{

//对当前的Servlet初始化:覆盖init方法

@Override

public void init() throws ServletException{

System.out.println("初始化>>>>");

}

@Override

public void service(ServletRequest request, ServletResponse response)

throws ServletException, IOException {

/*

* 如何在Servlet中获取请求信息:

* (1):Servlet的servlet()方法用于应答请求:因为每次请求都会调用servlet()方法;

* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

* ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.

* 这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.

*

* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

* */

System.out.println("请求来了");

System.out.println(request);

System.out.println(response);

// 获取请求参数: String getParameter(String name): 根据请求参数的名字, 返回参数值.

//若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

//获取login.html中的user和password

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

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

System.out.println(user+"---"+password);

//String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.

//获取login.html中复选框的多个值,其中复选框中的name值是相等

String inte=request.getParameter("interesting");

System.out.println(inte);

String[] interestings=request.getParameterValues("interesting");

for(String inter:interestings){

System.out.println("--->"+inter);

}

//Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,

//类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.

Enumeration names=request.getParameterNames();

while(names.hasMoreElements()){

String name=names.nextElement();

String value=request.getParameter(name);

System.out.println("name:"+name+"---"+"value:"+value);

}

//Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.

//此方法可以把key值相同的所有value值放在一起输出

Map map=request.getParameterMap();

for(Map.Entry entry:map.entrySet()){

System.out.println(entry.getKey()+"《---》"+Arrays.asList(entry.getValue()));

}

//HttpServletRequest是ServletRequest的子接口,

//针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.

HttpServletRequest http=(HttpServletRequest) request;

//获取请求的URL,

String requestUrl=http.getRequestURI();

System.out.println(requestUrl);

//获取请求方式:即两种请求方式post和get

String method=http.getMethod();

System.out.println(method);

//获取请求的 Serlvet 的映射路径

String servletPath = http.getServletPath();

System.out.println(servletPath); // /loginServlet

//获取请求的查询字符串get请求?后面的字符串

String queryString=http.getQueryString();

System.out.println(queryString);

//ServletResponse封装了响应信息,如果想给用户什么响应, 具体可以使用该接口的方法实现

//不用看控制台,直接在页面上让用户就可以看到

//设置相应类型,例如word文档

response.setContentType("application/msword");//application/msword是word文档

//getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.

PrintWriter out=response.getWriter();

String user1=getServletContext().getInitParameter("user");

String password1=getServletContext().getInitParameter("password");

System.out.println("user1:"+user1+"---"+"password1"+password1);

if(user.equals(user1) && password.equals(password1)){

out.println("helloworld...");

}

//void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的问题是如何解决JavaWeb上传图片时的过滤问题。这个问题其实可以通过在JavaWeb使用Filter来解决。 具体的实现方法如下: 1. 创建一个过滤器类,实现javax.servlet.Filter接口。 2. 在doFilter方法,获取上传文件的文件名,然后判断文件名是否以.jpg、.jpeg、.png、.gif等图片格式结尾。 3. 如果是图片文件,则直接放行,否则就拒绝上传并返回错误信息。 4. 在web.xml文件配置该过滤器。 下面是一个简单的示例代码,仅供参考: ``` import java.io.IOException; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebFilter(filterName = "UploadFilter", urlPatterns = {"/upload/*"}) public class UploadFilter implements Filter { private String[] allowedExt = {".jpg", ".jpeg", ".png", ".gif"}; public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; String fileName = request.getHeader("file-name"); if (fileName != null) { for (String ext : allowedExt) { if (fileName.endsWith(ext)) { chain.doFilter(request, response); return; } } } response.sendError(HttpServletResponse.SC_BAD_REQUEST, "只允许上传图片文件"); } public void init(FilterConfig filterConfig) throws ServletException { } public void destroy() { } } ``` 这个过滤器会拦截所有以"/upload/"开头的URL,并检查上传文件名是否以.jpg、.jpeg、.png、.gif等图片格式结尾。如果是图片文件,则直接放行,否则就拒绝上传并返回错误信息。你可以根据实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值