SpringMVC 始+五种数据提交的方法

离离原上草,一岁一枯荣


前言

这东西比我想象的要多得多,fk


一、SpringMVC

它是基于MVC开发模式的框架,用来优化控制器,它是Spring家族的一员,
它也具备IOC和AOP

所有的web应用都是基于MVC开发
M:模型层,包含实体类,业务逻辑层,数据访问层
V:视图层,html,javaScript,vue等,用来呈现数据
C:控制器,它是用来接收客户端的请求,并返回响应到客户端的组件,Servlet就是其组件

二、SpringMVC框架的优点

  1. 轻量级,基于MVC的框架
  2. 易于上手,容易理解,功能强大
  3. 它具备IOC和AOP
  4. 完全基于注解开发

三、基于注解的SpringMVC框架开发的步骤

  1. 新建项目,选择webapp模板
  2. 修改目录,添加test,java,resources并修改目录属性
  3. 修改pom文件,添加SpringMVC的依赖,添加servlet的依赖
  4. 添加springmvc.xml配置文件,指定包扫描,添加视图解析器
  5. 删除web.xml文件,新建web.xml
  6. 在web.xml中注册SpringMVC框架(所有的web请求都是基于servlet的)
  7. 在webapp目录下新建admin目录,在admin目录下新建main.jsp页面,删除index.jsp页面,并新建,发送请求给服务器
  8. 开发控制器(Servlet),它是一个普通的类
  9. 添加tomcat进行测试功能

四、web请求

web请求执行流程
index.jsp《= = =》 DispatcherServlet(核心处理器)《 = = =》SpringMVC的处理器是一个普通的方法
one.jsp 《 === 》 DispatcherServlet(核心处理器)《 = = =》SpringMVC的处理器是一个普通的方法
响应的分发和返回都是DispatcherServlet来做
DispatcherServlet要在web.xml文件中注册才可用。

五、@RequestMapping

此注解就是来映射服务器访问的路径。

  1. 此注解可加在方法上,是为此方法注册一个可以访问的名称(路径)
@RequestMapping("/demo")
public String demo(){
    System.out.println("服务器被访问到了....");
    return "main";//可以直接跳到/admin/main.jsp页面上
}
<a href="${pageContext.request.contextPath}/demo.action">访问服务器</a>

以上a标签中.action并不是后缀的意思,只是一个标识,标识这样的请求才会被拦截

  1. 此注解可以加在类上,相当于是包名(虚拟路径),主要是区分不同类中相同的action的名称
@RequestMapping("/user")
public class DemoAction1 {...}
<a href="${pageContext.request.contextPath}/user/demo.action">
  1. 此注解可区分get请求和post请求
@Controller
public class ReqAction {
    @RequestMapping(value = "/req",method = RequestMethod.GET)
    public String req(){
        System.out.println("我是处理get请求的....");
        return "main";
    }

    @RequestMapping(value = "/req",method = RequestMethod.POST)
    public String req1(){
        System.out.println("我是处理post请求的....");
        return "main";
    }
}

六、五种数据提交方式的优化(SpringMVC框架)

  1. 单个提交数据
    页面:
    <form action="${pageContext.request.contextPath}/one.action">
        姓名:<input name="myName"> <br>
        年龄:<input name="myAge"> <br>
    </form>

action:

    @RequestMapping("one")
    public String one(String myName,int myAge){
        System.out.println("myName="+myName+",myAge="+(myAge+100));
        return "main";
    }

2、对象封装提交数据
在提交请求中,保证请求参数的名称与实体类中成员变量的名称一致,则可以自动创建对象,则可以自动提交数据,自动类型转换,自动封装数据到对象中
实体类:

public class Users {
    private String uName;
    private int uAge;
    ...}

页面:

<h1>2.对象封装数据提交</h1>
<form action="${pageContext.request.contextPath}/two.action" method="post">
    姓名:<input name="uName"> <br>
    年龄:<input name="uAge"> <br>
    <input type="submit" value="提交">
</form>

action:

    @RequestMapping("/two")
    public String two(Users users){
        System.out.println(users);
        return "main";
    }
  1. 动态占位符提交
    仅限于超链接或地址栏提交数据。它是一杠一值,一杠一大括号,使用注解@PathVariable来解析
    /**
     * <a href="${pageContext.request.contextPath}/three/张三/22.action?">动态提交</a>
     *@RequestMapping("/three/{name}/{age}")中的name和age相当于行参,是什么都可以
     */
    //@RequestMapping("/three/{name}/{age}")此种情况@PathVariable后面不用跟东西
    @RequestMapping("/three/{uname}/{uage}")//此为第二种情况@PathVariable("uname")
    public String three(
            @PathVariable("uname")
            String name,
            @PathVariable("uage")
            int age){
        System.out.println("myName="+name+",myAge="+(age+100));
        return "main";
    }
  1. 映射名称不一致
    提交请求参数与action方法的形参的名称不一致,使用注解@RequestParam来解析
    /**
     *     姓名:<input name="uName"> <br>
     *     年龄:<input name="uAge"> <br>
     * @param uname
     * @param uage
     * @return
     */
    @RequestMapping("/four")
    public String four(
            @RequestParam("uName")//专门用来解决名称不一致
            String uname,
            @RequestParam("uAge")
            int uage){
        System.out.println("myName="+uname+",myAge="+(uage+100));
        return "main";
    }
  1. 手工提取
    /**
     *     姓名:<input name="uName"> <br>
     *     年龄:<input name="uAge"> <br>
     * @return
     */
    @RequestMapping("/five")
    public String five(HttpServletRequest request){
        String name = request.getParameter("uName");
        int age = Integer.parseInt(request.getParameter("uAge"));
        System.out.println("myName="+name+",myAge="+(age+100));
        return "main";
    }

总结

restful风格

${pageContext.request.contextPath}:
${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> 。
也就是取出部署的应用程序名或者是当前的项目名称。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于SpringMVC、CXF、WebService和JSP的登录功能的示例代码,供你参考: 1. 创建User模型类 ```java public class User { private String username; private String password; // 省略getter、setter方法 } ``` 2. 创建UserDAO接口和UserDAOImpl实现类 ```java public interface UserDAO { User findUserByUsernameAndPassword(String username, String password); } ``` ```java @Repository public class UserDAOImpl implements UserDAO { @Autowired private SqlSessionTemplate sqlSessionTemplate; @Override public User findUserByUsernameAndPassword(String username, String password) { Map<String, String> params = new HashMap<>(); params.put("username", username); params.put("password", password); return sqlSessionTemplate.selectOne("UserMapper.findUserByUsernameAndPassword", params); } } ``` 3. 创建UserService接口和UserServiceImpl实现类 ```java public interface UserService { User login(String username, String password); } ``` ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserDAO userDAO; @Override public User login(String username, String password) { return userDAO.findUserByUsernameAndPassword(username, password); } } ``` 4. 创建LoginController ```java @Controller public class LoginController { @Autowired private UserService userService; @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(HttpServletRequest request, String username, String password) { User user = userService.login(username, password); if (user != null) { request.getSession().setAttribute("user", user); return "redirect:/index"; } else { request.setAttribute("message", "用户名或密码错误"); return "login"; } } } ``` 5. 创建UserWebService接口和UserWebServiceImpl实现类 ```java @WebService public interface UserWebService { User login(String username, String password); } ``` ```java @Service @WebService(endpointInterface = "com.example.UserWebService") public class UserWebServiceImpl implements UserWebService { @Autowired private UserService userService; @Override public User login(String username, String password) { return userService.login(username, password); } } ``` 6. 创建CXF配置文件 在applicationContext.xml中添加以下配置: ```xml <jaxws:endpoint id="userWebService" implementor="#userWebServiceImpl" address="/user" /> <bean id="userWebServiceImpl" class="com.example.UserWebServiceImpl" /> ``` 7. 创建JSP页面 ```html <form action="${pageContext.request.contextPath}/login" method="post"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <input type="submit" value="登录"> </form> ``` 以上是一个简单的示例,仅供参考。具体实现还需要根据你的具体需求进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值